1、二级 JAVA机试 99及答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.本程序的功能是,从键盘输入一个整数,存入一个输入流中,然后输出它的两倍值。请将程序补充完整。注意:请勿修改 main()主方法和其他已有语句内容,仅在横线处填入适当语句。 import java.io.*; public class basic public static void main(String args) File dir=new File(“.“); Filter filter=new Filter(“java“); System.out.pri
2、ntln(“list java files in directory“ +dir); String files=dir.list(filter); /列出目录 dir下,文件后缀名为 java的所有文件 for(_;_;i+) File f=new File(dir,filesi); _ (f.isFile() /如果该对象为后缀为 java的文件,则打印文件名 System.out.println(“file“ +f); else System.out.println(“sub directory“ +f); /如果是目录则打印目录名 class Filter implements File
3、nameFilter String extent; Filter(String extent) this.extent=extent; public boolean accept(File dir,String name) return name.endswith(“.“+extent);/返回文件的后缀名 (分数:30.00)_二、B2简单应用题/B(总题数:1,分数:40.00)2.在程序中,DataPool 是一个数据池,能存放一个血型数据,线程 a和线程 b负责向其中存放数据,一次只能有一个线程向其中存放数据,数据放入 DataPool以后,该线程随机休眠一段时间,让另外一个线程运行,
4、请将程序补充完整。 注意:请勿修改 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); try
5、 _(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.start(
6、); b.start(); (分数:40.00)_三、B3综合应用题/B(总题数:1,分数:30.00)3.本程序的功能是监听对于菜单项和工具条按钮的操作。主窗口中有菜单、工具条和一个文字标签,菜单中有“文件”项,“文件”菜单中包括菜单项“新建”、“保存”、“打印”、“页面设置”和“退出”,工具条上包括按钮“新建”、“保存”、“打印”、“页面设置”和“退出”。单击任何一个菜单项或任何一个工具条按钮,文字标签都会显示哪个构件被选中。请更正题中带下划线的部分。运行结果如下图所示。 (分数:30.00)_二级 JAVA机试 99答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/
7、B(总题数:1,分数:30.00)1.本程序的功能是,从键盘输入一个整数,存入一个输入流中,然后输出它的两倍值。请将程序补充完整。注意:请勿修改 main()主方法和其他已有语句内容,仅在横线处填入适当语句。 import java.io.*; public class basic public static void main(String args) File dir=new File(“.“); Filter filter=new Filter(“java“); System.out.println(“list java files in directory“ +dir); String
8、 files=dir.list(filter); /列出目录 dir下,文件后缀名为 java的所有文件 for(_;_;i+) File f=new File(dir,filesi); _ (f.isFile() /如果该对象为后缀为 java的文件,则打印文件名 System.out.println(“file“ +f); else System.out.println(“sub directory“ +f); /如果是目录则打印目录名 class Filter implements FilenameFilter String extent; Filter(String extent) t
9、his.extent=extent; public boolean accept(File dir,String name) return name.endswith(“.“+extent);/返回文件的后缀名 (分数:30.00)_正确答案:()解析:int i=0 ifiles.length if 讲解 本题考查知识点:程序流程控制。这道题虽然是一道读取文件的题,但是考查的却仍然是最基本的循环语句和条件分支语句。第 1个空定义循环的初始条件。第 2个空定义循环结束条件,当循环次数大于 files中包含的文件名的个数时,循环完毕。第 3个空考查 if-else语句的使用。二、B2简单应用题/
10、B(总题数:1,分数:40.00)2.在程序中,DataPool 是一个数据池,能存放一个血型数据,线程 a和线程 b负责向其中存放数据,一次只能有一个线程向其中存放数据,数据放入 DataPool以后,该线程随机休眠一段时间,让另外一个线程运行,请将程序补充完整。 注意:请勿修改 main()主方法和其他已有语句内容,仅在横线处填入适当语句。 class PutData extends Thread DataPool s; int c; String name; public PutData(DataPool s,String name) this.s=s; this.name=name;
11、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; public _void setData(int d) data=d; public class simple public static void mai
12、n(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)_正确答案:()解析:sleep synchronized 讲解 本题考查知识点:线程的要领和使用、线程的同步和共享。解题思路:线程类 Thread提供了一系列控制线程的方法,让线程休眠,就是其中的一种。本题中定义了 PutData的两个实例 a和 b。PutData 的 run方法中,利用一个循环向
13、DataPool中存放 10000000个随机数据,每存放一个数据以后休眠一段时间,让其他线程运行。第 1个空,让线程休眠使用的方法是 sleep()。该方法使线程暂停运行一段时间,在这段时间内线程不会抢占 CPU资源,为其他线程的运行提供了机会。本题的第 2个空是考查线程的同步和互斥的问题,当线程 A和线程 B都调用 setData方法改变 data数值时,在同一段时间内,只能允许一个线程进行操作,这就需要两个线程之间互斥访问 setData()方法。synchronized允许线程独占地存取对象,当 synchronized 声明的程序块已经被一个线程占用,其他线程就必须等待该线程放弃这个
14、程序块的控制权以后才能对其进行访问。因此,第 2个空需要填写synchronized。三、B3综合应用题/B(总题数:1,分数:30.00)3.本程序的功能是监听对于菜单项和工具条按钮的操作。主窗口中有菜单、工具条和一个文字标签,菜单中有“文件”项,“文件”菜单中包括菜单项“新建”、“保存”、“打印”、“页面设置”和“退出”,工具条上包括按钮“新建”、“保存”、“打印”、“页面设置”和“退出”。单击任何一个菜单项或任何一个工具条按钮,文字标签都会显示哪个构件被选中。请更正题中带下划线的部分。运行结果如下图所示。 (分数:30.00)_正确答案:()解析:setTitle(titleText)
15、JMenu file=new JMenu(“文件“) cp.add(tb,BorderLayout.NORTH)或cp.add(“North“,tb) 讲解 本题考查知识点:类的继承、AWT 和 Swing的区别、布局管理器的使用。解题思路:程序中声明了一个菜单构件、一个工具栏构件,声明了 5个事件添加到菜单和工具栏中。子类继承父类以后,可以调用父类的 public、protected 成员变量和成员方法。子类还可以使用变量 super,访问已经被隐藏或被覆盖了的父类成员变量和方法。题中,JFrame 带一个参数的构造方法已经被子类advance的构造方法覆盖。原题打算使用 super调用父类
16、的构造方法,为框架添加变量 titleText定义的名字。这样的操作可以实现,但是 super变量要求必须写在其所在的方法的第一行,而本题中 super变量前还有语句 setDefaultCloseOperation。因此在第 1条下划线的位置不能使用 super,只能调用 set Title()方法,该方法可以为框架设置名字。file 是一个 AWT构件 Menu的对象,而它所在的容器 mb是一个 Swing的 JMenuBar对象,两类不同的构件,实现的方法不一样,不能使用 add方法进行添加。因此在第 2条下划线处需要把 file的类型改为 JMenu。容器定义了 BorderLayout布局管理器以后,如果添加构件时不指明添加的位置,则会把该构件添加到 Center的位置。由于本题中不需要把名为 actionInfo的JLabel构件添加到 Center的位置,所以在第 3条下划线处,添加 tb构件时必须指明位置参数。本题答案中根据习惯把工具栏添加到容器的顶部,当然,添加到容器的 South、East 或 West位置也都正确。