1、二级 JAVA机试 88及答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.下列程序中,要求按照从小到大的顺序输出 1100 之间所有能被 7整除的数字,请将下列程序补充完整。 注意:请勿改动 main()主方法和其他已有语句内容,仅在横线处填入适当语句。 public class Example1_3 public static void main(String argv) int i = 1; _ if(_) System.out.print(i+ “,“); _ while(i 100); System.out.println(
2、); (分数:30.00)_二、B2简单应用题/B(总题数:1,分数:40.00)2.请完成以下程序,首先由一个类 Example2_3实现 Serializable接口,并有三个成员变量,分别为 int型、double 型和 String型,可以用 toString的方法显示这三个成员变量。在 main方法中创建这个Example2_3的持久对象,根据用户在命令行输入的三个参数来设定其中成员变量的值。然后,将这个对象写入名为 TheSerial.data的文件,并显示成员变量。最后从文件 TheSerial.data中读出三个成员变量并显示出来。 注意:请勿改动 main()主方法和其他已有
3、语句内容,仅在横线处填入适当语句。 import java.io.*; class TheSerial implements Serializable private int intValue; private double doubleValue; private String string; TheSerial() intValue = 123; doubleValue = 12.34; string = “Serialize Test“; public void setDouble(double d) doubleValue = d; public void setInt(int i)
4、intValue = i; public void setString(String s) string = s; public String toString() return(“int=“+intValue+“double=“+doubleValue+“ string=“+string); public class Example2_3 public static void main(String argv) TheSerial e1 = new TheSerial(); TheSerial e2; try e1.setInt(Integer.parseInt(argv0); e1.set
5、Double(Double.parseDouble(argv1); e1.setStringargv2); catch(Exception e) e1.setString(e.getMessage); System.out.println(e1); try FileOutputStream oS = new FileOutputStream(“TheSerial.data“); ObjectOutputStream oIS = new ObjectOutputStream(oS); _; catch(IOException ioException) System.out.println(ioE
6、xception.getMessage(); try FileInputStream iS = new FileInputStream(“TheSerial. data“); ObjectInputStream oIS = new ObjectInputStream(iS); _ System.out.println(e2); catch(IOException ioException) System.out.println(ioException.getMessage(); catch(ClassNotFoundException cnfException) System.out.print
7、ln(cnfException.getMessage(); (分数:40.00)_三、B3综合应用题/B(总题数:1,分数:30.00)3.在以下程序中,鼠标单击小应用程序的某一点,则会在该点显示一个图标,如果双击,则会清除该图标。且在浏览器的状态栏上会显示鼠标单击位置的坐标。运行结果如下图所示。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 (分数:30.00)_二级 JAVA机试 88答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.下列程序中,要求按照从小到大的顺序输出 1100 之间所有能被 7整除的数字,请将
8、下列程序补充完整。 注意:请勿改动 main()主方法和其他已有语句内容,仅在横线处填入适当语句。 public class Example1_3 public static void main(String argv) int i = 1; _ if(_) System.out.print(i+ “,“); _ while(i 100); System.out.println(); (分数:30.00)_正确答案:()解析:do i7=0 i+;或者 i=i+1;或者 i+=1; 解析 本题主要考查 Java编程的流程控制。 Java语言中的流程控制主要是通过循环、分支和跳转三种语句来实现的
9、。在解这类题型的时候,首先要分清楚题中要考查的语句类型,比如本题考查了考生对 do-while循环的掌握情况;然后,再根据对应的类型,看题中的语句结构是否完整。题中变量 i从 1循环增加到 99,每一个数字模 7,如果余数为 0就认为这是一个可以被 7整除的数。 本题中,do-while 循环缺少了“do”这个循环开始语句,因此第一个空需要填写“do”以使循环体完整;最后也是最重要的,循环一定要保证能够正常结束,许多编程经验丰富的人也会因为一时大意而写出死循环来,这样的错误一定要避免。 第二个空就是使 i值顺序增加,直到i=100时程序退出循环。 本题中还考查了考生对条件分支语句的掌握,即 i
10、f语句。在解条件分支语句的题的时候,首先要找出需要满足的条件是什么,需要通过分支语句分流的条件是什么。比如题中要求能被 7整除,所谓整除就是余数为 0,这样我们就知道,分支条件就是余数值是否为 0,则第二个空应该填写“i7=0”。二、B2简单应用题/B(总题数:1,分数:40.00)2.请完成以下程序,首先由一个类 Example2_3实现 Serializable接口,并有三个成员变量,分别为 int型、double 型和 String型,可以用 toString的方法显示这三个成员变量。在 main方法中创建这个Example2_3的持久对象,根据用户在命令行输入的三个参数来设定其中成员变
11、量的值。然后,将这个对象写入名为 TheSerial.data的文件,并显示成员变量。最后从文件 TheSerial.data中读出三个成员变量并显示出来。 注意:请勿改动 main()主方法和其他已有语句内容,仅在横线处填入适当语句。 import java.io.*; class TheSerial implements Serializable private int intValue; private double doubleValue; private String string; TheSerial() intValue = 123; doubleValue = 12.34; s
12、tring = “Serialize Test“; public void setDouble(double d) doubleValue = d; public void setInt(int i) intValue = i; public void setString(String s) string = s; public String toString() return(“int=“+intValue+“double=“+doubleValue+“ string=“+string); public class Example2_3 public static void main(Str
13、ing argv) TheSerial e1 = new TheSerial(); TheSerial e2; try e1.setInt(Integer.parseInt(argv0); e1.setDouble(Double.parseDouble(argv1); e1.setStringargv2); catch(Exception e) e1.setString(e.getMessage); System.out.println(e1); try FileOutputStream oS = new FileOutputStream(“TheSerial.data“); ObjectOu
14、tputStream oIS = new ObjectOutputStream(oS); _; catch(IOException ioException) System.out.println(ioException.getMessage(); try FileInputStream iS = new FileInputStream(“TheSerial. data“); ObjectInputStream oIS = new ObjectInputStream(iS); _ System.out.println(e2); catch(IOException ioException) Sys
15、tem.out.println(ioException.getMessage(); catch(ClassNotFoundException cnfException) System.out.println(cnfException.getMessage(); (分数:40.00)_正确答案:()解析:oOS.writeObject(e1) e2=(TheSerial)oIS.readObject() 解析 本题主要考查串行化相关的方法和实现。解题中首先要掌握串行化的基本过程和反串行化的过程。串行化过程首先要创建一个输出流FileOutputStream,通过该类的实例对文件进行访问,然后创建
16、一个 ObJectOutput Stream对象,通过writeObject()方法来实现对象的序列化。第一个空就是使用 writeObject()实现序列化。 反序列化过程中用 FileInputStream对象建立读取文件的连接,并使用该对象创建一个 ObiectInputStream 的实例,这个 ObjectInput Stream实例的 readObject()方法就可以实现对象的反序列化。第二个空就是使用readObject()实现反序列化。三、B3综合应用题/B(总题数:1,分数:30.00)3.在以下程序中,鼠标单击小应用程序的某一点,则会在该点显示一个图标,如果双击,则会清除
17、该图标。且在浏览器的状态栏上会显示鼠标单击位置的坐标。运行结果如下图所示。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 (分数:30.00)_正确答案:()解析:displayIm=getImage(getDocumentBase(),“ms.jpg“) 第一处也可改作displayIm=getImage(getCodeBase(),“ms.jpg“) g.clearRect(xPoint,yPoint,60,60) repaint() 解析 Applet 获得图像有两种方式,一种是 getImage(URL url),另一种是 getImage(URL url, Strin
18、g name)。init()方法用来初始化小应用程序,首先是将图像文件读入内存,然后为小应用程序添加鼠标点击事件。paint()方法向页面绘制图像,题中的 if-else语句表示用户单击鼠标则在鼠标单击的位置显示图片,用户多次点击鼠标,则清除该点右下方长宽均为 60的矩形区域内的图像。SClickMouse 实现了鼠标监听器。mouseClicked 中获取鼠标点击的位置和点击的次数。mousePressed 方法获得鼠标按下的坐标,并将坐标值显示在状态栏中。 第一种方法所使用的 URL必须是包含图像文件名的绝对 URL,所以本处不能填使用文件名作参数。采用第二种获得图像的方式时,如果图像和
19、Applet在同一文件夹可使用 getCodeBase()获得相应的 URL,当图像和 Applet 所属的 HTML文件在同一文件夹时,可以采用getDocumentBase()获得相应的 URL。所以第一个错误可以改为 getDocument Base(),也可以改为getCodeBase()。 第二处错误,Graphics 对象作图时,可以使用 clearRect()方法清除某一个区域的图形,而 fillRect()方法只是根据当前颜色(本题中为黑色)画出一个实心矩形。在程序要求 Applet绘制图形时,只能调用 repaint()方法,此方法会自动调用 paint()方法。故第三个错误应该改成 repaint()方法。