41、Java AWT程序设计:在窗口中画出三个TextField(前两个用于接收用户输入的两个整数,第三个用于显示相加和),一个加号Label,一个等于号Button. 当按下Button时,将相加之和放到第三个TextField中。注意:不允许使用内部类。
本题参考答案: import java.awt.*; import java.awt.event.*; public class TFMath {
public static void main(String[] args) { new TFFrame().launchFrame(); } }
class TFFrame extends Frame { TextField num1, num2, num3; public void launchFrame() { num1 = new TextField(10); num2 = new TextField(10); num3 = new TextField(15); Label lblPlus = new Label(\\\ Button btnEqual = new Button(\\\
btnEqual.addActionListener(new MyMonitor(this)); setLayout(new FlowLayout()); add(num1); add(lblPlus); add(num2); add(btnEqual); add(num3); pack(); setVisible(true);
} }
class MyMonitor implements ActionListener { TFFrame tf = null;
public MyMonitor(TFFrame tf) { this.tf = tf; }
public void actionPerformed(ActionEvent e) { int n1 = Integer.parseInt(tf.num1.getText()); int n2 = Integer.parseInt(tf.num2.getText()); tf.num3.setText(\\\ } }
42、阅读下面的程序,写出输出结果。 public class MyException {
public static void throwException() {
System.out.println(\产生并抛出ArithmeticException类型的异常\ throw new ArithmeticException(); }
public static void catchArrayException() { try {
throwException();
System.out.println(\在try语句块中的多余语句\ } catch(ArrayIndexOutOfBoundsException e) {
System.err.println(\方法catchArrayException捕捉到异常\ } finally {
System.out.println(\方法catchArrayException的finally语句块\ }
System.out.println(\方法catchArrayException运行结束\ }
public static void main(String[] args) { try {
catchArrayException(); } catch(ArithmeticException e) {
System.err.println(\方法main捕捉到异常\ } finally {
System.out.println(\方法main的finally语句块\ }
System.out.println(\异常处理结束\ } }
本题参考答案: 答:输出为
产生并抛出ArithmeticException类型的异常 方法catchArrayException的finally语句块 方法main捕捉到异常 方法main的finally语句块 异常处理结束
43、问:下面语句中的错误都是在Java数据类型转换中的易错点。分析语句的错误原因并改正。 (1) float f1 = 0.1;
(2) long l1 = 12345678, l2 = 8888888888; (3) byte b1 = 1, b2 = 2, b3 = 129; (4) byte b = b1 - b2; (5) int i = 1;
i = i * 0.1; // 有错 (6)
char c1 = 'a', c2 = 125; char c = c1 + c2 - 1; // 有错 (7)
float f1 = 0.1f, f2 = 123; float f3 = f1+f2*0.1; // 有错 本题参考答案: 答:
(1) float f1 = 0.1;
错误原因:0.1缺省为double类型
改正办法:float f1 = (float)0.1; 或改为 float f1=0.1f;
(2) long l1 = 12345678, l2 = 8888888888;
错误原因:8888888888已经超出缺省int型的最大表示范围,必须加字母L。 改正办法:long l1 = 12345678, l2 = 8888888888L;
(3) byte b1 = 1, b2 = 2, b3 = 129; 错误原因:129在自动转换中超出范围
改正办法:byte b1 = 1, b2 = 2, b3 = 127;
(4) byte b = b1 - b2;
错误原因:b1、b2在作运算前首先转换为int型,因此减法结果就是int型,不能直接赋值给byte型的b来保存,需要强制类型转换 改正办法:byte b = (byte)(b1-b2); (5) int i = 1; i = i*0.1;
错误原因:0.1是double型,i在乘法前会自动转换为double型,乘法结果也是double型,不能直接赋值为int型的i来保存,需要强制类型转换 改正办法:i = (int)(i*0.1); (6)
char c1='a', c2=125; char c = c1 + c2 - 1;
错误原因:c1、c2在作运算前首先转换为int型,因此计算结果就是int型,不能直接赋值给char型的c来保存,需要强制类型转换 改正办法:char c = (char)(c1 + c2 - 1); (7)
float f1 = 0.1f, f2 = 123; float f3 = f1+f2*0.1;
错误原因:由于0.1是double型,在运算前首先全部要转换为double型,因此计算结果就是double型,不能直接赋值给float型的f4来保存,需要强制类型转换 改正办法:float f4 = (float)(f1+f2*0.1);