1、二级 JAVA 机试-200 及答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.本题程序功能是打印 19 的乘法表。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。public class basicpublic static void main(String args)_;for(i = i; _; i+)for(j = i;_; j+)System.out.print(i + “x“ + j + “=“ +i *j +“);System.out.println();(分数:30.00)_二、2简单应用题(总题数:1,
2、分数:40.00)2.本题程序的功能是定义一个简单的计算器,可以进行基本的四则运算。程序中布局了 16 个按钮用来表示数字 09 及运算符和点号,程序顶部的文本框用来显示运算数及结果。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。import java.awt.*;import java.awt.event.*;import javax.swing.*;public class simplepublic static void main (String args)tryUIManager.setLookAndFeel(UIManager.getSystemLookAndFe
3、elClassName();catch (Exception e)JFrame frame = new CalculatorFrame();frame.show();class CalculatorPanel extends JPanel implements ActionListenerprivate JTextField display;private JButton btn;private double arg = 0;private String op = “=“;private boolean start = true;public CalculatorPanel()setLayou
4、t(new BorderLayout();display = new JTextField(“0“);display.setEditable(false);add(display,“North“);JPanel p = new JPanel();p.setLayout(new GridLayout(4,4);String buttons = “789/456“123-0.= +“;for (int i = 0; i buttons.length(); i +)btn = new JButton(buttons.substring(i,i + 1);p.add(btn);_;add(p,“Cen
5、ter“);public void actionPerformed(ActionEvent evt)String s = evt.getActionCommand();if (0 = s.charAt(0)s.charAt(0) =9 |s.equals(“.“)if (start)display.setText(s);elsedisplay.setText(display.getText() + s);start = false;elseif (start)if (s.equals(“-“)display.setText(s);start = false;elseop = s;elsedou
6、ble x =_;calculate(x);op = s;start = true;public void calculate(double n)if (op.equals(“ + “)arg += n;elseif(op.equals(“-“)arg - = n;elseif(op.equals(“*“)arg *= n;elseif(op.equals(“/“)arg /= n;elseif(op.equals(“=“)arg=n;display.setText(“+ arg);class CalculatorFrame extends Jframepublic CalculatorFra
7、me()setTitle(“simple“);setSize(220,180);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););Container contentPane=getContentPane();contentPane.add(new CalculatorPanel();(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)3.本题程序的功能是用键盘上的方向键来控制直线的绘制方向。如果一直按向上的方向键,则在窗口中从焦点开始向上缓
8、慢绘制直线,按其他方向的方向键也会向对应的方向缓慢地绘制直线。如果按下 Shift 键,绘制直线的速度会加快。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。import java.awt.*;import java.awt.geom.*;import java.util.*;import java.awt.event.*;import javax.swing.*;public class advancepublic static void main(String args)SketchFrame frame = new SketchFrame();frame.setDefa
9、ultCloseOperation(JFrame.EXIT ON CLOSE);frame,show ();class SketchFrame extends JFramepublic SketchFrame()setTitle(“advance“);setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);SketchPanel panel = new SketchPanel();Container contentPane = getContentPane();contentPane.add(panel);public static final int DEFAULT_WI
10、DTH = 300;public static final int DEFAULT_HEIGHT = 200;class SketchPanel extends JPanel_;last = new Point2D.Double(100,100);lines = new ArrayList();KeyHandler listener = new KeyHandler();_;setFocusable(true);public void add(int dx,int dy)Point2D end = new Point2D.Double(last.getX()+ dx,last.getY() +
11、 dy);Line2D line = new Line2D.Double(last,end);lines.add(line);repaint();last = end;public void paintComponent(Graphics g)super.paintComponent(g);Graphics2D g2 = (Graphics2D)g;for (int i = 0; i lines.size(); i+)g2 .draw (Line2D) lines .get (i);private Point2D last;private ArrayList lines;private sta
12、tic final int SMALL INCREMENT = i;private static final int LARGE_INCREMENT = 5;private class KeyHandler implements KeyListenerpublic void keyPressed(KeyEvent event)_;int d;if (event.isShiftDown()d = LARGE_INCREMENT;elsed = SMALL_INCREMENT;if(keyCode = KeyEvent.VK_LEFT)add(-d,0);elseif(keyCode = KeyE
13、vent.VK_RIGHT)add(d,0);elseif(keyCode = KeyEvent.VK_UP)add(0,-d);elseif(keyCode = KeyEvent.VK DOWN)add(0,d);public void keyReleased(KeyEvent event)public void keyTyped(KeyEvent event)char keyChar = event.getKeyChar();int d;if (Charaeter.isUpperCase(keyChar)d = LARGE_INCREMENT;keyChar = Character.toL
14、owerCase(keyChar);elsed = SMALL_INCREMENT;(分数:30.00)_二级 JAVA 机试-200 答案解析(总分:100.00,做题时间:90 分钟)一、1基本操作题(总题数:1,分数:30.00)1.本题程序功能是打印 19 的乘法表。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。public class basicpublic static void main(String args)_;for(i = i; _; i+)for(j = i;_; j+)System.out.print(i + “x“ + j + “=“ +i *j
15、 +“);System.out.println();(分数:30.00)_正确答案:(int i,j。i10。j=i。)解析:二、2简单应用题(总题数:1,分数:40.00)2.本题程序的功能是定义一个简单的计算器,可以进行基本的四则运算。程序中布局了 16 个按钮用来表示数字 09 及运算符和点号,程序顶部的文本框用来显示运算数及结果。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。import java.awt.*;import java.awt.event.*;import javax.swing.*;public class simplepublic static v
16、oid main (String args)tryUIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch (Exception e)JFrame frame = new CalculatorFrame();frame.show();class CalculatorPanel extends JPanel implements ActionListenerprivate JTextField display;private JButton btn;private double arg = 0;private
17、 String op = “=“;private boolean start = true;public CalculatorPanel()setLayout(new BorderLayout();display = new JTextField(“0“);display.setEditable(false);add(display,“North“);JPanel p = new JPanel();p.setLayout(new GridLayout(4,4);String buttons = “789/456“123-0.= +“;for (int i = 0; i buttons.leng
18、th(); i +)btn = new JButton(buttons.substring(i,i + 1);p.add(btn);_;add(p,“Center“);public void actionPerformed(ActionEvent evt)String s = evt.getActionCommand();if (0 = s.charAt(0)s.charAt(0) =9 |s.equals(“.“)if (start)display.setText(s);elsedisplay.setText(display.getText() + s);start = false;else
19、if (start)if (s.equals(“-“)display.setText(s);start = false;elseop = s;elsedouble x =_;calculate(x);op = s;start = true;public void calculate(double n)if (op.equals(“ + “)arg += n;elseif(op.equals(“-“)arg - = n;elseif(op.equals(“*“)arg *= n;elseif(op.equals(“/“)arg /= n;elseif(op.equals(“=“)arg=n;di
20、splay.setText(“+ arg);class CalculatorFrame extends Jframepublic CalculatorFrame()setTitle(“simple“);setSize(220,180);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););Container contentPane=getContentPane();contentPane.add(new CalculatorPanel();(分数:40.00)_
21、正确答案:(btn.addActionListener(this)。Double.parseDouble(display.getText()。)解析:三、3综合应用题(总题数:1,分数:30.00)3.本题程序的功能是用键盘上的方向键来控制直线的绘制方向。如果一直按向上的方向键,则在窗口中从焦点开始向上缓慢绘制直线,按其他方向的方向键也会向对应的方向缓慢地绘制直线。如果按下 Shift 键,绘制直线的速度会加快。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。import java.awt.*;import java.awt.geom.*;import java.util.*
22、;import java.awt.event.*;import javax.swing.*;public class advancepublic static void main(String args)SketchFrame frame = new SketchFrame();frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);frame,show ();class SketchFrame extends JFramepublic SketchFrame()setTitle(“advance“);setSize(DEFAULT_WIDTH
23、,DEFAULT_HEIGHT);SketchPanel panel = new SketchPanel();Container contentPane = getContentPane();contentPane.add(panel);public static final int DEFAULT_WIDTH = 300;public static final int DEFAULT_HEIGHT = 200;class SketchPanel extends JPanel_;last = new Point2D.Double(100,100);lines = new ArrayList()
24、;KeyHandler listener = new KeyHandler();_;setFocusable(true);public void add(int dx,int dy)Point2D end = new Point2D.Double(last.getX()+ dx,last.getY() + dy);Line2D line = new Line2D.Double(last,end);lines.add(line);repaint();last = end;public void paintComponent(Graphics g)super.paintComponent(g);G
25、raphics2D g2 = (Graphics2D)g;for (int i = 0; i lines.size(); i+)g2 .draw (Line2D) lines .get (i);private Point2D last;private ArrayList lines;private static final int SMALL INCREMENT = i;private static final int LARGE_INCREMENT = 5;private class KeyHandler implements KeyListenerpublic void keyPresse
26、d(KeyEvent event)_;int d;if (event.isShiftDown()d = LARGE_INCREMENT;elsed = SMALL_INCREMENT;if(keyCode = KeyEvent.VK_LEFT)add(-d,0);elseif(keyCode = KeyEvent.VK_RIGHT)add(d,0);elseif(keyCode = KeyEvent.VK_UP)add(0,-d);elseif(keyCode = KeyEvent.VK DOWN)add(0,d);public void keyReleased(KeyEvent event)public void keyTyped(KeyEvent event)char keyChar = event.getKeyChar();int d;if (Charaeter.isUpperCase(keyChar)d = LARGE_INCREMENT;keyChar = Character.toLowerCase(keyChar);elsed = SMALL_INCREMENT;(分数:30.00)_正确答案:(public SketchPanel()。addKeyListener(listener)。int keyCode=event.getKeyCode()。)解析: