1、国家二级( JAVA)机试模拟试卷 65及答案与解析 一、基本操作题( 30分) 1 下面的程序是求 9999以内的完全数。所谓完全数是指这样的自然数:它的各个约数 (不包括该数自身 )之和等于该数自身。如 28=1+2+4+7+14就是一个完全数。请在程序的每条横线处填写一个语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 源程序文件代码清单如下: public class QuanShu public static void main(String args) for (int n=1;n 9999; n+) if(_) Syst
2、em.out.println (n); public static int divsum(int n) /该方法功能是求一个数的所有约数 int s=0; for (int i=1; i n; i+) if(_) _ return s; 二、简单应用题( 40分) 2 下列程序用来显示用户要求打开的图片。在名为 “读取图像 ”的 JFrame框架中有一个单行文本框,用户可以在其中输入图片文件的文件名称,按下 “浏览图片 ”按钮以后,新生成一个对话框,将图片显示在这个对话框中,运行结果如下图所示。请填写横线处的内容。 注意:请勿改动 main()主方法和其他已有语句 内容,仅在横线处填入适当语句
3、。 import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; public class Example2_9 public static void main(String args) JFrame frame = new FileNameFrame(“读取图像 “); frame.setDefaultCloseOperation(JFrame. EXIT ON CLOSE); frame.setSize(300, 100); frame.show(); class FileNameFr
4、ame extends JFram implements ActionListener JLabel inputLabel; JTextField fileNameText; JButton containtButton; public FileNameFrame(String titleText) super(titleText); inputLabel = new Jnabel(“请输入图像文件的名称 “); fileNameText = new JTextField(10); containtButton = new JButton(“浏览图片 “); fileNameText.addA
5、ctionListener(this); containtButton.addActionListener(this); JPanel panel = new JPanel(); panel.add(fileNameText); panel.add(containtButton); Container containt = getContentPane(); containt.setLayout(new BorderLayout(3,3); containt.add(inputLabel, BorderLayout.NORTH); containt.add(panel, BorderLayou
6、t.CENTER); public void actionPerformed(ActionEvent e) String fileName = fileNameText.getText(); ImageIcon image = _; ImageDialog dlg = new ImageDialog(this); dlg.setImage(image); dlg.setTitle(fileName); dlg.show(); class ImageDialog extends JDialog JLabel imageLabel; public ImageDialog(JFrame frame)
7、 super(frame); imageLabel = new JLabel(); getContentPane().add(imageLabel); this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) hide (); ); this.setSize(200, 200); public void setImage(ImageIcon icon) imageLabel. _(icon); 三、综合应用题( 30分) 3 在以下程序中,鼠标单击小应用程序的某一点,则会在该点显示一个
8、图标,如果双击,则会清除该图标。且在浏览器的状态栏上会显示鼠标单击位置的坐标。运行结果如下图所示。请改正程序中的错误 (有下划线的语句 ),使程序能输出正确的结果。 注意:不改动程序的结构,不是增行或删行。 import java.applet.*; import java.awt.*; import java.awt.event.*; public class Example3_1 extends Applet int xPoint, yPoint; int sum; Image displayIm; public void init() displayIm = getImage(“ms.j
9、pg“); addMouseListener(new SClickMouse() ; sum = 2; public void paint(Graphics g) if(sum = 1) g.drawImage(displayIm, xPoint, yPoint, this); else g.fillRect(xPoint, yPoint, 60, 60); public class SClickMouse implements MouseListener public void mouseClicked(MouseEvent mouse) sum = mouse.getClickCount(
10、); xPoint = mouse.getX(); yPoint = mouse.getY(); paint(); public void mouseEntered(MouseEvent mouse) public void mouseExited(MouseEvent mouse) public void mousePressed(MouseEvent mouse) xPoint = mouse.getX(); yPoint = mouse.getY(); showStatus(“x=“+xPoint+“,y-“+yPoint); public void mouseReleased(Mous
11、eEvent mouse) Exampie3_1.html: html head title Example3_1 /title /head body applet code=“Example3_1.class“ width=“400“ height=“500“ /applet /body /html 国家二级( JAVA)机试模拟试卷 65答案与解析 一、基本操作题( 30分) 1 【正确答案】 n=divsum(n) n i=0 s+=i; 【试题解析】 本题考查 for循环语句、求余运算符 ( )和 Java语言方法的使用。解答本题的关键是熟练使用 for循环语句。在本题中, if(n=
12、divsum(n)语句是用来调用 divsum(n)方法 (其中 n为方法的实际参数 )和判断某 个自然数是否为完全数。 n i=0是用来判断数 n是否能被数 i整除, s+=i是用来累加某个自然数的所有约数。 二、简单应用题( 40分) 2 【正确答案】 new ImageIcon(fileName) setIcon 【试题解析】 本题是将图片作为图标显示到构件中。 ImageDialog是程序自定义的一个对话框类,在其中添加了一个 JLabel对象 “imageLabel”, setImage方法可以将名为 “icon”的图片添加到 imageLabel中,显示到界面上, ImageDia
13、log对话框的标题为图片文件的文件名。 actionPerformed方法相应 “浏览图片 ”按钮对应的事件。按下按钮以后,首先获得用户输入的文件名,以及对应的图片,然后生成 ImageDialog的对象,调用其中的 setImage方法把图片显示出来。 第 1个空是获得根据文件名获得图片。直接根据文件名新建一个 ImageIcon对象。 第 2个空考查构件添加图标的方法。 JLabel添加图标的方法是 setIcon()。 三、综合应用题( 30分) 3 【正确答案】 displayIm=getImage(getDocumentBase(), “ms.jpg“) 第一处也可改作 displa
14、yIm=getImage(getCodeBase(), “ms.jpg“) g.clearRect(xPoint, yPoint, 60, 60) repaint() 【试题解析】 Applet获得图像有两种方式,一种是 getImage(URL url),另一种是 getImage(URL url, String name)。 init()方法用来初始化小应用程序,首先是将图像文件读入内存,然后为小应用程序添加鼠标点击事件。 paint()方法向页 面绘制图像,题中的 if-else语句表示用户单击鼠标则在鼠标单击的位置显示图片,用户多次点击鼠标,则清除该点右下方长宽均为 60的矩形区域内的
15、图像。SClickMouse实现了鼠标监听器。 mouseClicked中获取鼠标点击的位置和点击的次数。 mousePressed方法获得鼠标按下的坐标,并将坐标值显示在状态栏中。 第一种方法所使用的 URL必须是包含图像文件名的绝对 URL,所以本处不能填使用文件名作参数。采用第二种获得图像的方式时,如果图像和 Applet在同一文件夹可使用 getCodeBase()获得相 应的 URL,当图像和 Applet所属的 HTML文件在同一文件夹时,可以采用 getDocumentBase()获得相应的 URL。所以第一个错误可以改为 getDocument Base(),也可以改为 getCodeBase()。 第二处错误, Graphics对象作图时,可以使用 clearRect()方法清除某一个区域的图形,而 fillRect()方法只是根据当前颜色 (本题中为黑色 )画出一个实心矩形。在程序要求 Applet绘制图形时,只能调用 repaint()方法,此方法会自动调用 paint()方法。故第三 个错误应该改成 repaint()方法。