java 课后大题问题详解.docx
- 文档编号:2699066
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:57
- 大小:24.89KB
java 课后大题问题详解.docx
《java 课后大题问题详解.docx》由会员分享,可在线阅读,更多相关《java 课后大题问题详解.docx(57页珍藏版)》请在冰点文库上搜索。
java课后大题问题详解
第一章
8.编写一个Java应用程序,输出全部的希腊字母。
答:
publicclassXLWords
{
publicstaticvoidmain(Stringargs[])
{
for(inti=913;i<930;i++)
{
System.out.print((char)i+"");
}
for(intj=931;j<938;j++)
{
System.out.print((char)j+"");
}
for(intk=945;k<962;k++)
{
System.out.print((char)k+"");
}
for(intt=963;t<=969;t++)
{
System.out.print((char)t+"");
}
}
}
第三章
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
{
publicstaticvoidmain(Stringargs[])
{
intfact;
doublesum=0;
for(inti=1;i<=20;i++)
{
fact=1;
for(intj=1;j<=i;j++)
fact*=j;
sum+=1.0/fact;
}
System.out.println(sum);
}
}
②do―while循环
classSum
{
publicstaticvoidmain(Stringargs[])
{
inti=1;
intfact;
doublesum=0;
do
{
fact=1;
intj=0;
while(++j<=i)
fact*=j;
sum+=1.0/fact;
}
while(++i<=20);
System.out.println(sum);
}
}
6.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
编写应用程序,求1000之内的所有完数。
答:
classWanshu
{
publicstaticvoidmain(Stringargs[])
{
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,编写一个类实现两个接口的程序。 答: ①一个类使用接口时,要有implements关键字,当一个类使用多个接口时,接口名要用逗号“,”隔开;使用接口的类除abstract类外,必须实现接口的所有方法,并且实现接口的方法时,方法名字、返回类型、参数个数及类型必须与接口中的完全一致;类在实现接口时,方法体一定要用public修饰,如果接口方法的返回类型不是void型,在类中实现接口时,方法体至少有一个return语句。 ②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; } else System.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.用Data类不带参数的构造方法创建日期,要求日期的输出格式是: 星期小时分秒。 答: importjava.util.*; importjava.text.*; classTest { publicstaticvoidmain(Stringargs[]) { Date时间=newDate(); SimpleDateFormats=newSimpleDateFormat("EHH时mm分ss秒"); System.out.println(s.format(时间)); } } 2.输出2006年2月的日历页,程序需处理闰年问题。 答: importjava.util.*; classTest { publicstaticvoidmain(Stringargs[]) { intyear=2006,month=2; intallDay; if((year%4==0&&year%100! =0)||(year%400==0)) allDay=29; else allDay=28; Calendarfeb=Calendar.getInstance(); feb.set(2006,1,1); intdat=feb.get(Calendar.DAY_OF_WEEK)-1; Stringa[]=newString[dat+allDay]; for(inti=0;i { a[i]=""; } for(inti=dat,n=1;i<(dat+allDay);i++) { if(n<=9) a[i]=String.valueOf(n)+""; else a[i]=String.valueOf(n)+""; n++; } System.out.println(""+year+"年"+month+"月"); System.out.println("日一二三四五六"); for(intj=0;j { if(j%7==0) { System.out.println(""); } System.out.print(a[j]); } } } 3.计算某年、某月、某日和某年、某月、某日之间的天数间隔。 要求年、月、日通过main方法的参数传递到程序中。 答: importjava.util.*; classTest { publicstaticvoidmain(Stringargs[]) { Calendarc=Calendar.getInstance(); c.set(2000,0,1); longtime1=c.getTimeInMillis(); c.set(2008,7,8); longtime2=c.getTimeInMillis(); longdayCous=(time2-time1)/(1000*60*60*24); System.out.println("2008年8月8日和2000年1月1日相隔"+dayCous+"天"); } } 4.编程练习Math类的常用方法。 答: importjava.text.*; publicclassTest { publicstaticvoidmain(Stringargs[]) { doublea=Math.abs(-10); System.out.println("-10的绝对值是: "+a); doublemaxNum=Math.max(123.456,-5.4321); System.out.println("123.456与-5.4321中的最大值是: "+maxNum); doubleminNum=Math.min(123.456,-5.4321); System.out.println("123.456与-5.4321中的最小值是: "+minNum); intrandomNum=(int)(Math.random()*10)+1; System.out.println("输出一个1到10的随机数是: "+randomNum); doublepowNum=Math.pow(2,10); System.out.println("2的10次幂是: "+powNum); doublesqrtNum=Math.sqrt(10); System.out.println("10的平方根是: "+sqrtNum); doublelogNum=Math.log (2); System.out.println("2的对数是: "+logNum); doublesinNum=Math.sin(-10); System.out.println("-10的正弦值是: "+sinNum); doubleasinNum=Math.asin(0.5); System.out.println("0.5的反正弦值是: "+asinNum); System.out.println("格式化之前的数是: "+sqrtNum); NumberFormatf=NumberFormat.getInstance(); f.setMaximumFractionDigits(10); f.setMinimumIntegerDigits(4); Strings=f.format(sqrtNum); System.out.println("格式化后: "+s); } } 5.使用BigInteger类计算1! +3! +5! +7! +…的前30项的和。 答: importjava.math.*; publicclassTest { publicstaticvoidmain(Stringargs[]) { BigIntegersum=newBigInteger("0"), jieCheng=newBigInteger("1"), ONE=newBigInteger("1"), i=ONE; intk=0; while(++k<=30) { sum=sum.add(jieCheng); i=i.add(ONE); jieCheng=jieCheng.multiply(i); i=i.add(ONE); jieCheng=jieCheng.multiply(i); } System.out.println(sum); } } 第七章 4.编写应用程序,有一个标题为“计算的窗口”的窗口,窗口的布局为FlowLayout布局。 窗口中添加两个文本区,当我们在一个文本区中输入若干个数时,另一个文本区,同时对输入的数进行求和运算并求出平均值,也就是说随着输入的变化,另一个文本区不断地更新求和及平均值。 答: importjava.awt.*; importjava.awt.event.*; importjava.util.*; classCalculatedextendsFrameimplementsTextListener { TextAreatext1,text2;//定义了2个文本区 Calculated(Strings)//标题为“计算的窗口”的窗口 { super(s); setLayout(newFlowLayout());//窗口布局为FlowLayout text1=newTextArea(5,23); text2=newTextArea(5,23); add(text1); add(text2); text2.setEditable(false);//显示求和结果和平均值的文本区禁止编辑 text1.addTextListener(this); addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente) { System.exit(0); } } ); setBounds(100,100,400,160); setVisible(true); validate(); } publicvoidtextValueChanged(TextEvente) { Strings=text1.getText(); StringTokenizergeshu=newStringTokenizer(s); intn=geshu.countTokens(); doublea[]=newdouble[n]; for(inti=0;i { Stringtemp=geshu.nextToken(); doubledate=Double.parseDouble(temp); a[i]=date; } doublesum=0,average; for(inti=0;i { sum=sum+a[i]; } average=sum/n; text2.setText(null); text2.append("和: "+sum+"\n"+"平均数: "+average); } } publicclassTest { publicstaticvoidmain(Stringargs[]) { Calculatedcalc=newCalculated("计算的窗口"); } } 5.文本区可以使用getSelectedText()方法获取该文本区通过拖动鼠标选中的文件。 编写应用程序,有一个标题为“挑单词”的窗口,窗口的布局为BorderLayout布局。 窗口中添加两个文本去和一个按钮组 件,要求文本区分别添加到窗口的东部区域和西部区域;按钮添加到窗口的南部区域,当单击按钮时,程序将东部区域的文本区中鼠标选中的内容尾加到西部区域的文本区中。 答: importjava.awt.*; importjava.awt.event.*; classWindowSelectedTextextendsFrameimplementsActionListener { TextAreatext1,text2;//定义2个文本区 Buttonbutton;//定义一个按钮 WindowSelectedText(Strings)//窗口名字为“挑单词” { super(s); setLayout(newBorderLayout());//窗口布局是BorderLayout布局 text1=newTextArea(6,15); text2=newTextArea(6,15); button=newButton("确定"); add(text1,BorderLayout.EAST); add(text2,BorderLayout.WEST); add(button,BorderLayout.SOUTH); button.addActionListener(this); addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente) { System.exit(0); } } ); text2.se
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课后大题问题详解 课后 问题 详解
![提示](https://static.bingdoc.com/images/bang_tan.gif)