1、二级 JAVA 机试-81 及答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.下面的程序是求 9999 以内的完全数。所谓完全数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。如 28=1+2+4+7+14 就是一个完全数。请在程序的每条横线处填写一个语句,使程序的功能完整。注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。源程序文件代码清单如下:public class QuanShupublic static void main(String args)for (int n=1;n99
2、99; n+)if(_)System.out.println (n);public static int divsum(int n)/该方法功能是求一个数的所有约数int s=0;for (int i=1; in; i+)if(_)_return s;(分数:30.00)_二、2简单应用题(总题数:1,分数:40.00)2.请完成下列 Java 程序:读取新浪首页文件的数据并且显示出来。要求编写 JFrame 扩展类,以 String类的对象定义的 url 地址作为入口参数,该类实现根据 url 参数指定的地址进行连接和读取数据,并且能显示在一个文本区域内。注童;请勿改动 main()主方法和
3、其他已有语句内容,仅在下划线处填入适当的语句。源程序文件代码清单如下:import javax.swing.*;import java.awt.*;import java.awt.event.*;import .*;import java.io.*;public class ex15_2public static void main(String args)UrlFrame page = new UrlFrame(“http:/“);page.show();class UrlFrame extends JFrameJTextArea jta = new JTextArea(“正在读取文件.“)
4、;URL url;public UrlFrame(String strAddr)super (strAddr);/使用父类的构造方法。setSize(450, 300);JScrollPane jsp = new JScrollPane(jta);getContentPane().add(jsp);WindowListener wl = new WindowAdapter()public void windowClosing(WindowEvent we)System.exit(0);addWindowListener(wl);try url = new URL(strAddr);_;catc
5、h (MalformedURLException murle) System.out.println(“不合适的 URL:“+ strAddr);void getData(URL url)URLConnection con = null;InputStreamReader isr;BufferedReader readBuf;String strLine;StringBuffer strBuf = new StringBuffer();try con = this.url.openConnection();con.connect();jta.setText(“打开连接.“);isr = new
6、 InputStreamReader(con.getInputStream();readBuf = new BufferedReader(isr);jta.setText(“读取数据.“);while (strLine = readBuf.readLine() != null)strBuf.append(strLine + “/n“);_;catch (IOException e)System.out.println(“IO 错误:“ + e.getMessage();(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)3.下面是一个 Applet 程序,其功能是从 3100
7、 之间(包括 3 和 100)每隔 0.5 秒显示一个新的数字,如果数字为素数,则显示为灰色,其他为绿色。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。注意:不改动程序的结构,不得增行或删行。源程序文件代码清单如下:import java.awt.*;import java.applet.Applet;/*applet code=ex15_3.class width=800 height=400/applet*/public class ex15_3 extends Appletpublic Color color15_3 = Color.black;private int n
8、15_3 = 3;public myPrime thPrime15_3;public void init()thPrime15_3 = new myPrime(this);thPrime15_3.start();public void paint(Graphics g)g.setColor(color15_3);g.drawString(n15_3, 50, 50);public int getInt()return n15_3;public void setInt(int i)n15_3=i;class myPrime extends Threadex15_3 obj15_3;myPrime
9、 (ex15_3 o)this.obj15_3 = o;public boolean isPrime(int n)boolean bPrime = true;int i=2;if(n3|n100)return false;while(in-1i+;return bPrime;public void run()int i;for (i=3;i100; i+)if (isPrime(i)obj15_3.color15_3 = Color.gray;elseobj15_3.color15_3 = Color.green;obj15_3.n15_3;obj15_3.repaint();trysleep
10、(500);catch (InterruptedException ie)( )ex15_3.htmlHTMLHEADTITLEex15_3/TITLE/HEADBODYapplet code=“ex15_3.class“ width=800 height=400/applet/BODY/HTML(分数:30.00)_二级 JAVA 机试-81 答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.下面的程序是求 9999 以内的完全数。所谓完全数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。如 28=1+2+4+7+14
11、就是一个完全数。请在程序的每条横线处填写一个语句,使程序的功能完整。注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。源程序文件代码清单如下:public class QuanShupublic static void main(String args)for (int n=1;n9999; n+)if(_)System.out.println (n);public static int divsum(int n)/该方法功能是求一个数的所有约数int s=0;for (int i=1; in; i+)if(_)_return s;(分数:30.00)_正确答案
12、:(n=divsum(n)ni=0s+=i;)解析:解析 本题考查 for 循环语句、求余运算符()和 Java 语言方法的使用。解答本题的关键是熟练使用 for 循环语句。在本题中, if(n=divsum(n)语句是用来调用 divsum(n)方法(其中 n 为方法的实际参数)和判断某个自然数是否为完全数。ni=0 是用来判断数 n 是否能被数 i 整除,s+=i 是用来累加某个自然数的所有约数。二、2简单应用题(总题数:1,分数:40.00)2.请完成下列 Java 程序:读取新浪首页文件的数据并且显示出来。要求编写 JFrame 扩展类,以 String类的对象定义的 url 地址作为
13、入口参数,该类实现根据 url 参数指定的地址进行连接和读取数据,并且能显示在一个文本区域内。注童;请勿改动 main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。源程序文件代码清单如下:import javax.swing.*;import java.awt.*;import java.awt.event.*;import .*;import java.io.*;public class ex15_2public static void main(String args)UrlFrame page = new UrlFrame(“http:/“);page.show();clas
14、s UrlFrame extends JFrameJTextArea jta = new JTextArea(“正在读取文件.“);URL url;public UrlFrame(String strAddr)super (strAddr);/使用父类的构造方法。setSize(450, 300);JScrollPane jsp = new JScrollPane(jta);getContentPane().add(jsp);WindowListener wl = new WindowAdapter()public void windowClosing(WindowEvent we)Syste
15、m.exit(0);addWindowListener(wl);try url = new URL(strAddr);_;catch (MalformedURLException murle) System.out.println(“不合适的 URL:“+ strAddr);void getData(URL url)URLConnection con = null;InputStreamReader isr;BufferedReader readBuf;String strLine;StringBuffer strBuf = new StringBuffer();try con = this.
16、url.openConnection();con.connect();jta.setText(“打开连接.“);isr = new InputStreamReader(con.getInputStream();readBuf = new BufferedReader(isr);jta.setText(“读取数据.“);while (strLine = readBuf.readLine() != null)strBuf.append(strLine + “/n“);_;catch (IOException e)System.out.println(“IO 错误:“ + e.getMessage(
17、);(分数:40.00)_正确答案:(getData(url)jta.setText(strBuf.toString()解析:解析 本题主要考查面向对象的基本编程思想,Swing 构件的使用,以及 包中的基本方法的使用。解题关键是能够从题目意思中提取有用信息,并抽象成自己制作的类,并实现这个类,完成一些基本功能。本题中,第 1 个空,调用类 UrlFrame 内部的方法 getData,根据参数 url 所指出的地址获得文件数据:第 2 个空,将 strBuf 中的数据显示到 jta 对象所指定的文本区域中。三、3综合应用题(总题数:1,分数:30.00)3.下面是一个 Applet 程序,
18、其功能是从 3100 之间(包括 3 和 100)每隔 0.5 秒显示一个新的数字,如果数字为素数,则显示为灰色,其他为绿色。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。注意:不改动程序的结构,不得增行或删行。源程序文件代码清单如下:import java.awt.*;import java.applet.Applet;/*applet code=ex15_3.class width=800 height=400/applet*/public class ex15_3 extends Appletpublic Color color15_3 = Color.black;pri
19、vate int n15_3 = 3;public myPrime thPrime15_3;public void init()thPrime15_3 = new myPrime(this);thPrime15_3.start();public void paint(Graphics g)g.setColor(color15_3);g.drawString(n15_3, 50, 50);public int getInt()return n15_3;public void setInt(int i)n15_3=i;class myPrime extends Threadex15_3 obj15
20、_3;myPrime (ex15_3 o)this.obj15_3 = o;public boolean isPrime(int n)boolean bPrime = true;int i=2;if(n3|n100)return false;while(in-1i+;return bPrime;public void run()int i;for (i=3;i100; i+)if (isPrime(i)obj15_3.color15_3 = Color.gray;elseobj15_3.color15_3 = Color.green;obj15_3.n15_3;obj15_3.repaint(
21、);trysleep(500);catch (InterruptedException ie)( )ex15_3.htmlHTMLHEADTITLEex15_3/TITLE/HEADBODYapplet code=“ex15_3.class“ width=800 height=400/applet/BODY/HTML(分数:30.00)_正确答案:(String.valueOf(n15_3)i101 或者 i=100obj15_3.setInt(i)解析:解析 本题主要考查线程的概念和使用, Applet 的执行过程和窗口,for 循环语句,以及字符串和 int 型的数据转换,及面向对象编程的
22、基本思想。解题关键是熟练地将 Applet 的执行和线程的基本思想结合完成一定的综合性的应用;熟练掌握线程的建立、运行以及线程类与封装类之间的信息传递方式,即通过对象调用封装的方法来进行,如语句 obi15_3.repaint()。本题中,第 1 处,不可以直接填入n15_3,会导致参数类型不符合的错误,应该用 String 类的 valueOf()方法对 int 型数据进行转换得到String 类型数据:第 2 处,注意题目要求,需要包括 3 和 100,因此循环变量的上界应该是 i101 或者 i100;第 3 处,由于 n15_3 是类 ex15_3 的私有成员变量,因此不可以直接用对象 obj15_3 来调用这个成员变量,需要通过类 ex15_3 的方法 setInt()来实现对私有成员的修改。