四、程序填空题(本大题共5小题,每空2分,共20分)
27.方法void moveOddForword(int a[ ])的功能是将数组中的所有奇数移到所有偶数之前。
void moveOddForword(int a[]){
for(int i=0, odd=0;________;i++)
if(________){
int t=a[i];a[i]=a[odd];a[odd]=t;odd++;
}
}
28.以下程序创建了一个窗口,然后在窗口内显示″Hello,World! ″。
import javax.swing.*; import java.awt*;
public class HelloWorld {
public static void main(String[ ]ares) {
TextFrame frame=new TextFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame. ________;
}
}
class TextFrame extends JFrame {
public TextFrame() { .
setTitle(″HelloWorld″);
setSize(WIDTH,HEIGHT);
TextPanel panel=new TextPanel();
Container contentPane=getContentPane();
contentPane.add(panel);
}
public static final int WIDTH=300;
public static final int HEIGHT= 200;
}
class TextPanel extends JPanel {
public void paintComponent(Graphics g) {
super. ________;
g.drawString(″Hello,World! ″,x,y);
}
public int x=100; public int y=100;
}
29.以下是子窗口中设置一个菜单条类的定义。类的构造方法根据指定的窗口名称和菜单表设置菜单条,菜单和菜单项,当选中某个菜单项时,在文本框中显示相应菜单项被选中的信息。
class MenuWindow extends JFrame implements ActionListener {
public static JTextField text;
public MenuWindow(String s,String menuList[][]) {
setTitle(s);
Container con=this.getContentPane();
con.setLayout(new BorderLayout());
this.setLocation(100,100); this.setSize(300,100);
JMenuBar menubar=new JMenuBar();
for(int i=0; i<menuList.length;i++) {
JMenu menu=new JMenu(menuList[i][0]);
for(int j=1;j<menuList[i].1ength;j++){
JMenultem anltem=new JMenultem(menuList[i][j]);
anltem.setActionCommand(menuList[i][j]);
anltem.________;menu.add(anltem);
}
menubar.__________;
}
text=new JTextField();setJMenuBar(menubar);
con.add(text,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
text.setText(e.getActionCommand()+″菜单项被选中! ″);
}
}
public class Test29 extends Applet {
MenuWindow window;
String menuList[][]={{″体育″,″跑步″,″打蓝球″,″打乒乓″},
{″娱乐″,″唱歌″,″跳舞″}};
public void init() {
window=new MenuWindow(″体育娱乐之窗″,menuList);
window.setVisible(true);
}
}
30.以下是一个用鼠标自由作画的小应用程序。最简单的方法是根据鼠标所在位置画点,跟随鼠标的移动,不断画圆点,就能实现用鼠标作画。
import java.awt.*;
import java.awt.event.*;
public class Test30 extends java.applet.Applet implements MouseMotionListener {
Color color;int lineSize=2:
int x=-1,y=-l;
public void init(){
setLocation(30,20); setSize(300,300);
setBackground(Color.green);addMouseMotionListener(this);
}
public void paint(Graphics g){
if(x!=-1&&y!=-1) {
g.setColor(color);g.fillOval(x,y,1ineSize,lineSize);
}
}
public void mouseMoved(MouseEvent e){}
public void mouseDragged(MouseEvent e){
x=e.getX();y=e.getY();_________;
}
public void ________ (Graphics g){ paint(g);}
}
31.以下定义的类ShareData用于管理多个线程共享数据data。一个线程生成data,另一个线程使用data。约定,新生成的data只有被另一个线程使用后,才能生成下一个data。反之,一个data被使用后,也不能再继续使用。所以,生成和使用data的线程之间需要互斥和同步。以下是管理上述使用方式的类,类内有要管理的共享数据,以及对共享数据的存操作putData()和取操作getData()。
class ShareData{
int data;∥共享数据
boolean newData=false;∥有最近新生成data的标志
synchronized int getData(){
while(!newData){
try{ _________;
} catch(InterruptedExceptipn e){
System.out.println(″因错误,而中断!″);
}
}
newData=false; notify();return data;
}
synchronized void putData(int n){
while(newData){
try{wait();
}catch(InterruptedException e){
System.out.println(″因错误,而中断! ″);
}
}
data=n; __________;
notify(); return;
}
}
五、程序分析题(本大题共5小题,每小题4分,共20分)
32.阅读下列程序,请写出该程序的输出结果。
class Parent{
private void method 1 () { System.out.println(″Parent′s method 1()″);}
public void method 2 () { System.out.println(″Parent′s method 2()″);method 1();}
}
class Child extends Parent {
public void method l (){ System.out.println(″Child′s method 1 ()″);}
public static void main(String args[]){ Parent p = new Child();p.method2();}
}
33.阅读下列程序,请写出该程序的功能。
import java.util.*;import javax.swing.*;
public class Test33{
public static void main(String args[]){
String str=(String)JOptionPane.showInputDialog(null,″请输入信息″,
″输入对话框″,JOptionPane.PLAIN_MESSAGE,null,null,null);
StringTokenizer pas=new StringTokenizer(str, ″,″);
int n=pas.countTokens();
System.out.println(″输入的信息有单词:″+n+″个,全部单词如下:″);
while(pas.hasMoreTokens()){
String s=pas.nextToken();
System.out.println(s);
}
}
)
34.阅读下列程序,请用示意图画出程序运行时呈现的界面。
import java.applet.*;import java.awt.*;import javax.swing.*;
class MyPanel extends JPanel{
JTextField textl,text2;
MyPanel(String sl,String s2) {
textl=new JTextFieId(s1); text2=new JTextField(s2);
add(text 1); add(text2);
}
}
class MySubPanel extends MyPanel {
JTextField text;
MySubPanel(String sl,String s2,String s3) {
super(s1,s2);text = new JTextField(s3);add(text);
}
}
public class Test34 {
public static void main(String args[]) {
JFrame mw=new JFrame(″一个示意窗口″);
mw.setSize(350,150);
Container con = mw.getContentPane();
con.setLayout(new BorderLayout());
MyPanel pl=new MyPanel(″文本框l″,″文本框2″);
MySubPanel p2=new MySubPanel(″文本框3″,″文本框4″,″文本框5″);
JTextArea text=new JTextArea(″这里是一个文本区″);
con.add(pl,″North″); con.add(p2,″South″);
con.add(text,″Center″);mw.setVisible(true);
}
}
35.阅读下列程序,请写出该程序的功能。
import java.applet.*:import java.awt.event.*;import javax.swing.*
public class Class 1 extends Applet implements KeyListener{
JButton button=new JButton(″开始″);
JTextArea text=new JTextArea(5,20);
public void init() {
button.addKeyListener(this); add(button);add(text);
}
public void keyPressed(KeyEvent e){
int t=e.getKeyCode();
if(t>=KeyEvent.VK_A&& t<=KeyEvent.VK_Z) {
text.append(″ ″+(char)t);
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
}
36.阅读下列程序,请写出该程序的功能。
import java.applet.*; import java.awt.*;
public class Test36 extends java.applet.Applet implements Runnable{
Thread myThread = null;
double seta=0.0;
public void start() {
setSize(500,400);
if(myThread=null){ myThread=new Thread(this); myThread.start();}
}
public void run() {
while(myThread!=null) {
try {myThread.sleep(40);
} catch(InterruptedException e){}
seta+=3.0; if(seta>=360)seta=0; repaint();
}
}
public void paint(Graphics g) {
final double pi=3.14159; final double r = 100.0;
int x0=250+(int)(r*Math.cos(3.1415926/180.0*seta));
int y0=200+(int)(r*Math.sin(3.1415926/180.0*seta));
g.setColor(Color.red); g.drawOval(x0,y0,10,10);
}
}
六、程序设计题(本大题共2小题,每小题6分,共1 2分)
37.请编写方法void strReverse(String str),该方法的功能是输出一个新字符串,新字符串字符排列顺序与原字符串str的字符排列顺序相反。例如,strReverse(″ABCD″) 所输出的结果是″DCBA″。请使用字符串与字节数组的相互转换方法进行设计。
38.请设计实现如下用于输入学号和姓名的对话框界面,其中空白格是文本框,用于输入相应的内容。
自学考试Java语言程序设计(一)试题" src="http://www.examda.com/NewsFiles/2010-3/9/zikao/clip_image002_0037.jpg" border="0" />
这里给出的是程序的一部分,你要编写的是类InputNoNameDialog的构造方法InputNoNameDialog(JFrame f,String s,JTextField t)。其中参数f是对话框的依赖窗口,s是对话框标题,t是依赖窗口中显示对话框输入内容的文本框。
以下是类InputNoNameDialog的程序框架。
class InputNoNameDialog extends JDialog implements ActionListener{
JLabel title;JTextField textl,text2,mainText;JButton done;
InputNoNameDialog(JFrame f String s,JTextField t) {
super(f,s,true); mainText = t;Container con = getContentPane();
title=new JLabel(s); textl=new JTextField(10);
text2=new JTextField(10); con.setLayout(new GridLayout(3,2));
con.setSize(200,100); setModal(false);
//请在以下位置续写其余代码
}
public void actionPerformed(ActionEvent e) {
//输入结束按确定按钮后,将对话框中输入的学号和姓名在它依赖窗口的文本框中显示。
mainText.setText(″学号:″+textl.getText()+″ 姓名:″+text2.getText());
setVisible(false);dispose();
}