2022年java实用教程课后习题答案 .pdf
3. 编写应用程序,求1!+2!+,+10! 。答: class Fact public static void main(String args) int fact,sum=0; for(int i=1;i=10;i+) fact=1; for(int j=1;j=i;j+) fact*=j; sum+=fact; System.out.println(1到10的 阶 乘 之 和是:+sum); 4. 编写一个应用程序,求100 以内的全部素数。答: class Primes public static void main(String args) int w=1; for(int i=2;i=100;i+) for(int j=2;ji;j+) w=i%j; if(w=0) break; if(w!=0) System.out.println(i+是素数 ); 5. 分别用 dowhile和 for 循环计算 1+1/2 !+1/3 !+1/4 !+,的前 20 项和。答: for循环class Sum public static void main(String args) int fact; double sum=0; for(int i=1;i=20;i+) fact=1; for(int j=1;j=i;j+) fact*=j; sum+=1.0/fact; System.out.println(sum); dowhile 循环class Sum public static void main(String args) int i=1; int fact; double sum=0; do fact=1; int j=0; while(+j=i) fact*=j; sum+=1.0/fact; while(+i=20); System.out.println(sum); 6. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。编写应用程序,求1000 之内的所有完数。答: class Wanshu public static void main(String args) int x,i,sum; for(x=1;x=1000;x+) sum=0; for(i=1;ix;i+) if(x%i=0) sum+=i; if(x=sum) System.out.println(x+是完数 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 22 页 - - - - - - - - - 7. 编写应用程序, 分别使用while 和 for循环计算 8+88+888+,前 10 项之和。答: for循环class TheSum public static void main(String args) long sum=0,data=8; for(int i=1;i=10;i+) sum=sum+data; data=data*10+8; System.out.println(sum); while 循环class TheSum public static void main(String args) long sum=0,data=8,i=0; while(+i=10) sum=sum+data; data=data*10+8; System.out.println(sum); 8. 编写应用程序, 输出满足1+2+3+, +n8888 的最大正整数n。答: class Maxn public static void main(String args) int k=1,sum=0; while(sum+=k)8888) k+; k-; System.out.println(最大能取到 :+k); 15. 模仿例子 4.27 ,编写一个类实现两个接口的程序。答: interface 表面积 double allArea(double r); interface 体积 double volu(double r); class Sph implements 表面积 , 体积 double PI=3.14159; public double allArea(double r) return 4*PI*r*r; public double volu(double r) return 4.0/3*PI*r*r*r; public class Test public static void main(String args) double r=5.0; Sph a=new Sph(); System.out.println(半径为5 的球的表面积是 :+a.allArea(r); System.out.println(半径为5 的球的体积是 :+a.volu(r); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 22 页 - - - - - - - - - 16. 编写一个类A, 该类创建的对象可以调用方法f 输出英文字母表,然后再编写一个该类的子类B,要求子类B 必须继承A类的方法 f( 不允许重写 ) , 子类创建的对象不仅可以调用方法f 输出英文字母表, 而且调用子类新增的方法g 输出希腊字母表。答: class A int m; void f() for(m=65;m91;m+) System.out.print(char)m+ ); for(m=97;m123;m+) System.out.print(char)m+ ); System.out.println( ); class B extends A int i; void g() for(i=913;i930;i+) System.out.print(char)i+ ); for(i=931;i938;i+) System.out.print(char)i+ ); for(i=945;i962;i+) System.out.print(char)i+ ); for(i=963;i1000) MyException exception=new MyException(m); throw exception; else System.out.println(m); public class Test public static void main(String agrs) int m; Student stu1=new Student(); m=987; try stu1.speak(m); m=1234; stu1.speak(m); catch(MyException e) e.showStr1(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 22 页 - - - - - - - - - 18. 编写一个类,该类有一个方法public int f(int a,int b) ,该方法返回a 和 b 的最大公约数。然后再编写一个该类的子类,要求子类重写方法f,而且重写的方法将返回a 和 b 的最小公倍数。要求在重写的方法的方法体中首先调用被隐藏的方法返回 a 和 b 的最大公约数m ,然后将乘积 (a*b)/m返回。要求在应用程序的主类中分别使用父类和子类创建对象,并分别调用方法f 计算两个正整数的最大公约数和最小公倍数。答:class A public int f(int a,int b) if(ab) int temp=0; temp=a; a=b; b=temp; int r=a%b; while(r!=0) a=b; b=r; r=a%b; return b; class B extends A public int f(int a,int b) int m; m=super.f(a,b); return (a*b)/m; public class Test public static void main(String args) A a=new A(); System.out.println(18和 102 的最大公约数是 :+a.f(18,102); B b=new B(); System.out.println(18和 102 的最小公倍数是 :+b.f(18,102); 1. 使用 String类的 public String toUpperCase() 方法可以将一个 字 符串 中 的 小 写字 母变成 大写 字 母 , 使 用public String toLowerCase()方法可以将一个字符串中的大写字母变成小写字母。编写一个程序,使用这两个方法实现大小写的转换。答: class Test public static void main(String args) String str=I can use Java; System.out.println(要转换的字符串是 :+str); String s=str.toUpperCase(); System.out.println(转换成大写字符串是 :+s); s=str.toLowerCase(); System.out.println(转换成小写字符串是 :+s); 2. 使用 String类的 public String concat(String str)方法可以把调用该方法的字符串与参数指定的字符串连接,把 str指定的串连接到当前串的尾部获得一个新的串。编写一个程序通过连接两个串得到一个新串,并输出这个新串。答: class Test public static void main(String args) String str1=I can u; String str2=se Java; String s=str1.concat(str2); System.out.println(将 字符串 +str1+与 字符串 +str2+连接后得到的新字符串是:); System.out.println(s); 1. 用 Data 类不带参数的构造方法创建日期,要求日期的输出格式是 : 星期 小时分 秒。答:import java.util.*; import java.text.*; class Test public static void main(String args) Date 时间 =new Date(); SimpleDateFormat s=new SimpleDateFormat(E HH时 mm 分 ss秒); System.out.println(s.format(时间 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 22 页 - - - - - - - - - 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(2008年 8 月 8 日和2000 年 1 月 1 日相隔 +dayCous+ 天); 5. 使用 BigInteger类计算 1!+3!+5!+7!+,的前30 项的和。答: import java.math.*; public class Test public static void main(String args) BigInteger sum=new BigInteger(0), jieCheng=new BigInteger(1), ONE=new BigInteger(1), 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); 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); setLayout(new FlowLayout(); /窗口布局为 FlowLayout text1=new TextArea(5,23); text2=new TextArea(5,23); add(text1); add(text2); text2.setEditable(false); /显示求和结果和平均值的文本区禁止编辑text1.addTextListener(this); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setBounds(100,100,400,160); setVisible(true); validate(); public void textValueChanged(TextEvent e) String s=text1.getText(); StringTokenizer geshu=new StringTokenizer(s); int n=geshu.countTokens(); double a=new doublen; for(int i=0;in;i+) String temp=geshu.nextToken(); double date=Double.parseDouble(temp); ai=date; double sum=0,average; for(int i=0;i0) String str1=text1.getText()+n+text2.getText()+n+text3.getText()+n; String str2=textarea.getText(); textarea.setText(str2+str1); else text2.setText(输 入 了 非 法 格 式 的E-mail地址 ); public class Test public static void main(String args) new WindowBox(); 8. 写一个应用程序,要求编写一个Panel 的子类MyPanel,MyPanel 中有一个文本框和一个按钮,要求 MyPanel 的实例作为其按钮的ActionEvent事件的监视器,当单击按钮时,程序获取文本框中的文本,并将该文本作为按钮的名称。然后在 编 写 一 个Frame 的 子 类 , 即 窗 口 。 窗 口 的 布 局 为BorderLayout布局。窗口中添加两个MyPanel 面板,分别添加到窗口的东部区域和西部区域。答:import java.awt.*; import java.awt.event.*; class MyPanel extends Panel implements ActionListener String name; TextField text; Button button; MyPanel() text=new TextField(10); button=new Button(确定 ); add(text); add(button); button.addActionListener(this); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); public void actionPerformed(ActionEvent e) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 22 页 - - - - - - - - - if(e.getSource()=button) name=text.getText(); button.setLabel(name); class MyFrame extends Frame MyPanel panel1,panel2; MyFrame() panel1=new MyPanel(); panel2=new MyPanel(); add(panel1,BorderLayout.EAST); add(panel2,BorderLayout.WEST); setBounds(100,100,400,100); setVisible(true); validate(); public class Test public static void main(String args) MyFrame win=new MyFrame(); 9. 参照例子 7.18 编写一个应用程序,要求有一个画布,在画布上绘制一个矩形,用户通过文本框输入矩形的宽和高以及矩形左上角的位置坐标。答: import java.awt.*; import java.awt.event.*; class Mycanvas extends Canvas int x,y,w,h; Mycanvas() setBackground(Color.cyan); public void setX(int x) this.x=x; public void setY(int y) this.y=y; public void setW(int w) this.w=w; public void setH(int h) this.h=h; public void paint(Graphics g) g.drawRect(x,y,w,h); class WindowCanvas extends Frame implements ActionListener Mycanvas canvas; TextField text1,text2,text3,text4; Button button; WindowCanvas() canvas=new Mycanvas(); text1=new TextField(4); text2=new TextField(4); text3=new TextField(5); text4=new TextField(5); Panel pNorth=new Panel(),pSouth=new Panel(); button=new Button(确定); button.addActionListener(this); pNorth.add(new Label(矩形的宽 : ); pNorth.add(text3); pNorth.add(new Label(矩形的高 : ); pNorth.add(text4); pSouth.add(new Label(左 上 角 位 置 坐标:); pSouth.add(text1); pSouth.add(text2); pSouth.add(button); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); add(canvas,BorderLayout.CENTER); add(pNorth,BorderLayout.NORTH); add(pSouth,BorderLayout.SOUTH); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 22 页 - - - - - - - - - setBounds(100,100,500,500); setVisible(true); validate(); public void actionPerformed(ActionEvent e) int x,y,w,h; try x=Integer.parseInt(text1.getText(); y=Integer.parseInt(text2.getText(); w=Integer.parseInt(text3.getText(); h=Integer.parseInt(text4.getText(); canvas.setX(x); canvas.setY(y); canvas.setW(w); canvas.setH(h); canvas.repaint(); catch(NumberFormatException ee) x=0;y=0;w=0;h=0; public class Test public static void main(String args) new WindowCanvas(); 10. 编写应用程序,有一个窗口对象,该窗口取它的默认布局: BorderLayout布局 , 北面添加一个List组件,该组件有四个商品名称的选项。中心添加一个文本区,当选择 List组件中的某个选项后,文本区显示对该商品的价格和产地: 当双击List组件中的某个选项后,文本区显示该商品的详细广告。答:import java.awt.*; import java.awt.event.*; class WindowGoods extends Frame implements ActionListener,ItemListener String s=产地 : 北京 , 产地 : 上海 , 产地 :沈阳 , 产地 : 广东 ; String p=价 格 :3200,价 格 :158,价格:13.2,价格 :320/ 打; String a=本商品 *,本商品 *,本商品 *,本商品 *; List list; TextArea text; WindowGoods() list=new List(3,false); text=new TextArea(6,20); text.setEditable(false); list.add(商品 1); list.add(商品 2); list.add(商品 3); list.add(商品 4); add(list,BorderLayout.NORTH); add(text,BorderLayout.CENTER); list.addItemListener(this); list.addActionListener(this); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setBounds(100,100,300,300); setVisible(true); validate(); public void itemStateChanged(ItemEvent e) if(e.getItemSelectable()=list) int m=list.getSelectedIndex(); text.setText(pm+n+sm); public void actionPerformed(ActionEvent e) int n=list.getSelectedIndex(); text.setText(an); public class Test public static void main(String args) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 22 页 - - - - - - - - - new WindowGoods(); 11. 编写程序,观察各种组件设置背景色和前景色的情况。答:import java.awt.*; import java.awt.event.*; class WindowColor extends Frame implements ActionListener Button button; /按钮TextField textfield; /文本框TextArea textarea; /文本区Mypanel panel; /面板Checkbox box; /选择框Choice choice; /下拉列表List list; /滚动列表Label label; /标签Mycanvas can; /画布Button buttonBackColor,buttonForeColor; WindowColor() button=new Button(我是按钮 ); textfield=new TextField(我 是 文 本 框,10); textarea=new TextArea(6,15); textarea.setText(我是文本区 ); textfield.setEditable(false); textarea.setEditable(false); panel=new Mypanel(); box=new Checkbox( 我是选择框 ); choice=new Choice(); choice.add(我是下拉列表 ); list=new List(3,false); list.add(我是滚动列表 ); label=new Label(我是标签 ); can=new Mycanvas(); buttonBackColor=new Button(背景色 ); buttonForeColor=new Button(前景色 ); setLayout(new FlowLayout(); add(button); add(textfield); add(textarea); add(panel); add(box); add(choice); add(list); add(label); add(can); add(buttonBackColor); add(buttonForeColor); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); buttonBackColor.addActionListener(this); buttonForeColor.addActionListener(this); setBounds(100,100,300,300); setVisible(true); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=buttonBackColor) button.setBackground(Color.yellow); textfield.setBackground(Color.yellow); textarea.setBackground(Color.yellow); panel.setBackground(Color.yellow); box.setBackground(Color.yellow); choice.setBackground(Color.yellow); list.setBackground(Color.yellow); label.setBackground(Color.yellow); can.setBackground(Color.yellow); else if(e.getSource()=buttonForeColor) button.setForeground(Color.blue); textfield.setForeground(Color.blue); textarea.setForeground(Color.blue); panel.setForeground(Color.blue); box.setForeground(Color.blue); choice.setForeground(Color.blue); list.setForeground(Color.blue); label.setForeground(Color.blue); can.setForeground(Color.blue); class Mycanvas extends Canvas Mycanvas() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 22 页 - - - - - - - - - public void paint(Graphics g) g.drawString(我是画布 ,5,5); class Mypanel extends Panel Button button1; Mypanel() button1=new Button(我是面板 ); add(button1); public class Test public static void main(String args) new WindowColor(); 12. 编写应用程序,有一个标题为“移动”的窗口,窗口的布局为 null ,在窗口中有两个按钮,单击一个按钮让另一个按钮移动。答: import java.awt.*; import java.awt.event.*; class WindowMove extends Frame implements ActionListener Button button1,button2; WindowMove(String s) super(s); setLayout(null); button1=new Button(我让它横向走动 ); button2=new Button(我让它纵向走动 ); button1.setBackground(Color.blue); button2.setBackground(Color.green); button1.addActionListener(this); button2.addActionListener(this); button1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); button2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); add(button1); add(button2); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); button1.setBounds(20,80,100,30); button2.setBounds(100,180,100,30); setBounds(100,100,500,500); setVisible(true); validate(); public void actionPerformed(ActionEvent e) Rectangle rect1=button1.getBounds(); int x1=(int)rect1.getX(); int y1=(int)rect1.getY(); Rectangle rect2=button2.getBounds(); int x2=(int)rect2.getX(); int y2=(int)rect2.getY(); if(e.getSource()=button1) x2=x2+5; button2.setLocation(x2,y2); else if(e.getSource()=button2) y1=y1+5; button1.setLocation(x1,y1); public class Test public static void main(String args) new WindowMove(移动 ); 13. 编写应用程序,有一个标题为“改变颜色”的窗口,窗口的布局为 null ,在窗口中有3 个按钮和一个画布,3 个按钮的颜色分别是红、绿、蓝。单击相应的按钮,画布绘制相应颜色的圆。答:import java.awt.*; import java.awt.event.*; class WindowChangeColor extends Frame implements ActionListener Button buttonRed,buttonGreen,buttonBlue; Mycanvas canvas; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 22 页 - - - - - - - - - WindowChangeColor(String s) super(s); setLayout(null); buttonRed=new Button(红色 ); buttonGreen=new Button(绿色 ); buttonBlue=new Button(蓝色); canvas=new Mycanvas(); buttonRed.setBackground(Color.red); buttonGreen.setBackground(Color.green); buttonBlue.setBackground(Color.blue); add(canvas); canvas.setBounds(10,10,150,150); add(button