Java2实用教程(第三版)课后答案-清华大学出版社 耿祥义主编 下载本文

System.out.println(s); } }

3. String类的public char charAt(int index)方法可以得到当前字符串index位置上的一个字符。说出下列程序的输出结果。 public class E3 {

public static void main(String args[]) {

String s=\中国科学技术大学\char a=s.charAt(2),b=s.charAt(6); System.out.print(a); System.out.println(b); } } 答: 科大

4. 使用java.util包中的Arrays类的静态方法public static void sort(double a[])可以把参数a指定的double型数组按升序排序,使用java.util包中的Arrays类的静态方法public static void sort(double a[],int start,int end)可以把参数a指定的double型数组中从位置start到end-1位置的数按升序排序。写出下列程序的输出结果。 import java.util.*; public class E4 {

public static void main(String args[]) {

int a[]={23,67,89,90,-987};

double b[]={12.89,90.87,34,678.987,-98.78,0.89}; Arrays.sort(a); Arrays.sort(b,1,4); for(int i=0;i<=4;i++) {

System.out.print(a[i]+\}

for(int i=0;i

System.out.print(b[i]+\} } }

答: -987,23,67,89,90,12.89,34.0,90.87,678.987,-98.78,0.89,

5. 使用java.lang包中System类的静态方法arraycopy可以实现数组的快速复制,上机实习下列程序,并总结出arraycopy方法参数的使用规则。 public class ArrayCopy {

public static void main(String args[]) {

char a1[]={'a','b','c','d','e','f'},b1[]={'1','2','3','4','5','6'}; System.arraycopy(a1,0,b1,1,a1.length-1); System.out.println(new String(a1)); System.out.println(new String(b1));

byte a2[]={97,98,99,100,101,102},b2[]={65,67,68,69,70,71}; System.arraycopy(b2,0,a2,3,b2.length-3); System.out.println(new String(a2)); System.out.println(new String(b2)); } }

答:①运行结果:abcdef 1abcde abcACD ACDEFG

②arraycopy的方法是public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)。其中五个参数分别表示: src - 被复制的数组

srcPos - 从第几个元素开始复制 dest - 要复制到的数组

destPos - 从第几个元素开始粘贴 length - 一共需要复制的元素个数

第6章 时间、日期和数字

1. 用Data类不带参数的构造方法创建日期,要求日期的输出格式是:星期 小时 分 秒。 答: import java.util.*; import java.text.*; class Test {

public static void main(String args[]) {

Date 时间=new Date();

SimpleDateFormat s=new SimpleDateFormat(\时 mm分 ss秒\System.out.println(s.format(时间)); } }

2. 输出2006年2月的日历页,程序需处理闰年问题。 答: import java.util.*; class Test {

public static void main(String args[])

{

int year=2006,month=2; int allDay;

if((year%4==0&&year0!=0)||(year@0==0)) allDay=29; else allDay=28;

Calendar feb=Calendar.getInstance(); feb.set(2006,1,1);

int dat=feb.get(Calendar.DAY_OF_WEEK)-1; String a[]=new String[dat+allDay]; for(int i=0;i

for(int i=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(\年 \月\System.out.println(\日 一 二 三 四 五 六\for(int j=0;j

if(j%7==0) {

System.out.println(\}

System.out.print(a[j]); } } }

3. 计算某年、某月、某日和某年、某月、某日之间的天数间隔。要求年、月、日通过main方法的参数传递到程序中。

答: import java.util.*; class Test {

public static void main(String args[]) {

Calendar c=Calendar.getInstance(); c.set(2000,0,1);

long time1=c.getTimeInMillis(); c.set(2008,7,8);

long time2=c.getTimeInMillis();

long dayCous=(time2-time1)/(1000*60*60*24);

System.out.println(\年8月8日和2000年1月1日相隔\天\} }

4. 编程练习 Math类的常用方法。 答: import java.text.*; public class Test {

public static void main(String args[]) {

double a=Math.abs(-10);

System.out.println(\的绝对值是:\double maxNum=Math.max(123.456,-5.4321);

System.out.println(\与-5.4321中的最大值是:\double minNum=Math.min(123.456,-5.4321);

System.out.println(\与-5.4321中的最小值是:\int randomNum=(int)(Math.random()*10)+1;

System.out.println(\输出一个1到10的随机数是:\double powNum=Math.pow(2,10);

System.out.println(\的10次幂是:\double sqrtNum=Math.sqrt(10);

System.out.println(\的平方根是:\double logNum=Math.log(2);

System.out.println(\的对数是:\double sinNum=Math.sin(-10);

System.out.println(\的正弦值是:\double asinNum=Math.asin(0.5);

System.out.println(\的反正弦值是:\System.out.println(\格式化之前的数是:\NumberFormat f=NumberFormat.getInstance(); f.setMaximumFractionDigits(10); f.setMinimumIntegerDigits(4); String s=f.format(sqrtNum); System.out.println(\格式化后:\} }

5. 使用BigInteger类计算1!+3!+5!+7!+?的前30项的和。 答: import java.math.*;

public class Test {

public static void main(String args[])

{

BigInteger sum=new BigInteger(\jieCheng=new BigInteger(\ONE=new BigInteger(\i=ONE; int k=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); } }

第7章 AWT组件及事件处理

1. Frame类对象的默认布局是什么布局?和Panel类对象的默认布局相同吗? 答:①Frame类对象的默认布局是BorderLayout布局; ②不相同,Panel类对象的默认布局是FlowLayout布局。 2. 一个容器对象是否可以使用add方法添加一个Frame窗口? 答: 不可以。

3. Checkbox对象可以触发ItemEvent事件吗? 答: 可以。

4. 编写应用程序,有一个标题为“计算的窗口”的窗口,窗口的布局为FlowLayout布局。窗口中添加两个文本区,当我们在一个文本区中输入若干个数时,另一个文本区,同时对输入的数进行求和运算并求出平均值,也就是说随着输入的变化,另一个文本区不断地更新求和及平均值。 答: import java.awt.*; import java.awt.event.*; import java.util.*;

class Calculated extends Frame implements TextListener {

TextArea text1,text2; //定义了2个文本区

Calculated(String s) //标题为“计算的窗口”的窗口 { super(s);