1、二级 JAVA 机试-223 及答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.下列程序中,给出两个整数 2 和 3,分别求 2 除以 3 和 2 乘以 3 的结果,要求调用类 ex19_1 的方法method()来输出相应的结果,请将程序补充完整。程序运行结果如下。0.66666666666666666源程序文件代码清单如下:public class exl9 1public static void main(String args)int n1=2,n2=3;ex19_1 obj19_1=new ex19_1();obj19_1.pu
2、blic void method(int x,int y)System.out.println(_);System.out.println(_);(分数:30.00)_二、2简单应用题(总题数:1,分数:40.00)2.请完成下列 Java 程序:用 JFrame 建立个窗口,再用网格布局管理器,对窗口布局进行控制,上面有2 行 2 列 4 个按钮,要求对按钮的大小进行设定,宽度为 150,高度为 80。注意:请勿改动 main 主方法和其他已有语句内容,仅在下划线处填入适当的语句。源程序文件代码清单如下import java.awt.*;import java.awt.event.*;imp
3、ort javax.swing.*;public class ex19_2public static void main(String args)JFrame frm=new JFrame();frm.setTitle(“ex19_2“);Container cont=frm.getContentPane();_;cont.add(new JButton(“button1“);cont.add(new JButton(“button2 “);Dimension dimen=_;JButton btn1=new JButton(“button3“);btn1.setPreferredSize(d
4、imen);cont.add(btn1);cont.add(new JButton(“button4“);frm.addWindowListener(new WindowAdapter()public void winowClosing(WindowEvent we)System.exit(0););frm.pack();frm.setVisible(true);(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)3.下面是一个 Applet 程序,其功能是实现一个计数器,每隔 0.15 秒计数器数值加 1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用 Swin
5、g 的构件建立图形用户界面。主要包括一个文本区域,用于显示计数器结果:两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。注意:不改动程序的结构,不得增行或删行。源程序文件代码清单如下。import javax.swing.*;import java.awt.*;import java.awt.event.*;/*applet code=“ex19_3.class“ width=800 height=400/applet*/public class ex19_3 extends JAppletprivate JTextField jt
6、f=new JTextField(15);private JButton Hold=new JButton(“Hold“);private JButton resume=new JButton(“Resume“);private ex19_3th obj19_3th=new ex19_3th();class ex19_3th extends Threadprivate int cnt=0;private boolean bIsHold=false;public ex19_3th() start();public void hold()bIsHold=true;public synchroniz
7、ed void fauxResume()bIsHold=false;wait ();public void run()while (true)try sleep(150);synchronized(this)while(bIsHold)notify();catch(InterruptedException ie)System.err.println(“Interrupted“);jtf.setText(cnt);public void init()Container cp=getContentPane();cp.setLayout(new FlowLayout();cp.add(jtf);Ho
8、ld.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ae)obj19_3th.hold ( ););cp.add(Hold);resume.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)obj19_3th.fauxResume(););cp.add(resume);public static void main(String args)ex19_3 obj19_3=new
9、ex19_3();String str= obj19_3.getClass().toString();if(str.indexOf(“class“) !=-1)str=str.substring(6);JFrame frm=new JFrame(str);frm.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent we)System.exit(0););frm.getContentPane().add(obj19_3);frm.setSize(300, 200);obj19_3.init();ob
10、j19_3.start);frm.setVisible(true);ex19_3.htmlHTMLHEADTITLEex19_3/TITLE/HEADBODYapplet code=“ex19_3.class“ width=800 height=400/applet/BODY/HTML(分数:30.00)_二级 JAVA 机试-223 答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.下列程序中,给出两个整数 2 和 3,分别求 2 除以 3 和 2 乘以 3 的结果,要求调用类 ex19_1 的方法method()来输出相应的结果,请将程
11、序补充完整。程序运行结果如下。0.66666666666666666源程序文件代码清单如下:public class exl9 1public static void main(String args)int n1=2,n2=3;ex19_1 obj19_1=new ex19_1();obj19_1.public void method(int x,int y)System.out.println(_);System.out.println(_);(分数:30.00)_正确答案:(method(n1,n2)(double)x/yx*y)解析:解析 本题主要考查 Java 语言的数据类型和结构以
12、及不同数据类型之间的转换,和对象调用方法以及基本的运算操作。解题关键是熟悉 Java 语言的基本数据类型和类型之间的转换,用类的对象来调用方法,以及熟悉 Java 语言的基本运算。在本题中,第 1 空通过类 ex19_1 的对象 obj19_1 调用类 ex19_1的方法 method(),将变量 n1 和 n2 作为参数传递给方法。第 2 空由于 x、y 都是 int 型,则 x/y 的结果为0.666,这会转换为 int 型,其值为 0。所以要对数据进行类型转换,将 x 转换为 double 型则 y 也转换为 double 型,因此结果为 double 型,值为 0.666。第 3 空无
13、须做类型转换,直接输出 x*y 的值 6 即可。二、2简单应用题(总题数:1,分数:40.00)2.请完成下列 Java 程序:用 JFrame 建立个窗口,再用网格布局管理器,对窗口布局进行控制,上面有2 行 2 列 4 个按钮,要求对按钮的大小进行设定,宽度为 150,高度为 80。注意:请勿改动 main 主方法和其他已有语句内容,仅在下划线处填入适当的语句。源程序文件代码清单如下import java.awt.*;import java.awt.event.*;import javax.swing.*;public class ex19_2public static void main
14、(String args)JFrame frm=new JFrame();frm.setTitle(“ex19_2“);Container cont=frm.getContentPane();_;cont.add(new JButton(“button1“);cont.add(new JButton(“button2 “);Dimension dimen=_;JButton btn1=new JButton(“button3“);btn1.setPreferredSize(dimen);cont.add(btn1);cont.add(new JButton(“button4“);frm.add
15、WindowListener(new WindowAdapter()public void winowClosing(WindowEvent we)System.exit(0););frm.pack();frm.setVisible(true);(分数:40.00)_正确答案:(cont.setLayout(new GridLayout(2,2)new Dimension(150,80)解析:解析 本题主要考查网格布局管理器 (GridLayout)在使用 Swing 制作图形用户界面时的一些简单应用。解题关键是熟悉 GridLayout 的使用方法,初始化的方法是通过容器 Container
16、 的对象调用setLayout()方法实现的,而它的一些特点,如并不会保持当初组件所定义的大小等,也需要很熟悉。本题中,第 1 个空,采用初始化 Dimension 类的对象来给出 Button 组件的初始大小,参数分别是宽度和高度;第 2 个空,将容器通过网格布局管理器设置为 2 行 2 列。程序运行结果如下。三、3综合应用题(总题数:1,分数:30.00)3.下面是一个 Applet 程序,其功能是实现一个计数器,每隔 0.15 秒计数器数值加 1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用 Swing 的构件建立图形用户界面。主要包括一个文本区域,用于显示计数器结果:两个
17、按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。注意:不改动程序的结构,不得增行或删行。源程序文件代码清单如下。import javax.swing.*;import java.awt.*;import java.awt.event.*;/*applet code=“ex19_3.class“ width=800 height=400/applet*/public class ex19_3 extends JAppletprivate JTextField jtf=new JTextField(15);private JButton
18、Hold=new JButton(“Hold“);private JButton resume=new JButton(“Resume“);private ex19_3th obj19_3th=new ex19_3th();class ex19_3th extends Threadprivate int cnt=0;private boolean bIsHold=false;public ex19_3th() start();public void hold()bIsHold=true;public synchronized void fauxResume()bIsHold=false;wai
19、t ();public void run()while (true)try sleep(150);synchronized(this)while(bIsHold)notify();catch(InterruptedException ie)System.err.println(“Interrupted“);jtf.setText(cnt);public void init()Container cp=getContentPane();cp.setLayout(new FlowLayout();cp.add(jtf);Hold.addActionListener(new ActionListen
20、er()public void actionPerformed(ActionEvent ae)obj19_3th.hold ( ););cp.add(Hold);resume.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)obj19_3th.fauxResume(););cp.add(resume);public static void main(String args)ex19_3 obj19_3=new ex19_3();String str= obj19_3.getClass
21、().toString();if(str.indexOf(“class“) !=-1)str=str.substring(6);JFrame frm=new JFrame(str);frm.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent we)System.exit(0););frm.getContentPane().add(obj19_3);frm.setSize(300, 200);obj19_3.init();obj19_3.start);frm.setVisible(true);ex1
22、9_3.htmlHTMLHEADTITLEex19_3/TITLE/HEADBODYapplet code=“ex19_3.class“ width=800 height=400/applet/BODY/HTML(分数:30.00)_正确答案:(notify()wait()jtf.setText.(Integer.toString(cnt+)解析:解析 本题主要考查图形用户界面,Swing 以及线程同步、共享、死锁相结合的综合应用。解题关键是熟悉 wait()方法和 notify()方法的含义,wait()必须被声明为 synchronized,这样它才能拥有对象锁。fauxResume()把 bIsHold 标志设为 false,并调用 notify(),为了唤醒 synchronized 子句中的wait(),notify()也必须被声明为 synchronized,这样才能在调用 notify()之前获得对象锁,然后该对象锁才能在 wait()执行时被运用。本题中,第 1 和第 2 处,应该在 bIsHold 为 true 时调用 wait(),而在 fauxResume()中调用 notify();第 3 处,需要对 int 类型做转换才能够作为 String 类型输出,并且要对计数器变量 cnt 做累加。程序运行结果如下。