Java基础第4章编程题答案
- 格式:docx
- 大小:149.97 KB
- 文档页数:15
《Java基础入门》课后习题答案第4章面向对象(下)一、填空题1、一个类如果实现一个接口,那么它就需要实现接口中定义的全部方法,否则该类就必须定义成抽象类。
2、一个类可以从其他的类派生出来。
派生出来的类称为子类、用于派生的类称为父类或者基类。
3、定义一个Java 类时。
如果前面加使用final 关键词修饰,那么该类不可以被继承。
4、在Java语言中,所有的类都直接或间接继承自Object 类5、一个Lambda 表达式由三个部分组成,分别为参数列表、“->”、表达式主体二、判断题1、错2、对3、错4、对5、错1.抽象方法必须定义在抽象类中,所以抽象类中的方法都是抽象方法。
(×)2. Java 中被final 关键字修饰的变量,不能被重新赋值。
(√)3.不存在继承关系的情况下,也可以实现方法重写。
(×)4.函数式接口在Java中是指有且仅有一个抽象方法的接口。
(√)5.接口中只能定义常量和抽象方法。
(×)三、选择题1、B2、ABC3、C4、C5、A1.在类的继承关系中,需要遵循以下哪个继承原则?(B)A.多重B.单一C.双重D.不能继承2.关于super关键字以下说法哪些是正确的?(多选)(ABC)A. super 关键字可以调用父类的构造方法B.super 关键字可以调用父类的普通方法C. super 与this 不能同时存在于同一个构造方法中D. super 与this 可以同时存在于同一个构造方法中3.类中的一个成员方法被下面哪个修饰符修饰,该方法只能在本类被访问?(C)A. publicB. protectedC. privateD. default4.在Java中,要想让一个类继承另一个类,可以使用以下哪个关键字?(C)A. inheritsB. implementsC.extendsD. modifies5.已知类的继承关系如下:class Employee;class Manager extends Employeer class Director extends Employee;则以下语句能通过编译的有哪些?(A)A.Employee e=new Manager();B. Direetor d=new Manager();B.C. Director d=new Employee(); D. Manager menew Director();四、简答题1.简述什么是方法重写2.简述什么是多态。
Java程序设计各章习题及其答案第一章习题及思考题1、Java程序是由什么组成的?一个程序中必须有public类吗?Java源文件的命名规则是怎样的?答:一个Java源程序是由若干个类组成。
一个Java程序不一定需要有public类:如果源文件中有多个类时,则只能有一个类是public 类;如果源文件中只有一个类,则不将该类写成public也将默认它为主类。
源文件命名时要求源文件主名应与主类(即用public修饰的类)的类名相同,扩展名为.java。
如果没有定义public类,则可以任何一个类名为主文件名,当然这是不主张的,因为它将无法进行被继承使用。
另外,对Applet小应用程序来说,其主类必须为public,否则虽然在一些编译编译平台下可以通过(在BlueJ下无法通过)但运行时无法显示结果。
2、怎样区分应用程序和小应用程序?应用程序的主类和小应用程序的主类必须用public修饰吗?答:Java Application是完整的程序,需要独立的解释器来解释运行;而Java Applet则是嵌在HTML编写的Web页面中的非独立运行程序,由Web浏览器内部包含的Java解释器来解释运行。
在源程序代码中两者的主要区别是:任何一个Java Application 应用程序必须有且只有一个main方法,它是整个程序的入口方法;任何一个Applet小应用程序要求程序中有且必须有一个类是系统类Applet的子类,即该类头部分以extends Applet结尾。
应用程序的主类当源文件中只有一个类时不必用public修饰,但当有多于一个类时则主类必须用public修饰。
小应用程序的主类在任何时候都需要用public来修饰。
3、开发与运行Java程序需要经过哪些主要步骤和过程?答:主要有三个步骤(1)、用文字编辑器notepad(或在Jcreator,Gel, BuleJ,Eclipse, Jbuilder等)编写源文件;(2)、使用Java编译器(如Javac.exe)将.java源文件编译成字节码文件.class;(3)、运行Java程序:对应用程序应通过Java解释器(如java.exe)来运行,而对小应用程序应通过支持Java标准的浏览器(如Microsoft Explorer)来解释运行。
第一题:FloatToInt.javaimport javax.swing.JFrame;import javax.swing.JOptionPane;public class FloatToInt extends JFrame{/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub//输出消息提示框String str = JOptionPane.showInputDialog("请输入一个成绩:");//先将输入的浮点数(是String类型)转化成float类型float f = Float.parseFloat(str);//将浮点数强制转换成int型int score = (int) f;//创建一个FloatToInt对象,以便于调用makeWarning(String warning)方法FloatToInt a = new FloatToInt();//调用makeWarning(String warning)方法a.makeWarning("整数部分是:"+score);}//定义消息对话框makeWarning(String warning)方法public void makeWarning(String warning){JOptionPane.showMessageDialog(this, warning, "输出一个浮点数的整数部分", JOptionPane.PLAIN_MESSAGE);}}第二题Score.javaimport javax.swing.JFrame;import javax.swing.JOptionPane;public class Score extends JFrame{public static void main(String[] args){//输出消息提示框String str = JOptionPane.showInputDialog("请输入一个成绩:");//先将输入的浮点数(是String类型)转化成float类型float f = Float.parseFloat(str);//创建Score对象,以便于调用makeWarning(String warning)方法Score s = new Score();//如果大于60,及格if(f>=60){//调用Score对象的makeWarning(String warning)方法s.makeWarning("及格");}else{//不及格//调用Score对象的makeWarning(String warning)方法s.makeWarning("不及格");}}//定义消息对话框makeWarning(String warning)方法public void makeWarning(String warning){JOptionPane.showMessageDialog(this, warning, "判断是否及格", JOptionPane.WARNING_MESSAGE);}}第三题Rectangle.javapackage homework;//创建一个Rectangle类public class Rectangle {//定义成员变量:包括length和width属性float length=1f; //定义length属性,默认值为1float witdh=1f; //定义width属性,默认值为1//定义获取length属性的方法public float getLength() {return length;}//定义设置length属性的方法public void setLength(float length) {//判断矩形的长度是否大于20.0if(length>20.0f){System.out.println("该矩形的长大于20.0!");}else{System.out.println("该矩形的长小于20.0!");}this.length = length;}//定义获取width属性的方法public float getWitdh() {return witdh;}//定义设置width属性的方法public void setWitdh(float witdh) {//判断矩形的宽度是否大于20.0if(witdh>20.0f){System.out.println("该矩形的宽大于20.0!");}else{System.out.println("该矩形的宽小于20.0!");}this.witdh = witdh;}/*//定义构造方法,设置属性的默认值Rectangle(int length,int width){length =1;width =1;}*///定义计算矩形周长的方法perimeterpublic float perimeter(float length,float width){//定义一个表示周长的int型变量perimeterfloat perimeter;perimeter = (length+width)*2;return perimeter;}//定义计算矩形面积的方法areapublic float area(float length,float width){//定义一个表示面积的int型变量areafloat area;area = length*width;return area;}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub//创建一个Rectangle类的对象Rectangle r = new Rectangle();//调用计算矩形周长的perimeter方法(先获取对象r默认的属性值r.getLength(), r.getWitdh())float p = r.perimeter(r.getLength(), r.getWitdh());//调用计算矩形面积的area方法(先获取对象r默认的属性值r.getLength(), r.getWitdh())float area = r.area(r.getLength(), r.getWitdh());//打印输出该矩形的周长和面积System.out.println("该矩形的周长为:"+p+"\n 面积为:"+area);r.setLength(30.6f);r.setWitdh(13.5f);// 调用计算矩形周长的perimeter方法(先获取对象r默认的属性值r.getLength(), r.getWitdh())float p1 = r.perimeter(r.getLength(), r.getWitdh());// 调用计算矩形面积的area方法(先获取对象r默认的属性值r.getLength(), r.getWitdh())float area1 = r.area(r.getLength(), r.getWitdh());//打印输出该矩形的周长和面积System.out.println("该矩形的周长为:"+p1+"\n 面积为:"+area1);}}。
第4章1.假定乘坐飞机时,每位顾客可以免费托运20kg以内的行李,超过部分按每公斤收费1.2元,以下是相应的计算收费程序。
该程序存在错误,请找出。
public class Test{public static void main(String[] args) throws IOException{float w,fee;//以下代码为通过控制台交互输入行李重量InputStreamReader reader=new InputStreamReader(System.in);BufferedReader input=new BufferedReader(reader);System.out.println("请输入旅客的行李重量:");String temp=input.readLine();w = Float.parseFloat(temp); //字符串转换为单精度浮点型fee = 0;if ( w > 20);fee = (float)1.2 * (w-20);System.out.println("该旅客需交纳的托运费用:"+fee+"元");}}缺少import java.io.*; 语句2.有一条长的阶梯,如果每步2阶,则最后剩1阶,每步3阶则剩2阶,每步5阶则剩4阶,每步6阶则剩5阶,只有每步7阶的最后才刚好走完,一阶不剩,问这条阶梯最少共有多少阶?找出以下求解程序的错误所在。
public class Test{ public static void main(String[] args){int i;while(i%2==1&&i%3==2&&i%5==4&&i%6==5&&i%7==0) {i++;}System.out.println("这条阶梯最少有:"+i+"阶");}}1)变量i应进行初始化。
Java第四章课后习题解答:1.//filename: App4_1.javaimport java.io.*;public class App4_1{public static void main(String[] args)throws IOException{ float score;String str;BufferedReader buf=new BufferedReader(new InputStreamReader (System.in));System.out.println("请你输入一个成绩: ");str=buf.readLine();score=Float.parseFloat(str);int grade=(int)score/10;switch(grade){case 10:case 9: System.out.println(" 优");break;case 8: System.out.println(" 良");break;case 7: System.out.println(" 中");break;case 6: System.out.println(" 及格");break;default: System.out.println(" 不及格");}}}2.//filename: App4_2.javaimport java.io.*;public class App4_2{public static void main(String[] args){int score;int grade;char result;Scanner b = new Scanner(System.in);score = b.nextInt();grade = score / 10;switch(grade)case 10:case 9:case 8: result = 'A';break;case 7: result = 'B';break;case 6: result = 'C';break;default: result = 'D';break;}System.out.println(result);}}3.//filename: App4_3.javapublic class App4_3{public static void main(String[] args) {int i;for( i=1;i<=100;i++){if(i%3==0 && i%7==0)System.out.println("i="+i);}}}4.//filename: App4_4.javapublic class App4_4{public static void main(String[] args) {int i,n;int s=0;for(i=1,i<=n,i++)n=i*n;s=s+n;System.out.println("s="+s);}}//filename: App4_5.javaimport java.util.*;public class App4_5{public static void main(String arg[]){Scanner insert=new Scanner(System.in);int n;System.out.print("请输入一个数字n:");n = insert.nextInt();double b=1;double e=1;double f=1;double g= (-1);double sum=0;for (int i=1; i <= n ; i++ ){e=e*i;b=( 1 / e );g = g*(-1);f=b*g;sum=sum+f;}System.out.println("sum=1!-(1/2!)+(1/3!)-(1/4!)+......-((-1)^(n-1))*(1/n!)="+sum); }}6.//filename: App4_6.javapublic class App4_6{public static void main(String[] args){for(int i=100; i<1000; i++){int gw = i%10;int sw = i/10%10;int bw = i/100;int gl=g*g*g;int sl=s*s*s;int bl=b*b*b;int s = gl+sl+bl;boolean eq = s==i;if(eq)System.out.println(i+"="+bw+"^3+"+sw+"^3+"+gw+"^3"); }}}}7.//filename: App4_7.javaimport java.util.*;public class App4_7{public static void main(String[] args){int x,s=0;System.out.print("请输入你需要的整数:");Scanner scan=new Scanner(System.in);x=scan.nextInt();for(int i=1;i<x;i++){if(x%i==0){s=s+i;}els{continue;}}if(s==x){System.out.println(x+"是完全数");}else{System.out.println(x+"不是完全数");}}}8.//filename: App4_8.javaimport java.util.*;public class App4_8{public static void main(String[] args){String n;int d,x;int m,end=0,sum=0;System.out.print("请输入一个数:");Scanner scan=new Scanner(System.in);n=scan.nextLine();d=n.length();x=Integer.parseInt(n);for (int i=1; i<=d;i++ ){m=x%10;x=x/10;end=end+m;}System.out.println(end);}}9.//filename: App4_9.javaimport java.util.*; public class App4_9 {public static void main(String arg[]){Scanner insert=new Scanner(System.in);float i;int j;float k;System.out.print("输入一个浮点型数字:");i = insert.nextFloat();j = (int)i;k = i-j;System.out.println("输入的数字的整数部分:"+j);System.out.println("输入的数字的小数部分:"+k);}}10.//filename: App4_10.javapublic class App4_10{public static void main(String arg[]){double x=3000;int y=0;while (x >= 5 ){x *= 0.5;y += 1;}System.out.println("需要"+y+"天,绳子的长度会短于米"); }}11.//filename: App4_11.javapublic class App4_11{public static void main(String arg[]){int q;int h = 1;for (int i= -1 ; i <= 4 ; i++ ){h = h + i;q = h;System.out.println();for (int j=i+2 ; j <= 5 ; j++ ){System.out.print((q=q+j)+"\t");}}}}。
1.分别编写两个方法,一个方法的功能是求一个double型数值的向右取整,另一个方法求double型数值的向左取整。
数d的向右取整是大于等于d的最小整数,d的向左取整是小于等于d的最大整数。
例如:5.3的向右取整是6而向左取整是5.答:public class One{static int right(double x){if(x!=5)x=x+1;return (int)x;}static int left(double x){return (int)x;}public static void main(String args[]){System.out.println("5.3向左取整为:"+left(5.3));System.out.println("5.3向右取整为:"+right(5.3));}}程序运行结果为:2.写一个方法计算一个整数各位数字的和。
使用下述的方法说明:public static int sumDigits(long n)例如:sumDigits(276)返回2+7+6=15 。
提示:用求余运算符%分解数字,用除号/分离位数。
例如334%10=4而334/10=33.用循环反复分解和分离每位数字,直到所有的位数都被分解。
答:public class Two{public static int sumDigits(long n){long sum=0,t;while(n!=0)47{t=n%10;n=n/10;sum+=t;}return (int)sum;}public static void main(String args[]){System.out.println("334各个位数字之和为:"+sumDigits(334));}}程序运行结果为:3. 编写程序,用Math类中的sqrt方法打印下表:Number SquareRoot ....................................0 0.00002 1.41424 2.00006 2.44958 2.828410 3.162312 3.464114 3.741716 4.000018 4.242620 4.4721答:public class Three{public static void main(String args[]){System.out.println("Number SquareRoot");System.out.println("..................");for(int i=0;i<=20;)4748{System.out.printf("%d\t%.4f\n",i,Math.sqrt(i));i=i+2;}}}程序运行结果为:4. 请定义一个名为Rectangle的矩形类。
第4章作业参考答案
1.填空题
(1)super
(2)extends
(3)Object 类
(4)puclic protected private
(5)final
2.选择题
3 .简答题
(1)回答要点
继承是面向对象最显著的一个特性。
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
(2)回答要点
多态表达为父类引用变量可以指向子类对象。
前提条件:存在子父类关系。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
(3)回答要点方法重载和重写都是实现多态的方式,区别在于重载是编译时多态,重写是运行时多态。
•重载是在同一个类中,两个方法的方法名相同,参数列表不同(参数类型、顺序、个数),与方法返回值无关,所以不能根据返回值类型区分是否是重载,因为重载是编译时多态,调用时不能指定类型信息,所以编译器不知道要调用的是哪个方法。
•重写发生在父类和子类之间,子类继承父类方法(非构造、final、static修饰的方法)并重写父类方法。
4 .编程题
(1)源代码:参考本章资料文件夹下“作业1”。
(2)源代码:参考本章资料文件夹下“作业2”。
(3)源代码:参考本章资料文件夹下“作业3”。
第四章编程题1. 按要求完成以下题目(1)Circle( ) // 将半径设为0Circle(double r ) // 创建 Circle 对象时将半径初始化为r③三个成员方法double getArea( ) //获取圆的面积double getPerimeter( ) // 获取圆的周长void show( ) //将圆的半径、周长、面积输出到屏幕(2)编写一个圆柱体类Cylinder ,它继承于上面的Circle 类。
还拥有:①一个成员变量double hight(私有,浮点型);// 圆柱体的高;②构造方法Cylinder (double r, double h )//创建Circle对象时将半径初始化为r③成员方法double getVolume( ) // 获取圆柱体的体积void showVolume( ) // 将圆柱体的体积输出到屏幕编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。
【参考答案】import java.math.*;class Circle{private double radius;public Circle() {radius=0;}public Circle(double r) {radius=r;}void setRadius(double r) {this.radius=r;}double getRadius(){return this.radius;}double getArea() {return Math.PI*radius*radius;}double getPerimeter() {return Math.PI*2*radius;}void show() {System.out.println("圆的半径为"+radius+"\n圆的周长为"+this.getPerimeter()+"\n圆的面积为"+this.getArea());}}class Cylinder extends Circle{double hight;public Cylinder(double r,double h) {super.setRadius(r);this.hight=h;}double getVolume(){double volume=super.getArea()*hight;return volume;}void showVolume() {System.out.println("圆柱的面积为"+this.getVolume());}}public class Example01 {public static void main(String[] args) {Circle circle=new Circle(5);circle.show();Cylinder cylinder=new Cylinder(2,5);cylinder.showVolume();}}2.按要求编写一个Java应用程序:(l)定义一个接口CanCry,描述会吼叫的方法public void cry()(2)分别定义狗类(Dog)和猫类(Cat),实现CanCry接口。
实现方法的功能分别为:打印输出“我是狗,我的叫声是汪汪汪”、“我是猫,我的叫声是喵喵喵”。
(3)定义一个主类G,①定义一个void makeCry(CanCry c)方法,其中让会吼叫的事物吼叫。
②在main方法中创建狗类对象(dog)、猫类对象(cat)、G类对象(g),用g 调用makeCry方法,让狗和猫吼叫。
【参考答案】interface CanCry{public void cry();}class Dog implements CanCry{public void cry(){System.out.println("我是狗,我的叫声是汪汪汪");}}class Cat implements CanCry{public void cry(){System.out.println("我是猫,我的叫声是喵喵喵");}}public class G{void makeCry(CanCry c) {c.cry();}public static void main(String[] args) {Dog dog=new Dog();Cat cat=new Cat();G g1=new G();g1.makeCry(dog);g1.makeCry(cat);}}3.编写一个Java程序,并满足如下要求:(1)编写一个Car类,具有:属性:品牌(mark)一一String类型功能:驾驶(void drive())(2)定义Car类的子类SubCar,具有:属性:价格(price)、速度(speed)一一int型功能:变速(void speedChange(int newSpeed),把新速度赋给speed(3)定义主类E,在其main方法中创建SubCar类的两个对象:aodi和benchi 的对象并测试其对象的特性:(4)输出效果如下:【参考答案】class Car{String make;void drive() {System.out.println("本车正在驾驶");}}class SubCar extends Car{int price;int speed;void speedChange(int newSpeed) {this.speed=newSpeed;}}public class Chap403 {public static void main(String[] args) {SubCar aodi=new SubCar();SubCar benchi=new SubCar();aodi.make="奥迪";aodi.price=50;aodi.speed=80;System.out.println("本车的品牌是"+aodi.make);System.out.println("奥迪车的价格是"+aodi.price);System.out.println("奥迪车原来的速度是"+aodi.speed);aodi.drive();aodi.speedChange(120);System.out.println("奥迪车现在的速度是"+aodi.speed);benchi.make="奔驰";benchi.price=100;benchi.speed=90;System.out.println("本车的品牌是"+benchi.make);System.out.println("奔驰车的价格是"+benchi.price);System.out.println("奔驰车原来的速度是"+benchi.speed);benchi.drive();benchi.speedChange(120);System.out.println("奔驰车现在的速度是"+benchi.speed);}}4. 编写程序,提供实现各种数学计算的方法,并进行测试。
包括如下几项。
(1)两个数的加、减、乘、除。
(2)求某数的相反数、倒数、绝对值。
(3)取两数中较大的和较小的。
(4)对浮点数(double型)的计算功能。
如:给定浮点数d,取大于或等于d 的最小整数,取小于或等于d的最大整数,计算最接近d的整数值,计算d的平方根、自然对数log(d)等。
(5)计算以double型数a为底数,b为指数的幂。
【参考答案】import java.math.*;import java.util.Scanner;import ng.Exception;class DivideByException extends Exception{public DivideByException() {super();}public DivideByException(String message) {super(message);}}class MyMath{int add(int x,int y) {return x+y;}int sub(int x,int y) {return x-y;}int mul(int x,int y) {return x*y;}int divide(int x,int y){try {return x/y;}catch(Exception e) {System.out.println("除数不能为零");return -1;}}int opposite(int x) {return -x;}double reciprocal(int x)throws DivideByException { if(x==0)throw new DivideByException("0的倒数为无穷大");// throw new DivideByException();return (double)1/x;}int myabs(int x) {return Math.abs(x);}int max(int x,int y) {if(x>=y)return x;elsereturn y;}int min(int x,int y) {if(x<=y)return x;elsereturn y;}double mySqrt(double x) {double d,minx,maxx,sqrtd,logd;minx=(Math.ceil(x));maxx=(Math.floor(x));if(Math.abs(minx-x)>=Math.abs(maxx-x))d=maxx;elsed=minx;System.out.println(d);sqrtd=Math.sqrt(d);logd=Math.log(d);System.out.println("平方根为"+sqrtd);return logd;}double myPower(double a,double b) {return Math.pow(a, b);}}public class Chap404 {public static void main(String[] args) {int num,x,y;double a,b;MyMath mymath=new MyMath();Scanner scanner=new Scanner(System.in);System.out.println("1--两个整数加、减、乘、除");System.out.println("2--整数相反数,倒数和绝对值");System.out.println("3--两个整数较大值,较小值");System.out.println("4--浮点数取整的平方根何自然对数");System.out.println("5--指数幂");System.out.println("请输入您要进行的操作");num=scanner.nextInt();switch(num) {case 1:System.out.println("请输入用于计算的两个数");x=scanner.nextInt();y=scanner.nextInt();System.out.println(x+"+"+y+"="+mymath.add(x, y));System.out.println(mymath.sub(x, y));System.out.println(mymath.mul(x, y));System.out.println(mymath.divide(x, y));break;case 2:System.out.println("请输入数");x=scanner.nextInt();System.out.println("相反数是"+mymath.opposite(x));try{System.out.println("倒数是"+mymath.reciprocal(x));}catch(DivideByException e) {System.out.println(e.getMessage());}System.out.println("绝对值是"+mymath.myabs(x));break;case 3:System.out.println("请输入用于计算的两个数");x=scanner.nextInt();y=scanner.nextInt();System.out.println("较大值是"+mymath.max(x, y));System.out.println("较小值是"+mymath.min(x, y));break;case 4:System.out.println("请输入浮点数");a=scanner.nextDouble();System.out.println("自然对数为"+mymath.mySqrt(a));break;case 5:System.out.println("请输入底数和幂");a=scanner.nextDouble();b=scanner.nextDouble();System.out.println("结果="+mymath.myPower(a, b));break;}}}5. 编写一个抽象类Shape,声明计算图形面积的抽象方法。