1、二级 JAVA机试 5及答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.下列程序中,要求输出一个特定文件(这里是 ex2_1.java)的相关信息,包括文件的名字,相对路径以及文件的长度。请将程序补充完整。 程序运行结果如下: name:ex2_1.java path:ex2_1.java length: 299 import java.io.*; public class ex2_1 public static void main(String args) File file2_1 = new File(“ex2_1.java“)
2、; System.out.println(“name:“+file2_1._ ); System.out.println(“path:“+file2_1._ ); System.out.println(“length:“+file2_1._ ); (分数:30.00)_二、B2简单应用题/B(总题数:1,分数:40.00)2.请完成下列 Java程序:运行 3个线程,每一个线程有自己的标志,用 a,b,c 表示,每个线程显示一个“Start”信息和一个“End”信息并且间隔地显示 2个“Loop”信息(间隔变化为(0.5-2)秒之间的随机延迟)。 程序运行结果如下:(注:由于时间间隔为随机数,
3、所以,运行结果的顺序不惟一) a Start b Start c Start b Loop a Loop b Loop b End c Loop a Loop a End c Loop c End 注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 public class ex2_2 implements Runnable static char flag2_2 = a; public static void main(String arg) ex2_2 obj2_2 = new ex2_2(); Thread thread2_2 = new Thread(ob
4、i2_2); thread2_2.start(); thread2_2 = new Thread(obj2_2); thread2 2.start(); thread2_2 = new Thread(obi2_2); thread2_2.start ( ); public void run() char myflag2_2; synchronized(this) _; System.out.println(myflag2_2 +“ Start“); for(int i=0; i2; i+) try Thread.sleep(rand(500,2000); System.out.println(
5、myflag2_2 +“ Loop“); catch(InterruptedException ie) System.out.println(ie); System.out.println(myflag2_2 +“ End“); final private int rand(int low, int high) return(_); (分数:40.00)_三、B3综合应用题/B(总题数:1,分数:30.00)3.下面是一个 Applet程序,其功能是有 2个按钮,分别为 First和 Second,以及一个 Labe1构件。要求点击 First时则能在 Labe1 中显示出 Command:F
6、irst,而点击 Second时则能显示出 Command:Second,要求只能使用重载一次 actionPerformed()方法。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 程序运行结果如下: (分数:30.00)_二级 JAVA机试 5答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.下列程序中,要求输出一个特定文件(这里是 ex2_1.java)的相关信息,包括文件的名字,相对路径以及文件的长度。请将程序补充完整。 程序运行结果如下: name:ex2_1.jav
7、a path:ex2_1.java length: 299 import java.io.*; public class ex2_1 public static void main(String args) File file2_1 = new File(“ex2_1.java“); System.out.println(“name:“+file2_1._ ); System.out.println(“path:“+file2_1._ ); System.out.println(“length:“+file2_1._ ); (分数:30.00)_正确答案:()解析:getName() getP
8、ath() length() 解析 本题主要考查 Java文件以及 Java类库中的 File类的常用方法。解题关键是熟记 Java的 File类的常用方法:getName(), getPath(),length()等。在本题中,这 3个空分别对应填入这 3个方法即可。二、B2简单应用题/B(总题数:1,分数:40.00)2.请完成下列 Java程序:运行 3个线程,每一个线程有自己的标志,用 a,b,c 表示,每个线程显示一个“Start”信息和一个“End”信息并且间隔地显示 2个“Loop”信息(间隔变化为(0.5-2)秒之间的随机延迟)。 程序运行结果如下:(注:由于时间间隔为随机数,
9、所以,运行结果的顺序不惟一) a Start b Start c Start b Loop a Loop b Loop b End c Loop a Loop a End c Loop c End 注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 public class ex2_2 implements Runnable static char flag2_2 = a; public static void main(String arg) ex2_2 obj2_2 = new ex2_2(); Thread thread2_2 = new Thread(ob
10、i2_2); thread2_2.start(); thread2_2 = new Thread(obj2_2); thread2 2.start(); thread2_2 = new Thread(obi2_2); thread2_2.start ( ); public void run() char myflag2_2; synchronized(this) _; System.out.println(myflag2_2 +“ Start“); for(int i=0; i2; i+) try Thread.sleep(rand(500,2000); System.out.println(
11、myflag2_2 +“ Loop“); catch(InterruptedException ie) System.out.println(ie); System.out.println(myflag2_2 +“ End“); final private int rand(int low, int high) return(_); (分数:40.00)_正确答案:()解析:myflag2_2 = flag2_2+ (int)(high-low+1)*(Math.random()+low 解析 本题主要考查线程的创建与同步和控制随机数产生范围的算法。解题关键是,熟悉线程的概念和使用,线程的同步
12、控制, char类型数据的操作,以及熟悉随机数产生的方法 Math.random(),并且能够进一步根据需要控制随机数产生的范围。在本题中,main()方法中创建 3个线程,这 3个线程使用 obj2_2对象。线程调用 start()方法来中断,使一个新的线程开始执行,并且调用 run()方法。第 1空,run()方法为自己设置一个线程的标志,并为下一个线程的使用增加这个标志值,由于此时线程正在处理中,因此在同步块中完成修改标志的语句放在同步块中。第 2个空,通过 low和 high两个参数,控制产生随机数的范围,将基本的数学思想应用于程序设计中。三、B3综合应用题/B(总题数:1,分数:30
13、.00)3.下面是一个 Applet程序,其功能是有 2个按钮,分别为 First和 Second,以及一个 Labe1构件。要求点击 First时则能在 Labe1 中显示出 Command:First,而点击 Second时则能显示出 Command:Second,要求只能使用重载一次 actionPerformed()方法。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 程序运行结果如下: (分数:30.00)_正确答案:()解析:btn.addActionListener(this) btn.setActionCommand(“
14、second“) 1setText(str) 解析 本题主要考查 Java语言中高级事件 ActionEvent和 AWT基本构件 Label的常用方法的使用。解题关键是熟练掌握动作事件 ActionEvent和 Label构件的常用方法。在本题中,第 1处,明确注册的事件监听器是监听按钮的,而不是 Label的;第 2 处,调用 ActionEvent的 setActionCommand()方法改变了ActionCommand,使按下第二个按钮时显示 Command:second 而不是 Command:First。第 3处,调用Label的 setText()方法,而不是 Button的方法。