【JAVA程序设计】实验三 函数与对象

    科技2023-10-09  86

    【JAVA程序设计】实验三 函数与对象

    一、实验目的:

    1、学会定义并实现类。 2、学会定义并创建类的对象,通过类的对象访问类的成员属性与方法。 3、学会定义并实现派生类,学会使用派生类的对象。 4、理解并学会使用类的多态性,理解并能使用运算符重载。

    二、实验环境:

    BlueJ

    三、实验内容:

    1.定义并实现一个长方体类(Cube),包含长(length)、宽(width)与高(height)等三个属性,包含计算体积(calVolume)与计算表面积(calArea)等两个方法,类的属由构造函数进行初始化或通过成员函数赋值。编写一段程序,测试该类。 代码:

    public class Cube { double length,width,height; public void set(double length,double width, double height) { this.length=length; this.width=width; this.height=height; } public void calVolume() { System.out.println("体积为:"+length*width*height); } public void calArea() { System.out.println("表面积为:"+(length*width+length*height+width*height)); } public static void main(String args[]) { Cube c=new Cube(); c.set(1,2,3); c.calVolume(); c.calArea(); } } (选做)定义并实现一个三角形类(Triangle),其三个边长(edge1, edge2, edge3)为其属性,包含判断其是否为三角形(isTriangle)、计算周长(calPerimeter)及计算面积(calArea)等三个方法,类的属由构造函数进行初始化或通过成员函数赋值。编写一段程序,测试该类。 代码: public class Triangle { double edge1,edge2,edge3; public void set(double edge1,double edge2,double edge3) { this.edge1=edge1; this.edge2=edge2; this.edge3=edge3; } public boolean isTriangle() { if(edge1+edge2>edge3&&edge1+edge3>edge2&&edge2+edge3>edge1) return true; else return false; } public void calPerimeter() { System.out.println("周长为:"+(edge1+edge2+edge3)); } public void calArea() { double answer,p; p=(double)(edge1+edge2+edge3)/2; answer=java.lang.Math.sqrt(p*(p-edge1)*(p-edge2)*(p-edge3)); System.out.println("面积为:"+answer); } public static void main() { Triangle T=new Triangle(); T.set(3,4,5); if(T.isTriangle()) { T.calPerimeter(); T.calArea(); } else System.out.println("输入的的三角形非法!"); } } 定义并实现一个复数类(Complex),包含实部(real)及虚部(image)两个属性,包含计算两个复数的和(add)、积(multiply)以及打印复数(print)等三个方法,类的属由构造函数进行初始化或通过成员函数赋值。编写一段程序,测试该类。 Complex类: public class Complex { double real,image; public void add(double re,double im) { real=re+real; image=image+im; } public void multiply(double re,double im) { real=re*real-im*image; image=re*image+real*im; } Complex() { real=1.5; image=1.5; } public void print() { System.out.println(real+"+"+image+"i"); } }

    主函数:

    import java.util.Scanner; public class Practice3 { public static void main(String args[]) { double re,im; Complex C=new Complex(); Scanner scanner=new Scanner(System.in); System.out.println("请输入一个复数的实部及虚部:"); re=scanner.nextDouble(); im=scanner.nextDouble(); C.add(re,im); System.out.print("add:"); C.print(); C.multiply(re,im); System.out.print("multiply:"); C.print(); } } 定义并实现一个Person类,包含姓名(name)与编号(code)等两个属性,通过构造函数为属性赋值,拥有显示属性值的方法(showInfo)。从Person类派生出一个Student类,拥有数学成绩、英语成绩、Java成绩等三个属性,拥有输入成绩、计算平均成绩、显示信息(姓名、编号及平均值)等方法。编写一段程序,测试这两个类。 代码: Person类: public class Person { public String name; public int code; Person() { name="小凡"; code=1106; } public void showInfo() { System.out.println("name:"+name+"\ncode:"+code); } }

    Student类:

    public class Student extends Person { public double math,english,Java; public void getgrade(double math,double english,double Java) { this.math=math; this.english=english; this.Java=Java; } public double average() { return (math+english+Java)/3; } public void showInfo() { super.showInfo(); System.out.print("数学成绩:"+math+"\n英语成绩:"+english+"\nJava成绩:"+Java+"\n"); } }

    主函数:

    public class Practice1 { public static void main(String args[]) { Student S=new Student(); S.getgrade(95.5,90,89.9); S.showInfo(); System.out.println("平均成绩为:"+S.average()); } } (选做)定义并实现一个Circle类,属性为圆的半径radius,其值由构造函数初始化。包含计算周长(calPerimeter)与计算面积(calArea),显示信息(半径、周长与面积)(showInfo)等方法。从Circle类派生出Cylinder类,拥有高(height)这个属性,其值由构造函数初始化。包含计算表面积(calArea)、计算体积(calVolume)及显示信息(半径、表面积、体积)(showInfo)等方法。编写一段程序,测试这两个类。

    Circle1类:

    public class Circle1 { double radius; Circle1() { radius=3.5; } public double calPerimeter() { return radius*2*3.14; } public double calArea() { return radius*radius*3.14; } public void showInfo() { System.out.println("圆的周长为:"+String.format("%.3f",calPerimeter())); System.out.println("圆的面积为:"+String.format("%.3f",calArea())); } }

    Cylinder类:

    public class Cylinder extends Circle1 { double height; Cylinder() { height=2.5; } public double calArea() { return super.calArea()*2+height*super.calPerimeter(); } public double calVolume() { return super.calArea()*height; } public void showInfo() { System.out.println("圆柱的表面积为:"+String.format("%.3f",calArea())); System.out.println("圆柱的体积为:"+String.format("%.3f",calVolume())); } }

    主函数:

    public class Practic4 { public static void main(String args[]) { Circle1 C=new Circle1(); C.calArea(); C.calPerimeter(); C.showInfo(); Cylinder Cy=new Cylinder(); Cy.calArea(); Cy.calVolume(); Cy.showInfo(); } } 定义并实现如下三个类:(1)Shape类,无属性,有一个抽象函数calArea;(2)Rectangle类,从Shape类派生,有长度(length)与宽度(width)两个属性,需重写calArea方法;(3)Circle类,从Shape类派生,有半径(Radius)一个属性,需重写calArea方法。编写一段程序来测试这几个类。 代码: Shape类: abstract class Shape { abstract double calArea(); } Rectangle类: public class Rectangle extends Shape { double length,width; double calArea() { return length*width; } }

    Circle类:

    ublic class Circle extends Rectangle { double Radius; double calArea() { return Radius*Radius*3.14; } }

    主函数:

    import java.util.Scanner; public class Practice2 { public static void main(String args[]) { double x,y,r; Scanner scanner=new Scanner(System.in); System.out.println("请输入矩形的长和宽:"); x=scanner.nextDouble(); y=scanner.nextDouble(); Rectangle R=new Rectangle(); R.length=x; R.width=y; Circle c=new Circle(); System.out.println("请输入圆形的半径"); r=scanner.nextDouble(); c.Radius=r; System.out.println("矩形的面积为:"+R.calArea()); System.out.println("圆的面积为:"+c.calArea()); } } 在6的基础上,从Rectangle类派生Cube类,有属性高度(width),有计算表面积(calArea)及计算体积(calVolume)等方法。编写一段程序来测试这几个类。 代码: Cube类: public class Cube extends Rectangle { double height; public double calArea() { return 2*((width*length)+(width*height)+(length*height)); } public double calVolume() { return width*length*height; }

    } 主函数:

    import java.util.Scanner; public class Practice2 { public static void main(String args[]) { double x,y,h; Scanner scanner=new Scanner(System.in); System.out.println("请输入矩形的长和宽:"); x=scanner.nextDouble(); y=scanner.nextDouble(); Cube c=new Cube(); System.out.println("请输入长方形的高:"); h=scanner.nextDouble(); c.length=x; c.width=y; c.height=h; System.out.println("长方体的表面积为:"+c.calArea()); System.out.println("长方体的体积为:"+c.calVolume()); } } (选做)在7的基础上,随机产生一系列图形(Rectangle,Circle或Cube),把它们按面积大小排序。 类函数与上同,主函数: import java.util.Random; public class Practice2 { public static void main(String args[]) { int n=0; Random random=new Random(); if(n<=0) { n=random.nextInt(10); } System.out.println("随机产生了"+n+"个图形"); double array[]=new double[n]; int site[]=new int[n]; for(int i=0;i<n;i++) { int flag=random.nextInt(3); switch(flag) { case 0: { Rectangle R=new Rectangle(); R.length=(Math.random())*10; R.width=(Math.random())*10; array[i]=R.calArea(); site[i]=0; System.out.println("长方形面积为:"+String.format("%.3f",R.calArea())); break; } case 1: { Circle C=new Circle(); C.Radius=(Math.random())*10; array[i]=C.calArea(); site[i]=1; System.out.println("圆面积为:"+String.format("%.3f",C.calArea())); break; } case 2: { Cube Cu=new Cube(); Cu.height=(Math.random())*10; Cu.length=(Math.random())*10; Cu.width=(Math.random())*10; array[i]=Cu.calArea(); site[i]=2; System.out.println("长方体表面积为:"+String.format("%.3f",Cu.calArea())); break; } } } for(int i=0;i<array.length;i++) for(int j=0;j<array.length-1;j++) { if(array[j]<array[j+1]) { double temp1=array[j]; int temp2=site[j]; array[j]=array[j+1]; site[j]=site[j+1]; array[j+1]=temp1; site[j+1]=temp2; } } System.out.println("\n排序的结果为:"); for(int i=0;i<array.length;i++) { switch(site[i]) { case 0: { System.out.println("长方形面积:"+String.format("%.3f",array[i])); break; } case 1: { System.out.println("圆面积:"+String.format("%.3f",array[i])); break; } case 2: { System.out.println("长方体表面积面积:"+String.format("%.3f",array[i])); break; } } } } }
    Processed: 0.022, SQL: 8