2021-10-28 JAVA实验三学习总结
本博客仅为个人学习记录,查看标准答案请忽视个人作业,个人作业仅为我自己比对用。
(一)类与对象
编写一个Java Application程序,该程序中有3个类:Triangle,Lader 和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。
- Triangle类:具有类型为double的三个边、周长、面积属性,具有返回周长、面积以及修改三个边的功能。另外,还具有一个boolean类型的属性,该属性用来判断三个数能否构成一个三角形。
- Lader类:具有类型为double的上底、下底、高、面积属性,具有返回面积的功能。
- Circle类:具有类型为double的半径、周长和面积属性,具有返回周长、面积的功能。
标准答案:
class Triangle {double sideA, sideB, sideC, area, length;boolean boo;public Triangle(double a, double b, double c) {sideA = a;sideB = b;sideC = c;// 参数a, b, c分别赋值给sideA, sideB, sideCif (a + b > c && a + c > b && c + b > a)// a, b, c构成三角形的条件表达式{boo = true;// 给boo赋值} else {boo = false;// 给boo赋值}}double getLength() { // 方法体,要求计算出length的值并返回if (boo) {length = sideA + sideB + sideC;return length;} else {System.out.println("不是一个三角形,不能计算周长");return 0;}}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;// 参数a, b, c分别赋值给sideA, sideB, sideCif (a + b > c && a + c > b && c + b > a)// a, b, c构成三角形的条件表达式{boo = true;// 给boo赋值。} else {boo = false;// 给boo赋值}}
}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) / 2 * height;// 方法体,,要求计算出area返回return area;}
}class Circle {double radius, area;Circle(double r) { // 方法体radius = r;}double getArea() { // 方法体,要求计算出area返回return 3.14 * radius * radius;}double getLength() { // getArea方法体的代码,要求计算出length返回return 3.14 * 2 * radius;}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(10);//创建对象circletriangle = new Triangle(3, 4, 5);// 创建对象trianglelader = new Lader(3, 4, 10);// 创建对象laderlength = circle.getLength();// circle调用方法返回周长并赋值给lengthSystem.out.println("圆的周长:" + length);area = circle.getArea();// circle调用方法返回面积并赋值给areaSystem.out.println("圆的面积:" + area);length = triangle.getLength();// triangle调用方法返回周长并赋值给lengthSystem.out.println("三角形的周长:" + length);area = triangle.getArea();// triangle调用方法返回面积并赋值给areaSystem.out.println("三角形的面积:" + area);area = lader.getArea();// lader调用方法返回面积并赋值给areaSystem.out.println("梯形的面积:" + area);triangle.setABC(12, 34, 1);// triangle调用方法返修改三个边的代码,要求将三个边修改为12,34,1area = triangle.getArea();// triangle调用方法返回面积并赋值给areaSystem.out.println("三角形的面积:" + area);length = triangle.getLength(); // triangle对象调用方法返回周长并赋值给lengthSystem.out.println("三角形的周长:" + length);}
}
个人作业:
class Triangle
{ double sideA,sideB,sideC,area,length;boolean boo;public Triangle(double a,double b,double c) { sideA=a;sideB=b;sideC=c; // 参数a, b, c分别赋值给sideA, sideB, sideCif(a+b>c&&a+c>b&&b+c>a&&a>0&&b>0&&c>0) //a, b, c构成三角形的条件表达式{ boo=true; // 给boo赋值} else{ boo=false; // 给boo赋值}}double getLength() {length=sideA+sideB+sideC;return length; // 方法体,要求计算出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; // 参数a, b, c分别赋值给sideA, sideB, sideCif(a+b>c&&a+c>b&&b+c>a&&a>0&&b>0&&c>0) // a, b, c构成三角形的条件表达式{ boo=true; //给boo赋值。} else{ boo=false; // 给boo赋值}}public double getA(){return sideA;}
}
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; // 方法体,,要求计算出area返回}
}
class Circle
{ double radius,area;Circle(double r){ radius=r; //方法体}double getArea( ) { area=radius*radius*Math.PI;return area; //方法体,要求计算出area返回}double getLength( ) { return 2*radius*Math.PI; //getArea方法体的代码,要求计算出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(2); //创建对象circletriangle=new Triangle(3,5,4); //创建对象trianglelader=new Lader(2,3,4); //创建对象laderlength=circle.getLength(); // circle调用方法返回周长并赋值给lengthSystem.out.println("圆的周长:"+length); area=circle.getArea(); // circle调用方法返回面积并赋值给areaSystem.out.println("圆的面积:"+area); length=triangle.getLength(); // triangle调用方法返回周长并赋值给lengthSystem.out.println("三角形的周长:"+length); area=triangle.getArea(); // triangle调用方法返回面积并赋值给areaSystem.out.println("三角形的面积:"+area); area=lader.getArea(); // lader调用方法返回面积并赋值给areaSystem.out.println("梯形的面积:"+area); triangle.setABC(12, 34, 1); // triangle调用方法返修改三个边的代码,要求将三个边修改为12,34,1area=triangle.getArea(); // triangle调用方法返回面积并赋值给areaSystem.out.println("三角形的面积:"+area); length=triangle.getLength(); // triangle调用方法返回周长并赋值给lengthSystem.out.println("三角形的周长:"+length);}
}
运行结果:
(二)继承
有一个abstract类,类名为Employee。Employee的子类有YearWorker,MonthWorker和WeekWorker。YearWorker对象按年领取薪水,MonthWorker按月领取薪水,WeekWorker按周领取薪水。Employee类有一个abstract方法:public abstract earnings(); 子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。
有一个Company类,该类用employee数组作为成员,employee数组的单元可以是YearWorker对象的上转型对象、MonthWorker 对象的上转型对象或WeekWorker对象的上转型对象。程序能输出Company 对象一年需要支付的薪水总额。
标准答案:
abstract class Employee {public abstract double earnings();
}class YearWorker extends Employee {public double earnings() {return 50000.456;}
}class MonthWorker extends Employee {public double earnings() {return 12 * 2000;}
}class WeekWorker extends Employee {public double earnings() {return 52 * 500;}
}class Company {Employee[] employee;double salaries = 0;Company(Employee[] employee) {this.employee = employee;}public double salariesPay() {salaries = 0;for (int i = 0; i < employee.length; i++) {salaries = salaries + employee[i].earnings();}return salaries;}
}public class HardWork {public static void main(String args[]) {Employee[] employee = new Employee[20];for (int i = 0; i < employee.length; i++) {if (i % 3 == 0)employee[i] = new WeekWorker();else if (i % 3 == 1)employee[i] = new MonthWorker();else if (i % 3 == 2)employee[i] = new YearWorker();}Company company = new Company(employee);System.out.println("公司工资总额:" + company.salariesPay());}
}
个人作业:
abstract class Employee
{public abstract double earnings( );
}
class YearWorker extends Employee
{public double earnings() {double salary=200;return salary*12;} // 重写earnings( )方法
}
class MonthWorker extends Employee
{public double earnings() {double salary=200;return salary;}// 重写earnings( )方法
}
class WeekWorker extends Employee
{public double earnings() {double salary=200;return salary/4;}// 重写earnings( )方法
}
class Company
{Employee[ ] employee;double salaries=0;Company(Employee[ ] employee){this.employee=employee;}public double salariesPay( ){salaries=0;for(int i=0;i<employee.length;i++) {salaries+=employee[i].earnings();// 计算salaries}return salaries;}
}
public class HardWork
{public static void main(String args[ ]){Employee[ ] employee=new Employee[20];for(int i=0;i<employee.length;i++){if(i%3==0)employee[i]=new WeekWorker( );else if(i%3==1)employee[i]=new MonthWorker( );else if(i%3==2)employee[i]=new YearWorker( );} Company company=new Company(employee);System.out.println("公司年工资总额:"+company.salariesPay( ) );}
}
个人作业运行结果:
(三)实例成员与类成员
class A
{ float a; // 声明一个float型实例变量:astatic float b; // 声明一个float型类变量:bvoid setA(float a){ this.a=a; // 将参数a的值赋值给成员变量a}void setB(float b){ this.b=b; // 将参数b的值赋值给成员变量b} float getA( ){ return a;}float getB( ){ return b;}void inputA( ){ System.out.println(a);}static void inputB( ){ System.out.println(b);}
}
public class Example
{ public static void main(String args[ ]) { A.b=100; // 通过类名操作类变量b,并赋值100A.inputB(); // 通过类名调用方法inputB( )A cat=new A( );A dog=new A( );cat.setA(200);// cat象调用方法setA(int a)将cat的成员a的值设置为200cat.setB(400); // cat调用方法setB(int b)将cat的成员b的值设置为400dog.setA(200); // dog象调用方法setA(int a)将dog的成员a的值设置为200dog.setB(400);// dog调用方法setB(int b)将dog的成员b的值设置为400cat.inputA();// cat调用inputA( ) cat.inputB();// cat调用inputB( ) dog.inputA();// dog调用inputA( ) dog.inputB();// dog调用inputB( ) }
}
运行结果:
注意:inputB( )不能对非静态字段 a 进行静态引用。
(四)package语句与import语句
tom.jiafei包内:
package tom.jiafei;
public class Triangle
{ double sideA,sideB,sideC;boolean boo;public Triangle(double a,double b,double c) {sideA=a;sideB=b;sideC=c; if(a+b>c&&a+c>b&&c+b>a){System.out.println("我是一个三角形");boo=true;} else{ System.out.println("我不是一个三角形");boo=false;}}public void 计算面积( ) { if(boo){double p=(sideA+sideB+sideC)/2.0;double area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;System.out.println("是一个三角形,能计算面积");System.out.println("面积是:"+area);}else{ System.out.println("不是一个三角形,不能计算面积");}}
public void 修改三边(double a, double b, double c){ sideA=a;sideB=b;sideC=c;if(a+b>c&&a+c>b&&c+b>a){ boo=true;} else{ boo=false;}}
}
其他包内调用:
import tom.jiafei.Triangle;
import java.util.Date;
class SunRise
{ public static void main(String args[ ]){ Triangle triangle=new Triangle(12,3,104);triangle.计算面积( );triangle.修改三边(3,4,5);triangle.计算面积( );Date date=new Date( );System.out.println(date);}
}
运行结果:
(五)接口的定义与使用
(1)定义和实现接口
interface Listener{
void action();
}
public class Test implements Listener{
public static void main(String a[]){
new Test();
}
}
编译程序指示什么错误,写出原因。
类型 Test 必须实现继承的抽象方法 Listener.action(),因为接口没有默认实现,如果不实现继承的抽象方法,则该类为抽象类,抽象类不能用来创建对象。
(2)在Test类中增加如下方法:
public void action(){
System.out.println("stand up ");}
public static void main(String a[]){
Test x=new Test();
x.action();
}
编译并执行程序,说说为什么要在action方法头增加public修饰?
因为不能降低自 Listener 继承的方法的可视性。如果为private,则不能被子类继承,子类便无法实现该方法。
(3)再增加一个类Test2实现Listener接口
class Test2 implements Listener {
public void action(){
System.out.println("sit down");}
}
并修改Test类的main方法:
public static void main(String a[]){
Listener x[]={new Test(),new Test2()};
x[0].action();
x[1].action();
}
调试程序,观察通过接口引用变量访问对象方法的动态多态行为,写出程序的输出。
程序输出:
stand up
sit down
(4)在方法参数中使用接口类型
给test类增加一个方法add,设计如下:
public void add(Listener a){
a.action();
}
main方法改动如下:
public static void main(String a[]){
Test x=new Test();
x.add(x);
x.add(new Test2());
}
观察输出结构,分析内在关系,写出程序的输出。
不同类类型的变量调用的是各自类中实现的方法,实现了多态。
程序输出:
stand up
sit down
完整Test代码:
interface Listener{
void action();
}
public class Test implements Listener{public void action(){ System.out.println("stand up ");}public void add(Listener a){a.action();}public static void main(String a[]){Test x=new Test();x.add(x);x.add(new Test2());
}
/** public static void main(String a[]){ Listener x[]={new Test(),new Test2()};* x[0].action(); x[1].action(); }*/
}
class Test2 implements Listener {public void action(){System.out.println("sit down");}
}
2、编写程序
- 定义一个接口,它含有两个抽象方法:第一个抽象方法用于实现在两个数中求最小的数;第二个抽象方法用于实现在三个数中求最大的数;
- 定义一个类实现这个接口;
- 再定义一个含有main()方法的主类,实现最小和最大的数的输出。
标准答案:
interface MaxAndMin {public abstract int Min(int a, int b);public abstract int Max(int x, int y, int z);
}class ABC implements MaxAndMin {public int Min(int a, int b) {if (a > b)return b;elsereturn a;}public int Max(int x, int y, int z) {int max = x;if (y > max)max = y;if (z > max)max = z;return max;}
}public class Tester {public static void main(String args[]) {ABC t = new ABC();System.out.println("最小值是" + t.Min(10, 20));System.out.println("最大值是" + t.Max(10, 30, 20));}
}
个人作业:
interface Listener2{int FindMin(int a,int b);int FindMax(int a,int b,int c);
}
public class MaxMin implements Listener2{public int FindMin(int a,int b){ if(a<b)return a;elsereturn b;}public int FindMax(int a,int b,int c){ int max=a;if(b>max)max=b;if(c>max)max=c;return max;}public static void main(String a[]){MaxMin x=new MaxMin();System.out.println("最大数为:"+x.FindMax(2,1,3));System.out.println("最小数为:"+x.FindMin(5,7));}
}
运行结果:
(六)选做题
1、参看UML图,编写类Shape和Triangle,实现类中的方法(斜体字是抽象方法),并自定义构造函数、get、set等方法。
标准答案:
abstract class Shape {public abstract double getArea();public String toString() {return "This is a Shape";}
}class Triangle extends Shape {private double side1, side2, side3;public Triangle(double s1, double s2, double s3) {side1 = s1;side2 = s2;side3 = s3;}public double getArea() {double s = (side1 + side2 + side3) / 2;return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));}public String toString() {return "This is a Triangle, sides are :" + side1 + "," + side2 + "," + side3;}
}class Circle extends Shape {private double radius;public Circle(double r) {radius = r;}public double getRadius() {return radius;}public double getArea() {return Math.PI * radius * radius;}public boolean equals(Object obj) {if (obj instanceof Circle)return this.radius == ((Circle) obj).getRadius();elsereturn false;}public String toString() {return "this is a Circle with radius " + radius;}
}
个人作业:
import java.util.Objects;
public abstract class Shape {public abstract double getArea();public abstract String toString();public static void main(String args[ ]){ Triangle triangle=new Triangle(3,5,4);Circle circle1=new Circle(2);Circle circle2=new Circle(3);System.out.println("三角形的面积:"+triangle.getArea());System.out.println(triangle.toString());System.out.println("圆1的面积:"+circle1.getArea()); System.out.println("圆2的面积:"+circle2.getArea()); System.out.println("半径是否相等: " + circle1.equals(circle2));System.out.println(circle1.toString());System.out.println(circle2.toString());}
}class Triangle extends Shape {private double side1,side2,side3;public Triangle(double a,double b,double c) {side1=a;side2=b;side3=c;}public double getArea() {double p=(side1+side2+side3)/2.0;return Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));}public void setSide(double side1,double side2,double side3) {this.side1 = side1;this.side2 = side2;this.side3 = side3;}public String toString() {return ("三角形的三边长分别为:"+side1+'、'+side2+'、'+side3+','+"面积为:"+getArea());}
}class Circle extends Shape {private double radius;public Circle(double r) {radius=r;}public double getArea() {return radius*radius*Math.PI;}public String toString() {return ("圆的半径为:"+radius+','+"面积为:"+getArea());}public boolean equals(Object obj) {if(this == obj) {return true;}if(obj instanceof Circle) {Circle c = (Circle)obj;return this.radius == c.radius;}return false;}public double getRadius() {return radius;}public void setRadius(double radius) {this.radius = radius;}
}
个人作业运行效果:
2、按照要求编写程序
- 定义一个StartStop接口,含有start()和stop()两个抽象方法;
- 分别创建“会议”和“汽车”两个类实现StartStop接口;
- 定义测试类,利用接口StartStop定义一个数组,创建一个“会议”对象和一个“汽车”对象赋值给数组,通过数组元素访问对象的start()和stop()方法。
标准答案:
interface StartStop {void Start();void Stop();
}class Conference implements StartStop {public void Start() {System.out.println("Start the conference!");}public void Stop() {System.out.println("Stop the conference!");}
}class car implements StartStop {public void Start() {System.out.println("Insert key in ignition and turn!");}public void Stop() {System.out.println("Turn key in ignition and remove!");}
}public class Interfacetest {public static void main(String[] args) {StartStop s[] = { new car(), new Conference() };for (int i = 0; i < s.length; i++) {s[i].Start();s[i].Stop();}}
}
个人作业:
interface StartStop {public void start();public void stop();
}
class Car implements StartStop {public void start(){System.out.println("车启动了");}public void stop(){System.out.println("车停止了");}
}
class Metting implements StartStop {public void start(){System.out.println("会议开始了");}public void stop(){System.out.println("会议停止了");}
}
public class CarAndMeeting {public static void main(String[] args) {StartStop ss[]={ new Metting(), new Car() };for(StartStop s: ss) {s.start();s.stop();}}
}
个人作业运行效果:
本次记录就到这,下次见。
2021-10-28 JAVA实验三学习总结相关推荐
- Spring Boot安装及使用(2021.10.28)
Spring Boot安装及使用 2021.10.28 1.Spring Boot 简介 1.1 为何选择Spring? 1.2 Spring的功能 1.3 Spring项目的依赖包管理工具(Mave ...
- 2021年,Java开发者值得学习的13项技能
本文分享自百度开发者中心2021年,Java开发者值得学习的13项技能 作者 | Olivia Cuthbert 译者 | 王强 策划 | 刘燕 如果你想在这个竞争激烈的世界里,成为一名熟练开发 Ja ...
- 【非广告】2021 入门级的 Java 程序员学习路线图 1.0
Hello,大家好,我是阿粉,最近看文章发现一个 Java 学习路线图的资料,觉得很不错就拿过来分享给大家,目前这个版本是 1.0 的,之所以说这个是 1.0 的版本主要是因为还有一些高级内容没有加进 ...
- java实验三_java实验三实验报告.docx
java实验三实验报告.docx 实验报告课程名称面向对象课程设计实验项目名称类的继承班级与班级代码13计算机科学与技术1班实验室名称(或课室)SS1205专业计算机科学与技术任课教师尹华学号1225 ...
- 云南大学软件学院java实验九_云南大学软件学院JAVA实验三
云南大学软件学院 实验报告 姓名:王增伟学号:20111120083 班级:软件工程日期:2014.10.2成绩: JAVA实验三 一.实验目的: 熟悉JAVA的控制流程,循环控制,数组结构,以及Bi ...
- java实验三正式报告
实验三 面向对象(二)(实验报告) 姓名: XXX 班级: XXX 学号: XXX 一.实验目的 在集成开发环境下,实现类的继承及多态,实现抽象类.接口的定义, ...
- Day19-22 2021/10/13-16 JAVA贪吃蛇 全注释版
Day19-22 2021/10/13-16 贪吃蛇 帧:如果时间足够小 就是动画 键盘监听 定时器 Timer package snale; import javax.swing.*; /*** @ ...
- java实验三_JAVA实验三及总结
JAVA第五周作业 Java实验报告三 第一题 1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码.结果截图.) (1).统计该字符 ...
- 2021 年,Java 开发者值得学习的 13 项技能
作者 | Olivia Cuthbert 译者 | 王强 策划 | 刘燕 如果你想在这个竞争激烈的世界里,成为一名熟练开发 Java 项目的开发人员,你应该学习很多东西才行.你需要掌握许多技能,具体应 ...
最新文章
- 重温ES6核心概念和基本用法
- phpinfo查看可以解析的后缀_配置nginx,Apache支持pathinfo模式-什么是phpinfo模式
- python七段数码管设计图案-python实现七段数码管和倒计时效果
- 8.2.1.10 Nested-Loop Join Algorithms 嵌套循环 关联算法:
- python程序设计基础电子版_Python 程序设计基础(董付国 著)完整版PDF[6MB]
- vst3插件_2B Played Music发布用于劲爆舞曲风格的极端失真和剪辑插件2B Clipped XT
- 黄梅理工学校计算机,黄梅理工学校2021年有哪些专业
- Python中利用plt显示中文标题解决方案
- XP下安装SQL2000企业版本(转载)
- 0间隔24h采集线报+源码的资源网
- (28)FPGA计数器设计(软核实现)
- Java使用iText生成word文件的完美解决方案(亲测可行)
- mysql utf8转gbk cmd_utf8转成gbk
- mysql数据库优化skip_优化配置mysql数据库优化
- JavaScript 中判断一个函数的 this 绑定
- javascript循环事件只响应最后一次的问题处理
- 如何打开oracle的回闪,oracle回闪操作
- 解决win10自动锁屏问题的一个方法
- C语言火车票管理系统
- 2021年第一天的祝福送给大家
热门文章
- 巴西矿坝溃坝事故现场 救援人员泥浆里寻找遇难者
- 综述|2021最新关于点云配准的全面介绍
- 管理员如何通过IT Policy禁用黑莓手机的电话功能(BES 4.1.7)
- 信息化2.0与计算机辅助教学,教育信息化2.0的里程碑意义
- 两php文件如何连接不上,PHP_PHP初学者常见问题集合 修正版(21问答),1,如何连接连两个字符串? - phpStudy...
- 【论文译文】StyleGAN2
- 中国太阳能充电控制器行业市场供需与战略研究报告
- 如何使用Gradle的copy命令
- 使用Oh my posh美化Windows终端(一)
- mysql程序员面试题_程序员面试备战篇:18个经典MySQL面试专题解析(干货分享答案)...