1、国家二级( JAVA)机试模拟试卷 72及答案与解析 一、基本操作题( 30分) 1 下面的程序是用 do_while语句计算 10的阶乘。请在程序的每条横线处填写一个语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 public class DoWhileLoop public static void main(_) int n=10; long result=1 do _ _ System. out. println(“10的阶乘为 :“+result); 二、简单应用题( 40分) 2 请完成下列 Java程序:运行 3个线程,
2、每一个线程有自己的标志,用 a, b, c表示,每个线程显示一个 “Start”信息和一个 “End”信息并且间隔地显示 2个 “Loop”信息 (间隔变化为 (0.5-2)秒之间的随机延迟 )。 程序运行结果如下: (注:由于时间间隔为随机数,所以 ,运行结果的顺序不惟一 ) 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 Runn
3、able static char flag2_2 = a; public static void main(String arg) ex2_2 obj2_2 = new ex2_2(); Thread thread2_2 = new Thread(obi2_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; synchroni
4、zed(this) _; System.out.println(myflag2_2 +“ Start“); for(int i=0; i 2; i+) try Thread.sleep(rand(500,2000); System.out.println(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(_); 三、综合
5、应用题( 30分) 3 下面是一个 Applet程序,其功能是在绘图区域中通过鼠标的移动来绘制直线,并且有清除绘图区域按钮,用来清除已经绘制的图像。请改正程序中的错误 (有下划线的语句 ),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 程序运行结果如下: import java.awt.*; import java.applet.*; applet code=ex1_3.class width=800 height=400 /applet */ public class ex1_3 extends Applet private Button btn; private bo
6、olean bDraw, bclear; private int upX, upY,downX, downY; public void init() setLayout(null); bclear = false; bDraw = false; btn= new Button(“clear“); btn.reshape(250, 150, 70, 30); add(btn); public void paint(Graphics g) if(bClear) g.clearRect(0, 0, getSize().width, getSize().height); bClear = false;
7、 if(bDraw) g.drawLine(upY, upX, downY, downX); bDraw = false; public void update(Graphics g) paint(g); public boolean mouseDown(Event event, int x, int y) downX = x; downY = y; return true; public boolean mouseUp(Event event, int x, int y) upX = x; upY = y; bDraw = false; repaint(); return true; pub
8、lic boolean action(Event event, Object object) if(event.target!=clear) bclear=true; repaint(); return true; ex1_3 Html HTML HEAD TITLE ex1_3 /TITLE /HEAD BODY applet code=“ ex1_3.class“ width=800 height=400 /applet /BODY /HTML 国家二级( JAVA)机试模拟试卷 72答案与解析 一、基本操作题( 30分) 1 【正确答案】 String args result*=n-;
9、while(n =1); 【试题解析】 本题主要是要求熟练掌握 main()主方法的使用、 while循环语句的用法。在本题中, String args的作用是声明字符数组 args, result *=n-;语句的作用是获得 n的阶乘并赋值给变量 result, while(n =1);语句是循环终止条件。 二、简单应用题( 40分) 2 【正确答案】 myflag2_2 = flag2_2+ (int)(high-low+1)*(Math.random()+low 【试题解析】 本题主要考查线程的创建与同步和控制随机数产生范围的算法。解题关键是,熟悉线程的概念和使用,线程的同步控制, ch
10、ar类型数据的操作,以及熟悉随机数产生的方法 Math.random(),并且能够进一步根据需要控制随机数产生的范围。在本题中, main()方法中创建 3个线程,这 3个线程使用 obj2_2对象。线程调用 start()方法来中断,使一个新的线程开始执行,并且调用 run()方法。第 1空, run()方法为自己设置一个线程的标志,并为下一 个线程的使用增加这个标志值,由于此时线程正在处理中,因此在同步块中完成修改标志的语句放在同步块中。第 2个空,通过 low和 high两个参数,控制产生随机数的范围,将基本的数学思想应用于程序设计中。 三、综合应用题( 30分) 3 【正确答案】 g
11、drawLine(downX, downY, upX, upY) bDraw = true event.target = btn 【试题解析】 本题主要考查 Applet的图形绘制,鼠标事件处理和用户界面的相关知识点以及会使用 boolean类型的变量控制程序的 流程。解题关键是,熟悉Applet的图形绘制,会用 Graphics类的基本绘图方法,例如 drawLine()方法;熟悉鼠标事件处理,并能与图形绘制和用户界面设计相结合做简单的综合应用;掌握一定的程序流程的控制思想。本题中,主要的思想是首先判断用户将鼠标按下与放开的坐标位置,然后使用 drawLine()方法绘制由鼠标按下点到放开点的直线。第 1处,将 drawLine()方法的几个参数颠倒,要明白此方法的几个参数的确切含义才能正确修改。第 2处,将 bDraw变量的值设为 false,这导致程序在调用paint()方法 时不能进入 g.drawLine语句,应改为 true。第 3处,有两个错误:首先要明确 clear是 btn对象显示在用户界面的名称,而不能作为对象来与event.target做比较,因此应改为 btn,这在调试时就会出现变量无法解析的错误;其次,符号 !二应改为符号二二这里要确定点击 btn事件发生才能做清除,否则不能达到预期效果。