java第四章课后习题解答
- 格式:doc
- 大小:162.00 KB
- 文档页数:18
第一题public class Four01 {public static double sum(int a){double sum =1;for(int i=1; i<=a;i++){sum = sum*i;}return sum;}public static void main(String[]args){int a =4;double sum = 0;double k[]=new double[a];for(int i=1; i<=4; i++){k[i-1] = sum(i);}for(int j=0;j<k.length;j++){sum = sum+k[j];}System.out.println("总数为:"+sum);}}第二题public static void main(String[]args){int a[]={1,2,3,4,5,6,7,8,9,10,11};int o=0,e=0;for(int i=0 ;i<a.length; i++){if(a[i]%2==0){e++;}else{o++;}}System.out.println("奇数个数为:"+o+"\t"+"偶数个数为:"+e); }}第三题public class Four03 {public static void main(String[]args){int oldArr[]= {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};int newArr[]=new int[16];for(int i=0,j=0;i<oldArr.length; i++){if(oldArr[i]!=0){newArr[j]=oldArr[i];j++;}}for(int i=0; i<newArr.length; i++){//必须要写这个if语句,因为newArr多余的空间默认值为0if(newArr[i]!=0)System.out.print(newArr[i]+" ");}}}第四题public class Four04 {public static void main(String[]args){ int Array[] = {1,2,3,4,5,6,7,8,9,10,11};int m = max(Array);System.out.println("最大值为:"+m);int a = min(Array);System.out.println("最小值为:"+a);int s = sum(Array);System.out.println("总数为:"+s);}public static int max(int temp[]){int z = temp[0];for(int i=0; i<temp.length; i++){if(z<temp[i]){z=temp[i];}}return z;}public static int min(int temp[]){int z=temp[0];for(int i=0; i<temp.length; i++){if(z>temp[i]){z=temp[i];}}return z ;}public static int sum(int temp[]){int sum =0;for(int i=0; i<temp.length; i++){sum = sum +temp[i];}return sum ;}}第五题public class Four05 {public static void main(String[]args){ int Array[]= {1,2,3,4,5,6,7,8,9,10,11};int a =5;int b = 100;search(a,Array);search(b,Array);}public static void search(int c,int temp[]){ boolean flag = false;for(int i=0; i<temp.length; i++){if(c == temp[i]){flag = true;}}if(flag){System.out.println("YES,此数组中存在元素"+c);}else{System.out.println("NO,此数组中不存在元素"+c);}}}第六题public class Four06 {public static void main(String[]args){int temp[] = new int[10];init(temp);print(temp);reserve(temp);System.out.println();print(temp);}public static void init(int x[]){for(int i=0; i<x.length; i++){x[i] = i;}}public static void print(int x[]){for(int i=0; i<x.length; i++){System.out.println(x[i]+"、");}}public static void reserve(int x[]){int foot =0;int head = 0;if(x.length%2 == 0){foot = x.length/2;head = foot-1;for(int i=0; i<x.length/2; i++){int temp =x[foot];x[foot] = x[head];x[head] = temp;foot++;head--;}}else{foot = x.length/2;head = foot ;for(int i=0; i<x.length/2+1; i++){int temp = x[foot];x[foot] = x[head];x[head] = temp;head--;foot++;}}}}第七题public class Four07 {public static void main(String args[]){float score[] = {90f,87f,78f,67f,93f,79f,82f,84f,71f,86f};float max = score[0];for(int i=0; i<score.length; i++){if(max<score[i]){max = score[i];}}System.out.println("最高分为:"+max);}}第八题public class Four08 {public static void main(String[] args){int Array[]={1,2,1,3,4,6,5,4,3,2,0,9,8,7,6,5,4,3,5,6,7,8,9,0,9,8,2,1,3,4,};int n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0,n9=0,n0=0;for(int i=0; i<Array.length; i++){switch(Array[i]){case 1:{n1++;break;}case 2:{n2++;break;}case 3:{n3++;break;}case 4:{n4++;break;}case 5:{n5++;break;}case 6:{n6++;break;}case 7:{n7++;break;}case 8:{n8++;break;}case 9:{n9++;break;}case 0:{n0++;break;}}}System.out.println("0---->9的个数分别为:"+n0+"、"+n1+"、"+ n2+"、"+n3+"、"+n4+"、"+n5+"、"+n6+"、"+n7+"、"+n8+"、"+n9);}}第九题public class Four09 {public static void main(String[] args){int a[]= {1,2,3,4,5,6,7,8,9,0};int maxFoot =0;int max = a[0];for(int i=0; i<a.length; i++){if(max<a[i]){max=a[i];maxFoot=i;}}int val = a[0];a[0] = a[maxFoot];a[maxFoot] = val;System.out.println(a[0]);}}第十题public class Four10 {public static void main(String[] args){int temp[]= {1,2,3,4,5,6,7,8,9,10};java.util.Arrays.sort(temp);print(temp);temp = inc(temp,13,12,34,5,6,7);java.util.Arrays.sort(temp);print(temp);}public static void print(int a[]){for(int i=0; i<a.length; i++){System.out.print(a[i]+"、");}System.out.println();}public static int[] inc(int a[],int...val){int value[] = new int[a.length+val.length];System.arraycopy(a,0,value,0,a.length);System.arraycopy(val,0 , value, a.length, val.length);return value;}}。
《疯狂Java讲义(第4版)》-----第4章【习题解答】【练习1】九九乘法表public class Multiplication_table {public static void main(String[]args){for(int i=1;i<=9;i++){for(int j=1;j<=i;j++){System.out.print(i+"X"+j+"="+(i*j));if(j!=i) System.out.print(",");}System.out.println();}}}【练习2】打印由"*"⽣成的等腰三⾓形import java.util.Scanner;public class test {public static void main(String[] args){Scanner scan=new Scanner(System.in);int n=scan.nextInt();for(int i=1;i<=n;i++){for(int j=1;j<=n-i;j++) System.out.print(" ");for(int j=1;j<=2*i-1;j++) System.out.print("*");System.out.println();}}}【练习3】⽤“*”打印⼀个圆//本程序依据x^2+y^2=r^2这个圆公式进⾏画圆import java.util.Scanner;import ng.Math;public class test{public static void main(String[] args){Scanner scan=new Scanner(System.in);double r=scan.nextDouble();for(double x=-r;x<=r;x+=2){ //此处i+=2,可以控制好更像圆,如果i++像椭圆double y=Math.sqrt(Math.pow(r, 2)-Math.pow(x, 2));for(double i=-r;i<=r;i++){//对于x坐标,遍历⼀边-r到r所有值,如果和y坐标之差的绝对值在0.5的误差范围内,我们就认为此处i=y,应该⼤⾐呢出点System.out.print((Math.abs(y-i)<=0.5 || Math.abs(-y-i)<=0.5)?'*':' ');}System.out.println();}}}输⼊输出样例:【练习4】通过字节截取实现String的substring⽅法⽅案⼀看了⽹上的各类版本,都没有实现题⽬要求,下⾯代码可以实现题⽬要求,实现和String的substring完全⼀样的功能。
第4章面向对象(下)一、填空题1. 12.重写3. final4. instanceof5. Implements6.编译时异常7. RuntimeException8.逗号二、判断题1.对2.对3.错4.对5.错6.对7.对8.错9.对10.错三、选择题1. B2. D3. D4. D5. B6. D7. C8. B9. B10.D11.C四、简答题1.抽象类和接口有如下区别:1)抽象类可以有构造方法,接口中不能有构造方法。
2)抽象类中可以有普通成员变量,接口中没有普通成员变量。
3)抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4)抽象类中的抽象方法的访问类型可以是public, protected和(默认类型),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5)抽象类中可以包含静态方法,接口中不能包含静态方法。
6)抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认为public static final类型。
7) 一个类可以实现多个接口,但只能继承一个抽象类。
2.在类的继承中需要注意的问题:1).在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类;2).多个类可以继承一个父类;3).在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类;4).在Java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类。
五、编程题1.Employee.java139//定义一个测试类140 public class Test{141public static void main(String[] args){142//声明一个Employee类型的数组,并创立不同子类型的对象143Employee [ ] employee = {new SalariedEmployee (“张三”,1,6000), newHourlyEmployee (“李四”,2,50,180) , new SalesEmployee (“王五” ,3, 6500,0・15),new BasePlusSalesEmployee(, 4,5000,0.15,2000)}; 144//打印每个员工的工资145for (int i = 0; i < employee.length ;i + + )146System.out.printin(Math.round(employee[i].getSalary(10)));147)148)。
第一题: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.Java提供了哪些数据类型,全部写出来。
整型:byte,short,int,long数值型浮点型:float,double基本数据类型字符型:char数据类型布尔型:boolean类:class复合数据类型字符串:String接口:interface2.如何进行数据类型的转换?有2种方式:自动类型转换:运算时,不同类型的数据先转换成同一类型后再参与运算,转换的原则是位数少的类型转换成位数多的类型,由系统自动处理。
强制类型转换:当位数多的类型向位数少的类型进行转换时,需要用户明确说明要转换的类型,需要用户在程序中指明。
3.类的修饰符有哪些?有什么区别?类的修饰符包括访问控制修饰符、静态修饰符static、最终说明符final。
访问控制修饰符包括4种类型:privat、default、protected、public。
用static声明的成员变量被视为类的成员变量,而不能当成实例对象的成员变量,也就是说,静态变量是类固有的,可以被直接引用,而其它成员变量声明后,只有生成对象时才能被引用。
4.public的类和abstract的类有什么不一样?public的类是公共类,可以被继续,可以实例化,可以被其他包访问。
abstract的类是抽象类,其中一定含有抽象方法,abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。
5.什么是最终类?如何声明?最终类不能被继承,也没有子类。
final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
声明方法:final class ClassName。
二、操作题1.创建一个学生类Student,包括学号no、姓名name、年龄age、性别sex四个属性以及学习study、实践practice两个方法。
第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. 按要求完成以下题目(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接口。
习题四一、问答题1.子类可以有多个父类吗?答:Java不支持多重继承(子类只能有一个父类)2.如果子类和父类不在同一个包中,子类是否继承父类的友好成员?答:不能。
子类对父类可以访问同一个包中的父类的友好成员,不能访问其它包中父类的友好成员。
3.子类怎样隐藏继承的成员变量?答:子类中声明的成员变量和父类中成员变量同名时,子类就隐藏了继承的成员变量4.子类重写方法的规则是怎样的?重写方法的目的是什么?答:子类重写的方法的返回值类型,方法名,参数类型,顺序,个数都要与父类继承的方法相同,而且访问修饰符的限定范围大于等于父类方法。
目的是可以父类的状态和行为改变为自身的状态和行为,实现多态。
5.父类的final方法可以被子类重写吗?答:不可以6.什么类中可以有abstract方法?答:.abstract类。
abstract方法必须在abstract类中,而abstract类中可以没有abstract 方法7.一个类的各个子类是怎样体现多态的?答:通过重写方法二、选择题1.下列哪个叙述是正确的? CA.子类继承父类的构造方法。
B.abstract类的子类必须是非abstract类。
C.子类继承的方法只能操作子类继承和隐藏的成员变量。
D.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。
2.下列哪个叙述是正确的? DA.final 类可以有子类。
B.abstract类中只可以有abstract方法。
C.abstract类中可以有非abstract方法,但该方法不可以用final修饰。
D.不可以同时用final和abstract修饰同一个方法。
E.允许使用static修饰abstract方法。
3.下列程序中注释的哪两个代码(A,B,C,D)是错误的(无法通过编译)?CDclass Father {private int money =12;float height;int seeMoney(){116return money ; //A}}class Son extends Father {int height;int lookMoney() {int m = seeMoney(); //Breturn m;}}class E {public static void main(String args[]) {Son erzi = new Son();erzi.money = 300; //Cerzi.height = 1.78F; //D}}注:money是Father的私有变量,是无法继承的,不能够赋值。
第4章习题解答1.声明一个数组,保存一个学生的数学、语文、英语、物理、化学等课程的成绩,编写一个程序,计算5门课程的平均成绩,精确到0.1分,成绩值从键盘录入。
import java.util.Scanner;public class XT_1_score {public static void main(String[] args) {// TODO Auto-generated method stubdouble score[] = new double[5];System.out.println("请分别输入数学、语文、英语、物理、化学的成绩(数字之间用空格格开):");double sum = 0, average = 0;Scanner in = new Scanner(System.in);int i;for (i = 0; i < 5; i++)score[i] = in.nextDouble();for (i = 0; i < 5; i++)sum += score[i];average = sum / 5;System.out.println("平均成绩为:" + String.format("%.1f", average));}2.编程实现统计50名学生的百分制成绩中各分数段的学生人数,即:分别统计出100分、90-99分、80-89分、70-79分、60-69分、不及格的学生人数。
import java.util.Scanner;public class XT_2_score_sore {public static void main(String[] args) {// TODO Auto-generated method stubdouble score[] = new double[50];int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, i;System.out.println("请依次输入50名学生的成绩(用空格隔开):");Scanner br = new Scanner(System.in);for (i = 0; i < 50; i++)score[i] = br.nextDouble();for (i = 0; i < 50; i++) {if (score[i] == 100)a++;if (score[i] >= 90 && score[i] <= 99)b++;if (score[i] >= 80 && score[i] <= 89)c++;if (score[i] >= 70 && score[i] <= 79)d++;if (score[i] >= 60 && score[i] <= 69)e++;if (score[i] < 60)f++;}System.out.println("成绩为100分的个数:" + a);System.out.println("成绩为90-99分的个数:" + b);System.out.println("成绩为80-89分的个数:" + c);System.out.println("成绩为70-79分的个数:" + d);System.out.println("成绩为60-69分的个数:" + e);System.out.println("成绩为不及格的个数:" + f);}}3.编写一个程序,实现打印输出字符串数组中最大值和最小值。
解析java程序设计第四章课后答案第4章习题解答1.类的继承的主要好处是什么?Java中支持类的多继承形式吗?继承是一种由已有的类创建新类的机制。
利用继承,我们可以先创建一个拥有共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类自动拥有一般类的属性和行为,并根据需要可以增加新的属性和行为,或者改变父类的行为。
类的继承的主要好处是代码复用。
Java不支持类的多继承形式。
2.解释一下方法重载和方法覆盖的概念,并对两者加以对比。
如果子类中定义方法所用的名称、返回类型和参数表和父类中方法所使用的完全一样,但具体实现不同,则称子类方法覆盖了父类中的方法。
在同一类中,如果方法名称相同,但参数表不同,则称为方法重载。
3.编写一个学生和教师的数据输入和显示程序。
学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。
要求将编号、姓名输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的父类。
import java.util.*;class Person {private String name;private int id;public void input(){Scanner sc=new Scanner(System.in); name=sc.nextLine();id=sc.nextInt();}public void display(){System.out.println(\} }class Student extends Person { private int classNo;private int score;public void input(){super.input();Scanner sc=new Scanner(System.in); classNo=sc.nextInt();score=sc.nextInt();}public void display(){super.display();System.out.println(\}public static void main(String[] args){Student s=new Student();s.input();s.display();} } 4.创建Animal(动物):Mouse,Dog等的一个继承分级结构。
Java语言程序设计第四章课后习题答案1.子类将继承父类所有的属性和方法吗?为什么?答:不,子类不能直接访问从父类中继承的私有属性及方法,但可以对公有及保护方法进行访问。
2.方法的覆盖与方法的重载有何不同?答:覆盖是运用在子类中实现与父类相同的功能,但采用不同的算法或公式;在名字相同的方法中,要做比父类更多的事情;在子类中需要取消从父类继承的方法。
3.声明两个带有无参构造方法的两个类A和B,声明A的子类C,并且声明B为C的一个成员,不声明C 的构造方法。
编写测试代码,生成类C的实例对象,并观察结果。
明一个基类A,它只有一种非默认构造方法;声明A的子类B,B 具有默认方法及非默认方法,并在B的构造方法中调用基类A的构造方法。
明一个类,它具有一种方法,此方法被重载三次,派生一个新类,并增加一种新的重载方法,编写测试类验证四种方法对于派生类验证四种方法对于派生类都有效。
明一个具有final方法的类,声明一个派生类,并试图对这个方法进行重写,会有什么结果。
明一个final类,并试图声明其派生类,会有什么结果。
么是抽象类?抽象类中是否一定要包括抽象方法?答:抽象类是一个不完全的类,不能使用new方法进行实例化。
抽象类可以包含抽象方法,也可以不包含抽象方法,但有抽象方法的必须是抽象类。
和super分别有哪些特殊含义?都有哪些种用法?答:this 表示当前类;super 表示调用父类。
在定义类的时候用到,this是当前对象的引用,super是当前对象的父类对象的引用,一般的都是把super用在构造函数中。
10.完成下面父类及子类的声明:(1) 声明Student类属性包括学号、姓名、英语成绩、数学成绩、计算机成绩和总成绩。
方法包括构造方法、get方法、set方法、toString方法、equals方法、compare方法(比较两个学生的总成绩,结果分为大于、小于、等于),sum方法(计算总成绩)和testScore方法(计算评测成绩)。
第四章练习参考答案一、单项选择题1.对函数而言,下列叙述正确的是(D)。
A.一个程序中可以出现一个以上的主函数B.函数与主函数可以互相调用C.用户自定义的函数必须有形式参数D.调用函数和被调用函数可以不在同一个文件中2.在C++语言中,确定函数返回值的类型由(D)。
A.return语句中的表达式类型决定B.调用该函数的主函数类型决定C.调用该函数时系统状态决定D.定义函数时所指定的函数类型决定3.下列关于C++函数的叙述中,正确的是(C)。
A.每个函数至少要具有一个参数B.每个函数都必须返回一个值C.函数在被调用之前必须先声明D.函数不能自己调用自己4.函数调用语句calc(exp1,(exp2,exp3,exp4));中,含有的实参个数是(B)。
A.1B.2C.3D.45.调用函数时,若实参是一个数组名,则向函数对应的形参传送的是(B)。
A.数组元素的个数B.数组的首地址C.数组第一个元素的值D.数组中全部元素的值6.若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是(D)。
A.调用可以作为独立的语句存在B.调用可以作为一个函数的实参C.调用可以出现在表达式中D.调用可以作为一个函数的形参7.有以下函数定义:void fun( int n,double x){…}若以下选项中的变量都已正确定义并赋值,则对函数fun()的正确调用语句是(C)。
A.fun(int y,double m);B.k=fun(10,12.5);C.fun(x,n);D.void fun(n,x);8.在C++语言中,函数的形式参数是(A)。
A.局部变量B.全局变量C.静态变量D.外部变量9.如果要一个变量在整个程序运行期间都存在,但是仅在说明它的函数内可见,则这个变量的存储类型应该被说明为(A)。
A.静态变量B.自动变量C.外部变量D.寄存器变量10.设有函数原型void test (int a,int b=7,char c="");,下面的函数调用中,属于不合法调用的是(C)。
第4章图形用户界面设计【1】什么是图形用户界面?试列举出图形用户界面中你使用过的组件。
[解答]:图形用户界面或图形用户接口(Graphical User Interface,GUI)是指采用图形方式显示的计算机操作环境用户接口。
与早期计算机使用的命令行界面相比,图形界面对于用户来说更为简便易用。
(比如你用windowsXP和使用DOS操作系统的差别)。
GUI是事件驱动的,也就是说,一旦用户与GUI交互,GUI组件就会生成”事件“(动作)。
常见交互包括移动鼠标、单击鼠标按钮、在文字段输入、从菜单选择一个选项以及关闭一个窗口等等。
在windwosXP的GUI中,使用过窗口,菜单条,按钮等#【2】简述Java的事件处理机制。
什么是事件源?什么是监听者?在Java的图形用户界面中,谁可以充当事件源?谁可以充当监听者?[解答]:java的事件处理机制就是,事件源允许监听器注册的事件对象,在事件发生的时候想相关的注册对象发送一个,事件对象,监听器便根据相关的信息来选择运行相关的代码。
事件源:英文名为event source,是指事件发生的地方,也就是引起事件的组件,按钮Button,文本组件等都可以当做事件源。
比如说,你点击一个button,那么button就是事件源,要想使button对某些事件进行响应,你就需要注册特定的监听者。
(具体请看第5章的事件处理)监听者:英文名为event handler事件处理者,又叫监听器。
具体的对监听的事件类,当它监听到event object产生的时候,它就调用相应的方法,进行处理。
在java中,AWT组件和swing组件都可以当做事件源;java.awt.event.*,里面各种类都可以为监听者。
【3】动作事件的事件源可以有哪些?如何响应动作事件?[解答]:动作事件的事件源可以有:Button,JButton,MenuItem,等。
响应动作事件的过程一般为:声明和实例化事件源,如:Button btn=new Button(“确定”);注册监听:btn.addActionListener(this); //this指明是在当前类实现处理实现接口:public void actionPerformed(ActionEvent e){//具体代码};【4】说明文本框与标签之间的区别。
[解答]:文本框(TextField)和标签(Label)都可以进行文字表达。
TextField允许用户编辑单行文本的文本组件,他可以添加相应的监听事件;而Label 对象是一个可在容器中放置文本的组件。
一个标签只显示一行只读文本。
文本可由应用程序更改,但是用户不能直接对其进行编辑。
【5】编写程序包含一个标签、一个文本框和一个按钮,当用户单击按钮时,程序把文本框中的内容复制到标签中。
[解答]:Test4_5.javaimport java.awt.*;import java.awt.event.*;public class Test4_5 extends Frame implements ActionListener{Label lb;TextField txtFl;Button btn;public Test4_5(){//界面布局和初始化super("文本框和标签的练习");setSize(260,200);setVisible(true);setLayout(new FlowLayout());lb=newLabel(" ");//用空格占位,以防止label个别字符出现问题txtFl=new TextField(20);btn=new Button("显示字符");add(txtFl);add(btn);add(lb);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){System.exit(0);}} );validate();//增加监听btn.addActionListener(this);}public void actionPerformed(ActionEvent e){String strtmp=txtFl.getText();lb.setText(strtmp);lb.setForeground(Color.red);}public static void main(String[] args){new Test4_5();}}【6】设计一个加法计算器,如图4.25所示(课本P124),在文本框中输入两个整数,单击“=”按钮时,在第三个文本框中显示这两个数据的和。
[解答]:Test4_6.javaimport java.awt.*;import java.awt.event.*;class Test4_6 extends Frame implements ActionListener {TextField txtFl1,txtFl2,txtFl3;Button btn;public Test4_6(){super("简单加法运算器");setSize(300,200);setVisible(true);setLayout(new FlowLayout());txtFl1=new TextField(5);txtFl2=new TextField(5);txtFl3=new TextField(10);btn=new Button("=");add(new Label("请输入整数"));add(txtFl1);add(new Label("+"));add(txtFl2);add(btn);add(txtFl3);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){System.exit(0);}} );validate();btn.addActionListener(this);}public void actionPerformed(ActionEvent e){int add=Integer.parseInt(txtFl1.getText()) +Integer.valueOf(txtFl2.getText()).intValue();//两种字符串转整形的方法txtFl3.setText(String.valueOf(add));}public static void main(String[] args){new Test4_6();}}【7】说明文本框与文本区之间的区别,它们都可以引发什么事件?如何响应此事件?[解答]:TextField 对象是允许编辑单行文本的文本组件。
TextArea 对象是显示文本的多行区域。
可以将它设置为允许编辑或只读TextFiled和TextArea可以引用KeyEvent,ActionEvent,分别用使用组件的addKeyListener 方法注册和addActionListener以接收事件。
【8】设计一个计算器,其中要使用按钮、文本框、布局管理和标签等构件,能实现加、减、乘、除运算。
[解答]:Text4_8.javaimport java.awt.*;import java.awt.event.*;public class Test4_8 extends Frame implements ActionListener{TextField txtFl1,txtFl2,txtFl3;Button btn1,btn2,btn3,btn4,btn5;public Test4_8(){super("简单的四则运算器");setSize(300,400);setVisible(true);setLayout(new GridLayout(3,1));txtFl1=new TextField(5);txtFl2=new TextField(5);txtFl3=new TextField(5);btn1=new Button("+");btn2=new Button("-");btn3=new Button("*");btn4=new Button("÷");Panel p1=new Panel();p1.add(txtFl1);p1.add(txtFl2);p1.add(new Label("="));p1.add(txtFl3);Panel p2=new Panel();p2.add(btn1);p2.add(btn2);p2.add(btn3);p2.add(btn4);add(new Label("请在下面输入运算数并运算规则进行运算:"));add(p1);add(p2);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){System.exit(0);}} );validate();btn1.addActionListener(this);btn2.addActionListener(this);btn3.addActionListener(this);btn4.addActionListener(this);}public void actionPerformed(ActionEvent e){float num1=Float.valueOf(txtFl1.getText()).floatValue();float num2=Float.valueOf(txtFl2.getText()).floatValue();//两种字符串转整形的方法float rs=0;if (e.getSource()==btn1){rs=num1+num2;txtFl3.setText(String.valueOf(rs));}else if (e.getSource()==btn2) {rs=num1-num2;txtFl3.setText(String.valueOf(rs));}else if (e.getSource()==btn3) {rs=num1*num2;txtFl3.setText(String.valueOf(rs));}else if (e.getSource()==btn4) {rs=num1/num2;txtFl3.setText(String.valueOf(rs));}}public static void main(String[] args){new Test4_8();}}【9】创建一个窗体,窗体中有一个按钮,当单击按钮后,就会弹出一个新窗体。