1、国家二级( JAVA)机试模拟试卷 66及答案与解析 一、基本操作题( 30分) 1 下列程序中,要求按照从小到大的顺序输出 1 100之间所有能被 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(); 二、简单应用题( 40分) 2 请完成下面的
2、程序:实现一个可以每秒跳动的时钟。运行如下图所示。请填写横线处的内容。 注意:请勿改动 main主方法和其他 已有语句内容,仅在下划线处填入适当的语句。 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class Example2_12 extends JFrame (1) implements Runnable Thread thread1; Color handColor; Color numberColor; JLabel jlabell = new
3、JLabel(); public Example2_12() enableEvents(AWTEvent.WINDOW_EVENT_MASK); try getContentPane().add(jlabell, BorderLayout. SOUTH); catch (Exception e) System.out.println(e.getMessage(); public static void main(String args) Example2 12_clock1 = new Example2_12(); clock1.init(); clock1.start(); clock1.s
4、etSize(260, 230); clock1.setResizable(false); clock1.show(); public void init() int x, y; handColor = Color.blue; numberColor = Color.darkGray; setBackground(Color.white); public void paint (Graphics g) int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xpoint, ypoint; String today; Calendar c1 = _;
5、 s = c1.get(Calendar.SECOND); m = c1.get(Calendar.MINUTE); h = c1.get(Calendar.HOUR); int day, month, year, weekday; day = c1.get(Calendar.DATE); month = c1.get(Calendar.MONTH) + 1; year = c1. get (Calendar. YEAR); weekday = c1.get (Calendar. DAY_OF_WEEK); jlabell.setText(“Today is “+ year + “/“ + m
6、onth + “/“ + day + “/ “+ “Time:“ + h + “:“ + m + “:“ + s); xpoint = 130; ypoint = 100; xs =(int) (Math.cos(s * 3.14f / 30 - 3.14f / 2) * 45 + xpoint); ys =(int) (Math.sin(s * 3.14f / 30 - 3.14f / 2) * 45 + ypoint); xm =(int) (Math.cos (m * 3.14f / 30 - 3.14f / 2) * 40 + xpoint); ym =(int) (Math.sin(
7、m * 3.14f / 30 - 3.14f / 2) * 40 + ypoint); xh =(int) (Math.cos( (h * 30 + m / 2) * 3.14f / 180 - 3.14f / 2) * 30 + xpoint); yh =(int) (Math.sin( (h * 30 + m / 2) * 3.14f / 180 - 3.14f / 2) * 30 + ypoint); g.setColor (handColor); g.clearRect(0, 0, 260, 200); g.drawOval(xpoint / 2 + 10, ypoint / 2 -
8、5, 110, 110); g.setColor(numberColor); g.drawString(“9“, xpoint - 45, ypoint + 3); g.drawString(“3“, xpoint + 40, ypoint + 3); g.drawString(“12“, xpoint - 5, ypoint - 37); g.drawString(“6“, xpoint - 3, ypoint + 45); g.setColor(getBackground ( ) ); g.setColor(numberColor); g.drawString(“ “, 5, 125);
9、g.drawLine(xpoint, ypoint, xs, ys); g.setColor(handColor); g.drawLine(xpoint, ypoint, xm, ym); g.drawLine(xpoint, ypoint, xh, xh); public void start() thread1 = new Thread(this); thread1. _; public void stop () thread1=null; public void update (Graphics g) paint (g); public void run () Thread me = T
10、hread. currentThread (); while (thread1 = me) try Thread. currentThread ( ) . sleep ( 100 ); catch (InterruptedException e) e.printStackTrace(); repaint ( ); protected void processWindowEvent(WindowEvent e) super.processWindowEvent(e); if (e.getID() = WindowEvent.WINDOW_CLOSING) System.exit(0); 三、综合
11、应用题( 30分) 3 下面程序是一个计时器,从 1000秒开始倒计时,直到为 0结束。在界面上有两个按钮,一个可以暂停计时,另一个可以继续已经暂停的计时。请更正题中带下划线的部分。 注意:不改动程序的结构,不得增行或删行 import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class Example3_4 extends Applet public Color color = Color.red; private int num= 1000; public Counter theCount
12、er; private Button stop; private Button start; public void init() stop = new Button(“暂停 “); start = new Button (“继续 “); theCounter = new Counter(this); stop.addActionListener(new Lst() implements ActionListener public void actionPerformed(ActionEvent e) theCounter.sus(); ); start.addActionListener(n
13、ew SuspenListener(); add(start); add(stop); theCounter.start(); public void paint(Graphics g) g.setCotor(color); g.drawString(String.valueOf(num),50,50); public void setInt(int i) num=i; class SuspenListener implements ActionListener public void actionPerformed(ActionEvent e) theCounter.conti (); pu
14、blic class Counter extends Thread Example3_4 example; boolean isHold; Counter (Example3_4 ex) this.example = ex; isHold = false; public void sus() isHold = true; public synchronized void conti() isHold = false; notify(); public void run() for (int i = 1000; i 0; i-) if (i%2 = 1) example.color = Colo
15、r.red; else example.color = Color.blue; example.setInt(i); example.repaint(); try sleep(1000); synchronized while(isHold) wait ( ); catch (InterruptedException ie) HTML HEAD TITLE Example3_4 /TITLE /HEAD BODY applet code=“Example3_4.class“ width=300 height=400 /applet /BODY /HTML 国家二级( JAVA)机试模拟试卷 6
16、6答案与解析 一、基本操作题( 30分) 1 【正确答案】 do i 7=0 i+;或者 i=i+1;或者 i+=1; 【试题解析】 本题主要考查 Java编程的流程控制。 Java语言中的流程控制主要是通过循环、分支和跳转三种语句来实现的。在解这类题型的时候,首先要分清楚题中要考查的语句类型,比如本题考查了考生对 do-while循环的掌握情况;然后,再根据对应的类型,看题中的语句结构是否完整。题中变量 i从 1循环增加到99,每一个数字模 7,如果余数为 0就认为这是一个可以被 7整除的数。 本题中, do-while循环缺少了 “do”这个循环开始语句,因此第一个空需要填写“do”以使循
17、环体完整;最后也是最重要的,循环一定要保证能够 正常结束,许多编程经验丰富的人也会因为一时大意而写出死循环来,这样的错误一定要避免。 第二个空就是使 i值顺序增加,直到 i=100时程序退出循环。 本题中还考查了考生对条件分支语句的掌握,即 if语句。在解条件分支语句的题的时候,首先要找出需要满足的条件是什么,需要通过分支语句分流的条件是什么。比如题中要求能被 7整除,所谓整除就是余数为 0,这样我们就知道,分支条件就是余数值是否为 0,则第二个空应该填写 “i 7=0”。 二、简单应用题( 40分) 2 【正确答案】 Calendar.getInstance() start() 【试题解析】
18、 本题主要考查线程和日历类的知识。在图形程序处理中,经常会用到多线程。使用多线程的类必须实现 Runnable,接口, Thread类已经实现了Runnable接口,其子类自动实现了此类。要开始一个线程,应调用该类的 start方法 (第 2个空 )。这时 Java会自动开始在该线程中调用该类的 run方法。另外,在Java中,有的类只能有一个实例,不能创建它的多个实例对象。这在设计模式中叫做 Singleton(单例 )模式。 Calendar类就是这样的类,它只能通过 getInstance方法得到这个实例对象 (第 1个空 )。 三、综合应用题( 30分) 3 【正确答案】 stop.a
19、ddActionListener(new ActionListener() class Counter extends Thread synchronized(this) 【试题解析】 本程序使用线程类 “Counter”来实现计时的功能,该线程的线程体每1000毫秒循环一次,并在每次循环的开始显示剩余的时间。计时器的暂停和继续通过线程的同步与共享来完成,每次循环结束时,判断标志暂停的变量 “isHold”是否为真,如果为真则进入挂起状态。当用户按下 “暂停 ”按钮,程序调用 Counter类的 sus()方法,将变量 “isHold”设为真。当用户按下 “继续 ”按钮,程序调用Counter
20、类的 conti()方法,将变量 “isHold”设为假,并使用 notify()取消线程的挂起状态。本题第 1个错误是考查对匿名类的使用。匿名类是 Java语言中比较特殊的一种类,这种类不存在类名,而且只能在声明的时候被实例化一次。匿名类必须继承于一个父类或实现一个接口。第 1条横线处,原程序打算声明一个新类 Lst实现 ActionListener接口,并同时实例化一个新对象。但是只有匿名类才能在声明时创建一个新的类对象。因此此处应改用匿名类实现程序的目的。第 2个错误处考查 Java源程序的结构。任何一个 “java”文件中有且只有一个被声明为 public的类,这个类的名字必须与 “java”文件的文件名相同。因此在第 2个错误位置处必须去掉 public声明。 synchronized用来定义一个同步块。 synchronized的定义格式是synchronized (expression)statement, expression是对象或类的 名字,系统将为该对象设置唯一的锁; statement可以是一个方法定义,也可以是一个语句块,在同一时刻只能有一个线程执行这个块中的操作。因此第 3个错误处必须指明同步的对象,本题中的同步对象是当前的 Counter实例。运行结果如下图所示。