1、二级 JAVA 机试 82 及答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.下面的程序是求 9999 以内的完全数。所谓完全数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。如 28=1+2+4+7+14 就是一个完全数。请在程序的每条横线处填写一个语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 源程序文件代码清单如下: public class QuanShu public static void main(String args) for (int
2、 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)_二、B2简单应用题/B(总题数:1,分数:40.00)2.请完成下列 Java 程序:读取新浪首页文件的数据并且显示出来。要求编写 JFrame 扩展类,以 String类的对象定义的 url 地址作为入口参数,该类实现根据 url 参数指定的地址进行连接和读取数据,并且能显示在一个文本区
3、域内。 注童;请勿改动 main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 源程序文件代码清单如下: import javax.swing.*; import java.awt.*; import java.awt.event.*; import .*; import java.io.*; public class ex15_2 public static void main(String args) UrlFrame page = new UrlFrame(“http:/“); page.show(); class UrlFrame extends JFrame JTextA
4、rea 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) System.exit(0); ; addWindow
5、Listener(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.url.openC
6、onnection(); 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
7、(); (分数:40.00)_三、B3综合应用题/B(总题数:1,分数:30.00)3.下面是一个 Applet 程序,其功能是从 3100 之间(包括 3 和 100)每隔 0.5 秒显示一个新的数字,如果数字为素数,则显示为灰色,其他为绿色。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 源程序文件代码清单如下: import java.awt.*; import java.applet.Applet; /* applet code=ex15_3.class width=800 height=400 /applet */ publi
8、c class ex15_3 extends Applet public Color color15_3 = Color.black; private 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.UdrawString(n15_3, 50, 50)/U; public int getInt() ret
9、urn n15_3; public void setInt(int i) n15_3=i; class myPrime extends Thread ex15_3 obj15_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-1 i+; return bPrime; public void run() int i; for (i=3;Ui100/U; i+) if (isP
10、rime(i)obj15_3.color15_3 = Color.gray; else obj15_3.color15_3 = Color.green; Uobj15_3.n15_3;/U obj15_3.repaint(); try sleep(500); catch (InterruptedException ie) ( ) B ex15_3.html/B HTML HEAD TITLEex15_3/TITLE /HEAD BODY applet code=“ex15_3.class“ width=800 height=400 /applet /BODY /HTML(分数:30.00)_二
11、级 JAVA 机试 82 答案解析(总分:100.00,做题时间:90 分钟)一、B1基本操作题/B(总题数:1,分数:30.00)1.下面的程序是求 9999 以内的完全数。所谓完全数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。如 28=1+2+4+7+14 就是一个完全数。请在程序的每条横线处填写一个语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 源程序文件代码清单如下: public class QuanShu public static void main(String args) for (int n
12、=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)_正确答案:()解析:n=divsum(n) ni=0 s+=i; 解析 本题考查 for 循环语句、求余运算符()和 Java 语言方法的使用。解答本题的关键是熟练使用 for 循环语句。在本题中, if(n=divsum(n)语句是用来调用divsum(n)方法(其中 n 为方法的实际参数)
13、和判断某个自然数是否为完全数。ni=0 是用来判断数 n 是否能被数 i 整除,s+=i 是用来累加某个自然数的所有约数。二、B2简单应用题/B(总题数:1,分数:40.00)2.请完成下列 Java 程序:读取新浪首页文件的数据并且显示出来。要求编写 JFrame 扩展类,以 String类的对象定义的 url 地址作为入口参数,该类实现根据 url 参数指定的地址进行连接和读取数据,并且能显示在一个文本区域内。 注童;请勿改动 main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 源程序文件代码清单如下: import javax.swing.*; import java.a
14、wt.*; import java.awt.event.*; import .*; import java.io.*; public class ex15_2 public static void main(String args) UrlFrame page = new UrlFrame(“http:/“); page.show(); class UrlFrame extends JFrame JTextArea jta = new JTextArea(“正在读取文件.“); URL url; public UrlFrame(String strAddr) super (strAddr);/
15、使用父类的构造方法。 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); _; catch (MalformedURLException murle) System.out.pr
16、intln(“不合适的 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 InputStreamReader(con.getInputStre
17、am(); 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)_正确答案:()解析:getData(url) jta.setText(strBuf.toString() 解析 本题主要考查面向对象的基本编程思想,Swing
18、 构件的使用,以及 包中的基本方法的使用。解题关键是能够从题目意思中提取有用信息,并抽象成自己制作的类,并实现这个类,完成一些基本功能。本题中,第 1 个空,调用类 UrlFrame 内部的方法 getData,根据参数 url 所指出的地址获得文件数据:第 2 个空,将 strBuf 中的数据显示到 jta对象所指定的文本区域中。三、B3综合应用题/B(总题数:1,分数:30.00)3.下面是一个 Applet 程序,其功能是从 3100 之间(包括 3 和 100)每隔 0.5 秒显示一个新的数字,如果数字为素数,则显示为灰色,其他为绿色。请改正程序中的错误(有下划线的语句),使程序能输
19、出正确的结果。 注意:不改动程序的结构,不得增行或删行。 源程序文件代码清单如下: import java.awt.*; import java.applet.Applet; /* applet code=ex15_3.class width=800 height=400 /applet */ public class ex15_3 extends Applet public Color color15_3 = Color.black; private int n15_3 = 3; public myPrime thPrime15_3; public void init() thPrime15
20、_3 = new myPrime(this); thPrime15_3.start(); public void paint(Graphics g) g.setColor(color15_3); g.UdrawString(n15_3, 50, 50)/U; public int getInt() return n15_3; public void setInt(int i) n15_3=i; class myPrime extends Thread ex15_3 obj15_3; myPrime (ex15_3 o) this.obj15_3 = o; public boolean isPr
21、ime(int n) boolean bPrime = true; int i=2; if(n3|n100) return false; while(in-1 i+; return bPrime; public void run() int i; for (i=3;Ui100/U; i+) if (isPrime(i)obj15_3.color15_3 = Color.gray; else obj15_3.color15_3 = Color.green; Uobj15_3.n15_3;/U obj15_3.repaint(); try sleep(500); catch (Interrupte
22、dException ie) ( ) B ex15_3.html/B HTML HEAD TITLEex15_3/TITLE /HEAD BODY applet code=“ex15_3.class“ width=800 height=400 /applet /BODY /HTML(分数:30.00)_正确答案:()解析:String.valueOf(n15_3) i101 或者 i=100 obj15_3.setInt(i) 解析 本题主要考查线程的概念和使用, Applet 的执行过程和窗口,for 循环语句,以及字符串和 int 型的数据转换,及面向对象编程的基本思想。解题关键是熟练地将
23、 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()来实现对私有成员的修改。