1、二级 JAVA 机试-156 及答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.在程序中,用户使用 JOptionPane 输入一个二维数组的行数,程序随机生成每一行的列数,并对其赋值。最后显示这个二维数组。请填写横线处的内容。注意:请勿修改 main()主方法和其他已有语句内容,仅在横线处填入适当语句。import javax.swing.*;public class basicpublic static void main(String args)String sDimU=JOptionPane.showInputDialog(“请输
2、入数组的行数“);int iDimU=_(sDimU);int . numbers=new intiDimU ;for(int i=0; iiDimU; i+)int k=(int) (Math.random()*5+1);numbersi=_;for(int i=0; iiDimU; i+)for(int j=0;_; j+)numbersi j=(int) (Math.random()*l00);System.out.print(numbersi j+“ “);System.out.println ();System.exit(O)(分数:30.00)_二、2简单应用题(总题数:1,分数:
3、40.00)2.请完成程序,首先由一个类 simple 实现 Serializable 接口,并有三个成员变量,分别为 int 型、double 型和 String 型,可以用 toString 的方法显示这三个成员变量。在 main 方法中创建这个 simple的持久对象,根据用户在命令行输入的三个参数来设定其中成员变量的值。然后,将这个对象写入名为TheSerial.data 的文件中,并显示成员变量。最后从文件 TheSerial.data 中读出三个成员变量并显示出来。注意:请勿修改 main()主方法和其他已有语句内容,仅在横线处填入适当语句。import java.io.*;cla
4、ss TheSerial implements Serializableprivate int intvalue;private double doublevalue;private String string;The Serial ()intvalue=123;doublevalue=12.34;string=“Serialize Test“;public void setDouble(double d)doublevalue=d;public void setInt(int i)intvalue=i;public void setString(String s)string=s;publi
5、c String to String()return(“int=“+intvalue+“ double=“+doublevalue+“ string=“+string);public class simplepublic static void main(String args)The Serial e1=new TheSerial();TheSerial e2;trye1.setInt(Integer.parseInt(args0);e1.setDouble(Double.parseDouble(args1);e1.setString(args2);catch(Exception e)e1.
6、setString(e.getMessage();System.out.println(e1);tryFileOutputStream oS=new FileOutputStream(“TheSerial.data“);ObjectOutputStream oOS=new ObjectOutputStream(oS);_;catch(IOException ioException)System.out.println (ioException.getMessage ();tryFileInputStream iS=new FileInputStream(“TheSerial.data“);Ob
7、jectInputStream oIS=new ObjectInputStream(iS);_;System.out.println(e2);catch(IOException ioException)System.out.println(ioException.getMessage();catch(ClassNotFoundException cnfException)System.out.println(cnfException.getMessage();(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)3.本程序的目的是在屏幕上显示当前目录下的文件信息。文件信息通过表
8、格 JTable 的实例显示。请更正题中带下划线的部分,使程序能输出正确的结果。注意:不改变程序的结构,不得增行或删行。import java.awt.*;import javax.swing.*;import java.util.Date;import javax.swing.table.*;import java.applet.*;import java.io.*;public class advance extends JApplet, JFramepublic void init()FileModel fm=new FileModel();JTable jt=new JTable();
9、jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);jt.setColumnSelectionAllowed(true);JScrollPane jsp=new JScrollPane(jt);getContentPane().add(jsp, BorderLayout.CENTER);public static void main(String args)advance ft=new advance();ft.init();JFrame f=new JFrame();f.setDefaultCloseOperation(JFrame.EXIT_ON_CL
10、OSE);f.getContentPane().add(ft.getContentPane();f.setSize(300,400);f.show();class FileModel extends AbstractTableModelString columnName=new String “文件名“,“大小“,“最后修改时间“;Object data;public FileModel() this(“.“);public FileModel(String dir)File file=new File(dir);String files=file.list();data=new Object
11、files.length columnName.length;for(int i=0; ifiles.length; i+)File tmp=new File(filesi);datai 0=tmp.getName();datai 1=new Long(tmp.length();datai 2=new Date(tmp.lastModified();public int getColumnNumber()return columnName.length;public int getRowCount()return data.length;public String getColumnName(
12、int col)return columnNamecol;public Object getValueAt(int row, int col)return datarow col;public Class getColumnClass(int c)return getValueAt(0,c).getClass();(分数:30.00)_二级 JAVA 机试-156 答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.在程序中,用户使用 JOptionPane 输入一个二维数组的行数,程序随机生成每一行的列数,并对其赋值。最后显示这个二维数组。
13、请填写横线处的内容。注意:请勿修改 main()主方法和其他已有语句内容,仅在横线处填入适当语句。import javax.swing.*;public class basicpublic static void main(String args)String sDimU=JOptionPane.showInputDialog(“请输入数组的行数“);int iDimU=_(sDimU);int . numbers=new intiDimU ;for(int i=0; iiDimU; i+)int k=(int) (Math.random()*5+1);numbersi=_;for(int i
14、=0; iiDimU; i+)for(int j=0;_; j+)numbersi j=(int) (Math.random()*l00);System.out.print(numbersi j+“ “);System.out.println ();System.exit(O)(分数:30.00)_正确答案:(Integer.parseIntnew intkjnumberi.length)解析:讲解 本题考查知识点:基本数据类型包装类的使用,数组的使用。解题思路:首先, JOptionPane 显示了一个可以输入数据的对话框,用户通过该对话框输入对话框的行数。第一个循环是对每一行分配存储空间,
15、第二个循环是对已经分配好空间的二维数据进行赋值,并在赋值的过程中将数组显示出来。第 1 个空考查字符串和数值之间的相互转换。每一种基本数据类型的包装类都有各自的方法将字符串转换为相应的基本数据类型,转换为 int 型的方法是 Integer.parseInt()。第 2 个空考查多维数组的基本概念,多维数组的高维标识低维的名字,但是低维必须分配自己的存储空间。因此,此处需要用new 关键字对每一行动态分配列空间。第 3 个空,由于多维数组的高维标识低维的名字,所以高维可以直接用来表示低维部分,使用方法跟普通数组一样。如本题中 number0就表示一个用 number0命名的一维数组。所以此处应
16、该填写 jnumberi.length。二、2简单应用题(总题数:1,分数:40.00)2.请完成程序,首先由一个类 simple 实现 Serializable 接口,并有三个成员变量,分别为 int 型、double 型和 String 型,可以用 toString 的方法显示这三个成员变量。在 main 方法中创建这个 simple的持久对象,根据用户在命令行输入的三个参数来设定其中成员变量的值。然后,将这个对象写入名为TheSerial.data 的文件中,并显示成员变量。最后从文件 TheSerial.data 中读出三个成员变量并显示出来。注意:请勿修改 main()主方法和其他已
17、有语句内容,仅在横线处填入适当语句。import java.io.*;class TheSerial implements Serializableprivate int intvalue;private double doublevalue;private String string;The Serial ()intvalue=123;doublevalue=12.34;string=“Serialize Test“;public void setDouble(double d)doublevalue=d;public void setInt(int i)intvalue=i;public
18、void setString(String s)string=s;public String to String()return(“int=“+intvalue+“ double=“+doublevalue+“ string=“+string);public class simplepublic static void main(String args)The Serial e1=new TheSerial();TheSerial e2;trye1.setInt(Integer.parseInt(args0);e1.setDouble(Double.parseDouble(args1);e1.
19、setString(args2);catch(Exception e)e1.setString(e.getMessage();System.out.println(e1);tryFileOutputStream oS=new FileOutputStream(“TheSerial.data“);ObjectOutputStream oOS=new ObjectOutputStream(oS);_;catch(IOException ioException)System.out.println (ioException.getMessage ();tryFileInputStream iS=ne
20、w FileInputStream(“TheSerial.data“);ObjectInputStream oIS=new ObjectInputStream(iS);_;System.out.println(e2);catch(IOException ioException)System.out.println(ioException.getMessage();catch(ClassNotFoundException cnfException)System.out.println(cnfException.getMessage();(分数:40.00)_正确答案:(oOs.writeObje
21、ct(e1)e2=(TheSerial)oIS.readObject()解析:讲解 本题考查知识点:串行化要领和目的、串行化方法、基于文本的应用。解题思路:本题主要考查串行化相关的方法和实现。解题中首先要掌握串行化的基本过程和反串行化的过程。串行化过程首先要创建一个 FileOutputStream,通过该类的实例对文件进行访问,然后创建一个 ObjectOutputStream对象,通过 writeObject()方法来实现对象的序列化。第 1 个空就是使用 writeObject()实现序列化。反序列化过程中用 FileInputStream 对象建立读取文件的连接,并使用该对象创建一个
22、ObjectInputSream实例的 readObject()方法就可以实现对象的反序列化。第 2 个空就是使用 readObject()实现反序列化。三、3综合应用题(总题数:1,分数:30.00)3.本程序的目的是在屏幕上显示当前目录下的文件信息。文件信息通过表格 JTable 的实例显示。请更正题中带下划线的部分,使程序能输出正确的结果。注意:不改变程序的结构,不得增行或删行。import java.awt.*;import javax.swing.*;import java.util.Date;import javax.swing.table.*;import java.applet
23、.*;import java.io.*;public class advance extends JApplet, JFramepublic void init()FileModel fm=new FileModel();JTable jt=new JTable();jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);jt.setColumnSelectionAllowed(true);JScrollPane jsp=new JScrollPane(jt);getContentPane().add(jsp, BorderLayout.CENTER);pub
24、lic static void main(String args)advance ft=new advance();ft.init();JFrame f=new JFrame();f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.getContentPane().add(ft.getContentPane();f.setSize(300,400);f.show();class FileModel extends AbstractTableModelString columnName=new String “文件名“,“大小“,“最后修改时间“
25、;Object data;public FileModel() this(“.“);public FileModel(String dir)File file=new File(dir);String files=file.list();data=new Objectfiles.length columnName.length;for(int i=0; ifiles.length; i+)File tmp=new File(filesi);datai 0=tmp.getName();datai 1=new Long(tmp.length();datai 2=new Date(tmp.lastM
26、odified();public int getColumnNumber()return columnName.length;public int getRowCount()return data.length;public String getColumnName(int col)return columnNamecol;public Object getValueAt(int row, int col)return datarow col;public Class getColumnClass(int c)return getValueAt(0,c).getClass();(分数:30.0
27、0)_正确答案:(extends JFrameJTable(fm)getColumnCount)解析:讲解 本题考查知识点:JTable 构件的使用、小程序的安全机制。解题思路:FileModel 定义了一个 JTable 的模型,在这个模型中,File file=new File(dir)语句获得当前目录下的文件信息,然后将这些文件信息存储在模型的 data 变量中。Applet 的沙箱模型规定,未授权的小应用程序不能访问本地资源,当然也就不能读、写本地计算机的文件系统。本程序需要获得当前目录的信息,因此本题程序只能作为应用程序运行,所以第 1 处下划线应该去掉 JApplet。JTable 的主要功能是将数据以二维表格的方式显示出来。本题采用的是 MVC 模式,FileModel 实现了表格的模型。第 2 条下划线处使用 JTable 的构造方法将模型赋予表格“it”。 AbstractTableModel 所有的抽象方法都需要实现。第 3 条下划线处的方法在功能上与抽象方法 getColumnCount()相同,但是并没有实现该抽象方法。因此需要更正。