1、计算机二级 JAVA-38 及答案解析(总分:71.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:1.00)1.下面的程序的功能是将数组 array 下标为奇数的元素相乘(数组的位置是从 0 开始的),并将乘积存放到变量 total 中。请在程序的每条横线处填入适当的语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 public class JiShuJi public static void main(String args ) int array =1,2,3,5,7,9; long total= _; f
2、or(int i=1;i=_ i+) _ i+; System.out.println(total); (分数:1.00)_二、B2简单应用题/B(总题数:1,分数:40.00)2.在程序中,DataPool 是一个数据池,能存放一个血型数据,线程 a 和线程 b 负责向其中存放数据,一次只能有一个线程向其中存放数据,数据放入 DataPool 以后,该线程随机休眠一段时间,让另外一个线程运行,请将程序补充完整。 注意:请勿修改 main()主方法和其他已有语句内容,仅在横线处填入适当语句。 class PutData extends Thread DataPool s; int c; Str
3、ing name; public PutData(DataPool s,String name) this.s=s; this.name=name; public void run() for(int i=0;i10000000;i+) c=(int)(Math.random()*10); s.setData(c); System.out.println(name+“:push“+c); try _(int) (Math.random()*1000);/休眠 catch(InterruptedException e) class DataPool private int data=0; pub
4、lic _void setData(int d) data=d; public class simple public static void main(String args) DataPool s=new DataPool(); PutData a=new PutData(s,“Thread a“); PutData b=new PutData(s,“Thread b“); a.start(); b.start(); (分数:40.00)_三、B3综合应用题/B(总题数:1,分数:30.00)3.在以下程序中,鼠标单击小应用程序的某一点,则会在该点显示一个图标,如果双击,则会清除该图标。且
5、在浏览器的状态栏上会显示鼠标单击位置的坐标。运行结果如下图所示。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 (分数:30.00)_计算机二级 JAVA-38 答案解析(总分:71.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:1.00)1.下面的程序的功能是将数组 array 下标为奇数的元素相乘(数组的位置是从 0 开始的),并将乘积存放到变量 total 中。请在程序的每条横线处填入适当的语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 public class JiShuJi publ
6、ic static void main(String args ) int array =1,2,3,5,7,9; long total= _; for(int i=1;i=_ i+) _ i+; System.out.println(total); (分数:1.00)_正确答案:(1 arraylength-1; total*=arrayi;)解析:解析 本题主要考查 for 循环语句和数组的知识。解答本题的关键是熟练掌握 for 循环语句和数组的知识。一个 for 循环语句一般应包含 4 部分内容:(1)初始化部分:用来设置循环控制的一些初始条件,如设置计数器等。(2)循环体部分:这是反复
7、执行的一段代码,可以是单一的一条语句,也可以是复合语句(代码块)。(3)迭代部分:用来修改循环控制条件。常常在本次循环结束,下一次循环开始前执行。例如,使计数器递增或递减。(4)判断部分:也称终止部分。是一个关系表达式或布尔逻辑表达式,其值用来判断是否满足循环终止条件。每执行一次循环都要对该表达式求值。解答循环语句题要抓住这四个部分。二、B2简单应用题/B(总题数:1,分数:40.00)2.在程序中,DataPool 是一个数据池,能存放一个血型数据,线程 a 和线程 b 负责向其中存放数据,一次只能有一个线程向其中存放数据,数据放入 DataPool 以后,该线程随机休眠一段时间,让另外一个
8、线程运行,请将程序补充完整。 注意:请勿修改 main()主方法和其他已有语句内容,仅在横线处填入适当语句。 class PutData extends Thread DataPool s; int c; String name; public PutData(DataPool s,String name) this.s=s; this.name=name; public void run() for(int i=0;i10000000;i+) c=(int)(Math.random()*10); s.setData(c); System.out.println(name+“:push“+c)
9、; try _(int) (Math.random()*1000);/休眠 catch(InterruptedException e) class DataPool private int data=0; public _void setData(int d) data=d; public class simple public static void main(String args) DataPool s=new DataPool(); PutData a=new PutData(s,“Thread a“); PutData b=new PutData(s,“Thread b“); a.s
10、tart(); b.start(); (分数:40.00)_正确答案:(sleep synchronized)解析:解析 本题考查知识点:线程的要领和使用、线程的同步和共享。解题思路:线程类 Thread 提供了一系列控制线程的方法,让线程休眠,就是其中的一种。本题中定义了 PutData 的两个实例 a 和b。PutData 的 run 方法中,利用一个循环向 DataPool 中存放 10000000 个随机数据,每存放一个数据以后休眠一段时间,让其他线程运行。第 1 个空,让线程休眠使用的方法是 sleep()。该方法使线程暂停运行一段时间,在这段时间内线程不会抢占 CPU 资源,为其他
11、线程的运行提供了机会。本题的第 2 个空是考查线程的同步和互斥的问题,当线程 A 和线程 B 都调用 setData 方法改变 data 数值时,在同一段时间内,只能允许一个线程进行操作,这就需要两个线程之间互斥访问 setData()方法。synchronized 允许线程独占地存取对象,当 synchronized 声明的程序块已经被一个线程占用,其他线程就必须等待该线程放弃这个程序块的控制权以后才能对其进行访问。因此,第 2 个空需要填写 synchronized。三、B3综合应用题/B(总题数:1,分数:30.00)3.在以下程序中,鼠标单击小应用程序的某一点,则会在该点显示一个图标,
12、如果双击,则会清除该图标。且在浏览器的状态栏上会显示鼠标单击位置的坐标。运行结果如下图所示。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 (分数:30.00)_正确答案:(displayIm=getImage(getDocumentBase(),“ms.jpg“) 第一处也可改作displayIm=getImage(getCodeBase(),“ms.jpg“) g.clearRect(xPoint,yPoint,60,60) repaint()解析:解析 Applet 获得图像有两种方式,一种是 getImage(URL url),另一种是 getImage(URL url
13、, String name)。init()方法用来初始化小应用程序,首先是将图像文件读入内存,然后为小应用程序添加鼠标点击事件。paint()方法向页面绘制图像,题中的 if-else 语句表示用户单击鼠标则在鼠标单击的位置显示图片,用户多次点击鼠标,则清除该点右下方长宽均为 60 的矩形区域内的图像。SClickMouse 实现了鼠标监听器。mouseClicked 中获取鼠标点击的位置和点击的次数。mousePressed 方法获得鼠标按下的坐标,并将坐标值显示在状态栏中。 第一种方法所使用的 URL 必须是包含图像文件名的绝对 URL,所以本处不能填使用文件名作参数。采用第二种获得图像的
14、方式时,如果图像和 Applet 在同一文件夹可使用 getCodeBase()获得相应的 URL,当图像和 Applet 所属的 HTML 文件在同一文件夹时,可以采用getDocumentBase()获得相应的 URL。所以第一个错误可以改为 getDocument Base(),也可以改为getCodeBase()。 第二处错误,Graphics 对象作图时,可以使用 clearRect()方法清除某一个区域的图形,而 fillRect()方法只是根据当前颜色(本题中为黑色)画出一个实心矩形。在程序要求 Applet 绘制图形时,只能调用 repaint()方法,此方法会自动调用 paint()方法。故第三个错误应该改成 repaint()方法。