实验3 类与对象基础实验(一)
一、 实验目的
1. 掌握对象与类的关系
2. 掌握类的域、方法、构造器的概念 3. 掌握对象的创建与初始化
4. 掌握方法和域(静态和非静态)的使用方式 5. 掌握Math类,掌握静态成员的使用方式 6. 理解方法和构造器重载现象
二、实验内容
1. 程序阅读并回答问题 2. 类的使用
3. 编程实验:猜数字
4. 编程实验:素数判断与统计
三、实验步骤
1. 程序阅读并回答问题:阅读以下代码,回答问题。 //AreaAndLength.java class Triangle {
double sideA,sideB,sideC,area,length; boolean boo; Triangle(){};
public Triangle(double a,double b,double c){ sideA=a; sideB=b; sideC=c;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA) {
boo=true; } else {
boo=false; } }
double getLength(){
length=sideA+sideB+sideC; return length; }
public double getArea(){ if(boo)
{
double p=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ; return area; } else {
System.out.println(\不是一个三角形,不能计算面积\ return 0; } }
public void setABC(double a,double b,double c){ sideA=a; sideB=b; sideC=c;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA) {
boo=true; } else {
boo=false; } } }
class Lader {
double above,bottom,height,area;
Lader(double a,double b,double h){ above=a; bottom=b; height=h; }
double getArea(){
area=(above+bottom)*height/2; return area; } }
class Circle {
double radius,area,length; Circle(double r){ radius=r; }
double getArea(){
area=Math.PI*radius*radius; return area;
}
double getLength(){
length=2*Math.PI*radius; return length; }
void setRadius(double newRadius){ radius=newRadius; }
double getRadius(){ return radius; } }
public class AreaAndLength {
public static void main(String args[]) {
double length,area; Circle circle=null; Triangle triangle ; Lader lader;
circle=new Circle(5); triangle =new Triangle(3,5,4); lader=new Lader(2,3,4); length=circle.getLength();
System.out.println(\圆的周长:\ area=circle.getArea();
System.out.println(\圆的面积:\ length=triangle .getLength();
System.out.println(\三角形的周长:\ area=triangle .getArea();
System.out.println(\三角形的面积:\ area=lader.getArea();
System.out.println(\梯形的面积:\ triangle .setABC(12,34,1); if(triangle .boo) { area=triangle .getArea();
System.out.println(\三角形的面积:\ } else { System.out.println(\不能构成三角形\ }
if(triangle .boo) { length=triangle .getLength();
System.out.println(\三角形的周长:\
} else { System.out.println(\不能构成三角形\ } } }
(1) 将上述代码编译运行,将运行结果截图。
(2) 上述源码中共定义了几个类?分别刻画了哪些数学图形?Triangle类有哪些域和方法?
Triangle的这些域和方法是静态的还是非静态的?
(3) 类和对象是什么关系?请从上述AreaAndLength.java中举例说明如何创建对象。
(4) Triangle类中出现的Math.sqrt是什么?请举例说明Math类中还有哪些常用域和方法?
(5) 静态域和方法与非静态域和方法在使用时有什么区别?请从上述AreaAndLength.java中举例
说明。
(6) 什么是构造器?构造器与一般方法的区别是什么?构造器可以重载吗?请从上述
AreaAndLength.java中举例说明。
2. 已有Rectangle类(矩形类),它有两个浮点型属性length(长)和width(宽)。该类具有两个构造器(无参和有参),perimeter()和area()方法分别返回矩形的周长和面积, 请编写相应的包含main方法的类和main方法来测试Rectangle类。
测试示例如下:
请输入矩形a的长和宽: 12 24
请输出矩形a的周长和面积: 矩形a的周长:72.0 矩形a的面积:288.0 请输出矩形b的周长和面积: 矩形b的周长:50.0 矩形b的面积:150.0
程序结构如下:
import java.util.Scanner; class Rectangle{
double length,width;
Rectangle(){};
Rectangle(double alength,double awidth){ }
public double perimeter(){ } }
return (length+width)*2;
return length*width; length=alength; width=awidth;
public double area(){
}
public class Test2 { }
public static void main(String args[]){
//请用无参构造器创建矩形a,用有参构造器创建矩形b
(1) 请将源码编写完整。
(2) 程序运行结果截图。
3. 编程实验:猜数字。编写一个Java应用程序,这个程序首先随机产生一个0到100之间的数字,然后由用户猜测这个随机数字的大小(即用户输入数字,并将整个数字与随机产生的数字比较)。猜测过程的要求是:
? 如果输入的数字与随机数相等,那么输出“恭喜你,猜对了”, ? 如果输入的数字大于随机数,那么输出“你猜大了,请继续猜”, ? 如果输入的数字小于随机数,那么输出“你猜小了,请继续猜”, ? 通过循环上述过程,直到猜到随机数为止。
注意:随机数产生可以通过Math类的random方法。
程序运行输入输出界面如下(注意:程序运行时产生的随机数一般不同):
4. 编程实验:素数判断与统计。编写一个Java程序,可以统计某一个数字区间(比如从1到100)的素数个数,并输出这些素数。要求如下:
? 数字区间从键盘输入。比如,键盘输入1和100,分别表示区间的下限和上限。 ? 需要单独编写静态的isPrime方法,如下: static boolean isPrime(int n){
//如果参数n是素数,那么返回true;否则返回false }
? 通过循环一次判断区间内的数字是否是素数(调用上述isPrime方法)。