java2实用教程课后习题问题详解第三版编程题.docx
《java2实用教程课后习题问题详解第三版编程题.docx》由会员分享,可在线阅读,更多相关《java2实用教程课后习题问题详解第三版编程题.docx(64页珍藏版)》请在冰豆网上搜索。
java2实用教程课后习题问题详解第三版编程题
3.编写应用程序,求1!
+2!
+…+10!
。
答:
classFact
{
publicstaticvoidmain(Stringargs[])
intfact,sum=0;
for(inti=1;i<=10;i++)
fact=1;
for(intj=1;j<=i;j++)
fact*=j;
sum+=fact;
}
System.out.println("1到10的阶乘之和是:
"+sum);
4.编写一个应用程序,求100以的全部素数。
classPrimes
{publicstaticvoidmain(Stringargs[])
{intw=1;
for(inti=2;i<=100;i++)
{for(intj=2;j
{w=i%j;
if(w==0)
break;
if(w!
=0)
System.out.println(i+"是素数");
5.分别用do―while和for循环计算1+1/2!
+1/3!
+1/4!
+…的前20项和。
①for循环
classSum
intfact;
doublesum=0;
for(inti=1;i<=20;i++)
sum+=1.0/fact;
System.out.println(sum);
②do―while循环
inti=1;
do
intj=0;
while(++j<=i)
while(++i<=20);
6.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
编写应用程序,求1000之的所有完数。
classWanshu
intx,i,sum;
for(x=1;x<=1000;x++)
sum=0;
for(i=1;i{if(x%i==0)sum+=i;}if(x==sum)System.out.println(x+"是完数");}}} 7.编写应用程序,分别使用while和for循环计算8+88+888+…前10项之和。答:①for循环classTheSum{publicstaticvoidmain(Stringargs[]){longsum=0,data=8;for(inti=1;i<=10;i++){sum=sum+data;data=data*10+8;}System.out.println(sum);}}②while循环classTheSum{publicstaticvoidmain(Stringargs[]){longsum=0,data=8,i=0;while(++i<=10){sum=sum+data;data=data*10+8;}System.out.println(sum);}}8.编写应用程序,输出满足1+2+3+…+n<8888的最大正整数n。答:classMaxn{publicstaticvoidmain(Stringargs[]){intk=1,sum=0;while((sum+=k)<8888)k++;k--;System.out.println("最大能取到:"+k);}15.模仿例子4.27,编写一个类实现两个接口的程序。答:②interface表面积{doubleallArea(doubler);}interface体积{doublevolu(doubler);}classSphimplements表面积,体积{doublePI=3.14159;publicdoubleallArea(doubler){return4*PI*r*r;}publicdoublevolu(doubler){return4.0/3*PI*r*r*r;}}publicclassTest{publicstaticvoidmain(Stringargs[]){doubler=5.0;Spha=newSph();System.out.println("半径为5的球的表面积是:"+a.allArea(r));System.out.println("半径为5的球的体积是:"+a.volu(r));}} 16.编写一个类A,该类创建的对象可以调用方法f输出英文字母表,然后再编写一个该类的子类B,要求子类B必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字母表,而且调用子类新增的方法g输出希腊字母表。答:classA{intm;voidf(){for(m=65;m<91;m++)System.out.print((char)m+"");for(m=97;m<123;m++)System.out.print((char)m+"");System.out.println("");}}classBextendsA{inti;voidg(){for(i=913;i<930;i++)System.out.print((char)i+"");for(i=931;i<938;i++)System.out.print((char)i+"");for(i=945;i<962;i++)System.out.print((char)i+"");for(i=963;i<970;i++)System.out.print((char)i+"");System.out.println("");}}publicclassTest{publicstaticvoidmain(Stringargs[]){Bb=newB();System.out.println("我调用方法f输出英文字母表:");b.f();System.out.println("我调用方法g输出希腊字母表:");b.g();}} 17.编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法publicvoidspeak(intm)throwsMyException,要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。答:classMyExceptionextendsException{Stringstr1;MyException(intm){str1=m+"出现错误可能造成的原因是取值大于1000";}publicvoidshowStr1(){System.out.println(str1);}}classStudent{publicvoidspeak(intm)throwsMyException{if(m>1000){MyExceptionexception=newMyException(m);throwexception;}elseSystem.out.println(m);}}publicclassTest{publicstaticvoidmain(Stringagrs[]){intm;Studentstu1=newStudent();m=987;try{stu1.speak(m);m=1234;stu1.speak(m);}catch(MyExceptione){e.showStr1();}}18.编写一个类,该类有一个方法publicintf(inta,intb),该方法返回a和b的最大公约数。然后再编写一个该类的子类,要求子类重写方法f,而且重写的方法将返回a和b的最小公倍数。要求在重写的方法的方法体中首先调用被隐藏的方法返回a和b的最大公约数m,然后将乘积(a*b)/m返回。要求在应用程序的主类中分别使用父类和子类创建对象,并分别调用方法f计算两个正整数的最大公约数和最小公倍数。答:classA{publicintf(inta,intb){if(a{inttemp=0;temp=a;a=b;b=temp;}intr=a%b;while(r!=0){a=b;b=r;r=a%b;}returnb;}}classBextendsA{publicintf(inta,intb){intm;m=super.f(a,b);return(a*b)/m;}}publicclassTest{publicstaticvoidmain(Stringargs[]){Aa=newA();System.out.println("18和102的最大公约数是:"+a.f(18,102));Bb=newB();System.out.println("18和102的最小公倍数是:"+b.f(18,102));}} 1.使用Strin
if(x%i==0)
sum+=i;
if(x==sum)
System.out.println(x+"是完数");
7.编写应用程序,分别使用while和for循环计算8+88+888+…前10项之和。
classTheSum
longsum=0,data=8;
sum=sum+data;
data=data*10+8;
②while循环
longsum=0,data=8,i=0;
while(++i<=10)
8.编写应用程序,输出满足1+2+3+…+n<8888的最大正整数n。
classMaxn
intk=1,sum=0;
while((sum+=k)<8888)
k++;
k--;
System.out.println("最大能取到:
"+k);
15.模仿例子4.27,编写一个类实现两个接口的程序。
②interface表面积
doubleallArea(doubler);
interface体积
doublevolu(doubler);
classSphimplements表面积,体积
doublePI=3.14159;
publicdoubleallArea(doubler)
return4*PI*r*r;
publicdoublevolu(doubler)
return4.0/3*PI*r*r*r;
publicclassTest
doubler=5.0;
Spha=newSph();
System.out.println("半径为5的球的表面积是:
"+a.allArea(r));
System.out.println("半径为5的球的体积是:
"+a.volu(r));
16.编写一个类A,该类创建的对象可以调用方法f输出英文字母表,然后再编写一个该类的子类B,要求子类B必须继承A类的方法f(不允许重写),子类创建的对象不仅可以调用方法f输出英文字母表,而且调用子类新增的方法g输出希腊字母表。
classA
intm;
voidf()
for(m=65;m<91;m++)
System.out.print((char)m+"");
for(m=97;m<123;m++)
System.out.println("");
classBextendsA
inti;
voidg()
for(i=913;i<930;i++)
System.out.print((char)i+"");
for(i=931;i<938;i++)
for(i=945;i<962;i++)
for(i=963;i<970;i++)
Bb=newB();
System.out.println("我调用方法f输出英文字母表:
");
b.f();
System.out.println("我调用方法g输出希腊字母表:
b.g();
17.编写一个异常类MyException,再编写一个类Student,该类有一个产生异常的方法publicvoidspeak(intm)throwsMyException,要求参数m的值大于1000时,方法抛出一个MyException对象。
最后编写主类,在主类的main方法中用Student创建一个对象,让该对象调用speak方法。
classMyExceptionextendsException
Stringstr1;
MyException(intm)
str1=m+"出现错误可能造成的原因是取值大于1000";
publicvoidshowStr1()
System.out.println(str1);
classStudent
publicvoidspeak(intm)throwsMyException
if(m>1000)
MyExceptionexception=newMyException(m);
throwexception;
else
System.out.println(m);
publicstaticvoidmain(Stringagrs[])
Studentstu1=newStudent();
m=987;
try
stu1.speak(m);
m=1234;
catch(MyExceptione)
e.showStr1();
18.编写一个类,该类有一个方法publicintf(inta,intb),该方法返回a和b的最大公约数。
然后再编写一个该类的子类,要求子类重写方法f,而且重写的方法将返回a和b的最小公倍数。
要求在重写的方法的方法体中首先调用被隐藏的方法返回a和b的最大公约数m,然后将乘积(a*b)/m返回。
要求在应用程序的主类中分别使用父类和子类创建对象,并分别调用方法f计算两个正整数的最大公约数和最小公倍数。
publicintf(inta,intb)
if(a
inttemp=0;
temp=a;
a=b;
b=temp;
intr=a%b;
while(r!
b=r;
r=a%b;
returnb;
m=super.f(a,b);
return(a*b)/m;
Aa=newA();
System.out.println("18和102的最大公约数是:
"+a.f(18,102));
System.out.println("18和102的最小公倍数是:
"+b.f(18,102));
1.使用Strin
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1