您的当前位置:首页正文

java面向对象程序设计课后习题答案耿祥义张跃平主编清华大学出版社之欧阳引擎创编

2023-04-25 来源:步旅网
欧阳引擎创编 2021.01.01

习题解答

欧阳引擎(2021.01.01)

习题1

1.James Gosling 2.需3个步骤:

1) 用文本编辑器编写源文件。

2) 使用javac编译源文件,得到字节码文件。 3) 使用解释器运行程序。 3.由类构成。不是必须的。 4. path=D:\\jdk\\bin;

set classpath=D:\\jdk\\jre\\lib\\rt.jar;.; 5. B

6. Java源文件的扩展名是.java,Java字节码的扩展名是.class。 7.D。

8. A:Speak.java。

B:两个字节码文件,Speak.class和Xiti8.class。 C:java Xiti8。

D:执行java Speak的错误提示

Exception in thread \"main\"

java.lang.NoSuchMethodError: main

执行java xiti8得到的错误提示

Exception in thread \"main\"

java.lang.NoClassDefFoundError: xiti8 (wrong name: Xiti8)

执行java Xiti8.class得到的错误提示 Exception in thread \"main\"

java.lang.NoClassDefFoundError: Xiti8/class

执行java Xiti8得到的输出结果 I'm glad to meet you

(4)

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

9.属于操作题,解答略。 习题2

1. D

2.【代码1】 【代码2】 错误 //【代码3】更正为 float z=6.89F;

3.float型常量后面必须要有后缀“f”或“F”。

对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。

4.public class Xiti4{

public static void main (String args[ ]){ char ch1='你',ch2='我',ch3='他';

System.out.println(\"\\\"\"+ch1+\"\\\"的位置:\"+(int)ch1); System.out.println(\"\\\"\"+ch2+\"\\\"的位置:\"+(int)ch2); System.out.println(\"\\\"\"+ch3+\"\\\"的位置:\"+(int)ch3); } }

5.数组名字.length 6.数组名字.length 7. 【代码1】A,65

【代码2】-127

【代码3】 123456.783,123456.78312 8.

【代码1】false 【代码2】true 【代码3】false 【代码4】3 【代码5】4.4 【代码6】8.8 习题3

1. 输出

110

if-else语句书写的不够规范,复合语句缺少大括号“{}”,代码不够清晰。 2.你好好酷!!

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

3.

public class Xiti3_3 {

public static void main (String args[ ]){ int startPosition=0,endPosition=0; char cStart='а',cEnd='я';

startPosition=(int)cStart; //cStart做int型转换据运算,并将结果赋值给startPosition

endPosition=(int)cEnd ; //cEnd做int型转换运算,并将结果赋值给endPosition

System.out.println(\"俄文字母表:\");

for(int i=startPosition;i<=endPosition;i++){ char c='\\0';

c=(char)i; //i做char型转换运算,并将结果赋值给c System.out.print(\" \"+c); if((i-startPosition+1)%10==0) System.out.println(\"\"); } } } 4.

public class Xiti4

{ public static void main(String args[]) { double sum=0,a=1; int i=1;

while(i<=20) { sum=sum+a; i++;

a=a*i; }

System.out.println(\"sum=\"+sum); } } 5.

class Xiti5

{ public static void main(String args[]) { int i,j;

for(j=2;j<=100;j++) { for(i=2;i<=j/2;i++) { if(j%i==0) break; }

if(i>j/2)

{ System.out.print(\" \"+j); } } } } 6.

class Xiti6

{ public static void main(String args[]) { double sum=0,a=1,i=1; while(i<=20) { sum=sum+a; i++;

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

a=(1.0/i)*a; }

System.out.println(\"使用while循环计算的sum=\"+sum); for(sum=0,i=1,a=1;i<=20;i++) { a=a*(1.0/i);

sum=sum+a; }

System.out.println(\"使用for循环计算的sum=\"+sum); } }

7.

public class Xiti7

{ public static void main(String args[]) { int sum=0,i,j;

for(i=1;i<=1000;i++)

{ for(j=1,sum=0;jif(sum==i)

System.out.println(\"完数:\"+i); } } }

8.方法之一

import java.util.Scanner; public class Xiti8

{ public static void main (String args[ ]){

System.out.println(\"请输入两个非零正整数,每输入一个数回车确认\");

Scanner reader=new Scanner(System.in); int m=0,n=0,temp=0,gy=0,gb=0,a,b; a=m = reader.nextInt(); b=n = reader.nextInt(); if(mn=temp; }

int r=m%n; while(r!=0) { n=m; m=r;

r=m%n; }

gy=n;

gb=a*b/gy;

System.out.println(\"最大公约数 :\"+gy); System.out.println(\"最小公倍数 :\"+gb); } }

8.方法之二

import java.util.Scanner; public class Xiti8 {

public static void main (String args[ ]){

System.out.println(\"请输入两个非零正整数,每输入一个

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

数回车确认\");

Scanner reader=new Scanner(System.in); int m=0,n=0,t=0,gy=0,gb=0; m = reader.nextInt(); n = reader.nextInt(); if(m>n){ t=m;

m=n; n=t; }

for(int i=1;i<=m;i++){

if(m%i==0 && n%i==0){ gy=i; } }

gb=m*n/gy;

System.out.println(m+\的最大公约数为 \"+gy); System.out.println(m+\的最小公倍数为 \"+gb); } } 9.

public class Xiti9

{ public static void main(String args[]) { int n=1;

long sum=0,t=1; t=n*t;

while(true)

{ sum=sum+t; if(sum>9999) break; n++;

t=n*t; }

System.out.println(\"满足条件的最大整数:\"+(n-1)); }

}// 1至7的阶乘和是sum=5913.0 // 1至8的阶乘和是sum=46233.0 习题4

1.用该类创建对象时。

2.所谓方法重载是在一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。构造方法可以重载。 3. 可以。不可以。 4.不可以。

5.成员变量又分为实例变量和类变量,用static修饰的变量是类变量。那么类变量和实例变量有什么区别呢?一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间;如果类中的成员变量有类变量,

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量。 6.C,D

7.【代码1】,【代码4】 8.sum=-100 9.27 10.**20

##100 习题5

1. 如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法。继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包中,那么子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。

只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量。

子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同,子类如此定义的方法称作子类重写的方法。子类通过方法的重写可以隐藏继承的方法。 2.不可以。 3.abstract类。

4.假设B类是A类子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类的对象中时,称这个A类对象是子类对象的上转型对象。

5.可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。

6.A,C,D

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

7.15.0

8.0 8.98.0

12 9.

class A{ public final void f()

{ char cStart='a',cEnd='z';

for(char c=cStart;c<=cEnd;c++)

{ System.out.print(\" \"+c); } } } class B extends A

{ public void g()

for(char c=cStart;c<=cEnd;c++){ char cStart='α',cEnd='ω';

{ System.out.print(\" \"+c); } } } public class Xiti9

{ public static void main (String args[ ])

{ B b=new B(); b.f(); b.g(); } } 10.class A

{ public int f(int a,int b){

if(btemp=a; a=b; b=temp;

} int r=b%a;

while(r!=0) { b=a; a=r; r=b%a;

} return a;

} } class B extends A

{ public int f(int a,int b)

{ int division=super.f(a,b);

return (a*b)/division; } } public class Xiti10

{ public static void main (String args[ ])

{ A a=new A();

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

B b=new B();

System.out.println(\"最大公约数 :\"+a.f(36,24)); System.out.println(\"最小公倍数 :\"+b.f(36,24)); } } 习题6

1.仍然有效。 2.可以。 3.不可以。

4.大家好,祝工作顺利! 5. 96

乘数超过99 习题7

1.

(1)Strategy是接口。 (2)Army不是抽象类。

(3)Army和Strategy是关联关系。

(4)StrategyA, StrategyB、StrategyC与Strategy是实现关系。 2. Animal Simulator 3. AdvertisementBoard + playSound(Animal ): void + show(Advertisement adver): void +cry():void <> + getAnimalName():String + getCorpName():String Advertisement + showAdvertisement():void Dog Cat PhilipsCorp +cry():void + getAnimalName():String +cry():void LenovoCorp + getAnimalName():String 第5章的例子13的UML类图 + showAdvertisement():void + getCorpName():String + showAdvertisement():void + getCorpName():String 第5章的例子17的UML类图

4.例子13的设计符合开-闭原则。 5.例子17的设计符合开-闭原则。

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

习题8

1. 采用新增的策略为选手计算得分。

增加新的具体策略StrategyFour。StrategyFour类将double computeScore(double [] a)方法实现为去掉数组a的元素中的一个最大值和一个最小值,然后计算剩余元素的几何平均值。

import java.util.Arrays;

public class StrategyFour implements ComputableStrategy { public double computeScore(double [] a) { if(a.length<=2) return 0;

double score=0,multi=1; Arrays.sort(a); int n=a.length-2;

for(int i=1;iscore=Math.pow(multi,1.0/n); return score; } } 2.

(1)策略(Strategy)PrintCharacter.java public interface PrintCharacter{

public abstract void printTable(char [] a,char[] b); }

(2) 具体策略

PrintStrategyOne.java

public class PrintStrategyOne implements PrintCharacter { public void printTable(char [] a,char[] b) { for(int i=0;ifor(int i=0;iSystem.out.println(\"\"); } }

PrintStrategyTwo.java

public class PrintStrategyTwo implements PrintCharacter { public void printTable(char [] a,char[] b) { for(int i=0;iSystem.out.print(b[i]+\ } } }

(3)上下文 PrintGame.java public class PrintGame { PrintCharacter strategy;

public void setStrategy(PrintCharacter strategy) { this.strategy=strategy;

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

}

public void getPersonScore(char[] a,char[] b){ if(strategy==null)

System.out.println(\"sorry!\"); else

strategy.printTable(a,b); } }

应用以上策略:

public class Application {

public static void main(String args[]) { char [] a=new char[26]; char [] b=new char[26]; for(int i=0;i<=25;i++){ a[i]=(char)('a'+i); }

for(int i=0;i<=25;i++){ b[i]=(char)('A'+i); }

PrintGame game=new PrintGame(); //上下文对象

game.setStrategy(new PrintStrategyOne()); //上下文对象使用策略一

System.out.println(\"方案1:\"); game.getPersonScore(a,b);

game.setStrategy(new PrintStrategyTwo()); //上下文对象使用策略二

System.out.println(\"方案2:\");

game.getPersonScore(a,b); } }

3.参照本章8.3.3自主完成。 习题9

1.A,B,D 2. Love:Game 3.13

abc夏日 4.13579

5.9javaHello 6.

public class Xiti6 {

public static void main (String args[ ]) { String s1,s2,s3,t1=\"ABCDabcd\";

System.out.println(\"字符串原来是这个样子: \"+t1); s1=t1.toUpperCase();

System.out.println(\"字符串中的小写字母变成大写是这个样子: \"+s1);

s2=t1.toLowerCase();

System.out.println(\"字符串中的大写字母变成小写是这个样子: \"+s2);

s3=s1.concat(s2);

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

System.out.println(\"大写字符串连接小写字符串是这个样子: \"+s3); } }

7.

class Xiti7

{ public static void main(String args[ ]) { String s =\"中华人民共和国\"; char a=s.charAt(0); char b=s.charAt(6);

System.out.println(\"第一个字符: \"+a); System.out.println(\"最后一个字符: \"+b); } } 8.

import java.util.*; class Xiti8

{ public static void main(String args[]){ int year,month;

System.out.println(\"请输入年份和月份,每输入一个数回车确认\");

Scanner reader=new Scanner(System.in); year= reader.nextInt(); month= reader.nextInt();

String [] day=new String[42];

System.out.println(\" 日 一 二 三 四 五 六\"); Calendar rili=Calendar.getInstance();

rili.set(year,month-1,1);//将日历翻到year年month月1日,注意0表示一月...11表示十二月

int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1; int dayAmount=0;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) dayAmount=31;

if(month==4||month==6||month==9||month==11) dayAmount=30; if(month==2)

if(((year%4==0)&&(year%100!=0))||(year%400==0)) dayAmount=29; else

dayAmount=28;

for(int i=0;i<星期几;i++) day[i]=\"\";

for(int i=星期几,n=1;i<星期几+dayAmount;i++){ if(n<=9)

day[i]=String.valueOf(n)+\" \" ; else

day[i]=String.valueOf(n); n++; }

for(int i=星期几+dayAmount;i<42;i++) day[i]=\"\";

for(int i=0;i<星期几;i++) { day[i]=\"**\"; }

for(int i=0;i欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

{ if(i%7==0)

{ System.out.println(\"\"); }

System.out.print(\" \"+day[i]); } } }

9.

import java.util.*; class Xiti9

{ public static void main(String args[]){

int year1,month1,day1,year2,month2,day2; Scanner reader=new Scanner(System.in);

System.out.println(\"请输入第一个日期的年份 月份 日期 ,每输入一个数回车确认\"); year1= reader.nextInt(); month1= reader.nextInt(); day1= reader.nextInt();

System.out.println(\"请输入第二个日期的年份 月份 日期 ,每输入一个数回车确认\"); year2= reader.nextInt(); month2= reader.nextInt(); day2= reader.nextInt();

Calendar calendar=Calendar.getInstance(); calendar.set(year1,month1,day1);

long timeYear1=calendar.getTimeInMillis(); calendar.set(year2,month2,day2);

long timeYear2=calendar.getTimeInMillis(); long 相隔天数=Math.abs((timeYear1-timeYear2)/(1000*60*60*24));

System.out.println(\"\"+year1+\"年\"+month1+\"月\"+day1+\"日和\"+

year2+\"年\"+month2+\"月\"+day2+\"日相隔\"+相隔天数+\"天\"); } } 10.

public class Xiti10

{ public static void main(String args[]) { double a=0,b=0,c=0; a=12; b=24;

c=Math.max(a,b);

System.out.println(c); c=Math.min(a,b);

System.out.println(c); c=Math.pow(2,3);

System.out.println(c); c=Math.abs(-0.123); System.out.println(c); c=Math.asin(0.56); System.out.println(c); c=Math.cos(3.14);

System.out.println(c); c=Math.exp(1);

System.out.println(c); c=Math.log(8);

欧阳引擎创编 2021.01.01

欧阳引擎创编 2021.01.01

System.out.println(c); } } 习题10

欧阳引擎创编 2021.01.01

因篇幅问题不能全部显示,请点此查看更多更全内容