1、二级 JAVA机试 95及答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.如下程序在编译时出错,请改正程序中的错误,使之顺利通过编译和运行。 注意:不改动程序结构,不得增行或删行。 class SubClass extends BaseClass class BaseClass String str; public BaseClass() SyStem.out.println(“good“); public BasecClass(String s) str=s; public class ConstructTest1 public
2、static void main(String args) USubClass s=new SubClass(“hi“);/U BaseClass b=new BaseClass(“Java“); (分数:30.00)_二、B2简单应用题/B(总题数:1,分数:40.00)2.请完成下列 Java程序:运行 3个线程有自己的标志,用 a,b,c表示,每个线程显示一个“Start”信息和一个“End”信息并且间隔地显示 2个“Loop”信息(间隔变化为 0.52 秒之间的随机延迟)。 程序运行结果如下(注:由于事件间隔为随机数,所以,运行结果的顺序不唯一): a Start b Start c
3、Start b Loop a Loop b Loop b End c Loop a Loop a End c Loop c End 注意:请勿改动 main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 public class ex5_2 implements Runnable static char flag5_2=a; public static void main(String args) ex5_2 obj5_2=new ex5_2(); Thread thread5_2=new Thread(obj5_2); Thread5_2.start(); thread5_2=n
4、ew Thread(obj2_2); thread5_2.start(); thread5_2=new Thread(obj2_2); thread5_2.start(); public void run() char myflag5_2; synchronized(this) _; System.out.println(myflag5_2+“Start“); for(int i=0;i2;i+) try Thread.sleep(rand(500,2000); System.out.println(myflag5_2+“Loop“); catch(InterruptedException i
5、e) System.out.println(ie); System.out.println(myflag5_2+“End“); final private iht rand(int low,int high) return(_); (分数:40.00)_三、B3综合应用题/B(总题数:1,分数:30.00)3.现有磁盘文件 filea.txt和 fileb.txt,各存放一行字母,上述程序实现了将 2个磁盘文件中的内容合并,并按照字母的升序排列,存放到一个新的文件 new.txt中。请将程序补充完整。 注意:不改动程序结构,不得增行或删行。 package ch3; import java.u
6、til.*; import java.io*; public class ex3 public static void main(String args) String s=“; try RandomAccessFile f1= new RandomAccessFile(“ch3/filea.txt“,“rw“); _f2=new _(“ch3/fileb.txt“,“rw“); s=f1.readLine()+f2.readLine(); char c=s.toCharArray(); Arrays.sort(c); _Out=new_(“ch3/new.txt“); for(int i=0
7、;ic.length;i+) Out._(ci); out._; f1.close(); f2.close(); catch(I0Exception ioe) ioe.printStackTrace(); (分数:30.00)_二级 JAVA机试 95答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.如下程序在编译时出错,请改正程序中的错误,使之顺利通过编译和运行。 注意:不改动程序结构,不得增行或删行。 class SubClass extends BaseClass class BaseClass String str; publ
8、ic BaseClass() SyStem.out.println(“good“); public BasecClass(String s) str=s; public class ConstructTest1 public static void main(String args) USubClass s=new SubClass(“hi“);/U BaseClass b=new BaseClass(“Java“); (分数:30.00)_正确答案:()解析:改为 SubClass=new SubClass(); 讲解 本题是考查对类构造函数的理解。当一个类中未显示定义构造函数时,默认的构造
9、函数是以类名为函数名,参数为空,函数体为空。虽然父类中的某一构造函数有字符串参数 s,但是,子类继承父类时,并不继承构造函数,所以它只能使用默认构造函数。二、B2简单应用题/B(总题数:1,分数:40.00)2.请完成下列 Java程序:运行 3个线程有自己的标志,用 a,b,c表示,每个线程显示一个“Start”信息和一个“End”信息并且间隔地显示 2个“Loop”信息(间隔变化为 0.52 秒之间的随机延迟)。 程序运行结果如下(注:由于事件间隔为随机数,所以,运行结果的顺序不唯一): a Start b Start c Start b Loop a Loop b Loop b End
10、c Loop a Loop a End c Loop c End 注意:请勿改动 main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 public class ex5_2 implements Runnable static char flag5_2=a; public static void main(String args) ex5_2 obj5_2=new ex5_2(); Thread thread5_2=new Thread(obj5_2); Thread5_2.start(); thread5_2=new Thread(obj2_2); thread5_2.star
11、t(); thread5_2=new Thread(obj2_2); thread5_2.start(); public void run() char myflag5_2; synchronized(this) _; System.out.println(myflag5_2+“Start“); for(int i=0;i2;i+) try Thread.sleep(rand(500,2000); System.out.println(myflag5_2+“Loop“); catch(InterruptedException ie) System.out.println(ie); System
12、.out.println(myflag5_2+“End“); final private iht rand(int low,int high) return(_); (分数:40.00)_正确答案:()解析:myflag5_2=flag5_2+ (int)(high-low+1)*(Math.random()+low 讲解 本题主要考查线程的创建与同步和控制随机数产生范围的算法。解题关键是,熟悉线程的概念和使用、线程的同步控制、char类型数据的操作,以及熟悉随机数产生的方法 Math.random(),并且能够进一步根据需要控制随机数产生的范围。在本题中,main()方法中创建 3个线程,这
13、 3个线程使用。obj5_2 对象。线程调用start()方法来中断,使一个新的线程开始执行,并且调用 run()方法。第 1个空,run()方法为自己设置一个线程的标志,并为下一个线程的使用增加这个标志值,由于此时线程正在处理中,因此在同步块中完成修改标志的语句放在同步块中。第 2个空,通过 low和 high两个参数,控制产生随机数的范围,将基本的数学思想应用于程序设计中。三、B3综合应用题/B(总题数:1,分数:30.00)3.现有磁盘文件 filea.txt和 fileb.txt,各存放一行字母,上述程序实现了将 2个磁盘文件中的内容合并,并按照字母的升序排列,存放到一个新的文件 ne
14、w.txt中。请将程序补充完整。 注意:不改动程序结构,不得增行或删行。 package ch3; import java.util.*; import java.io*; public class ex3 public static void main(String args) String s=“; try RandomAccessFile f1= new RandomAccessFile(“ch3/filea.txt“,“rw“); _f2=new _(“ch3/fileb.txt“,“rw“); s=f1.readLine()+f2.readLine(); char c=s.toCha
15、rArray(); Arrays.sort(c); _Out=new_(“ch3/new.txt“); for(int i=0;ic.length;i+) Out._(ci); out._; f1.close(); f2.close(); catch(I0Exception ioe) ioe.printStackTrace(); (分数:30.00)_正确答案:()解析:RandomAccessFile RandomAccessFile FileOutputStream PileOutputStream write close 讲解 本题是考查对文件输出流及其常用方法的理解。输入流采用了 RandomAccessFile类,输出流采用了FileOutputStream,存放到新的文件要调用 write方法,最后完成文件的读写操作时,相应的对象需要关闭自己所关联的文件。6 个空的答案分别是RandomAccessFile、RandomAccessFile、FileOutputStream、FileOutputStream、write 和 close.