问题 问答题

下面的Applet程序,其功能为画一个正方形,大小140*140,其背景色为蓝色(其填充色为pink色,各边离Applet的边为10像素)和一个在填充的正方形中自右上到左下来回移动的小球(半径15)。请改正程序中的错误(有下划线的语句),使程序执行后,能得到预期的结果。 注意:不改动程序的结构,不得增行或删行。程序的执行结果为:

import java.awt.*; import java.applet.*; /* <applet code=BallAnim width=800 height=600> </applet> */ //画一个正方形和一个移动的球,实现了Runnable接口。 public class BallAnim extends Applet implements Runnable { Thread animThread; int ballX=100;//球的x坐标 int bally;10;//球的Y坐标 int ballDirection=0;//球移动的方向标志:0表示从上向下移动,1表示从下向上移动 public void init() { super.setBackground(Color.blue); } public void start() { if (animThread !=null) { animThread = new Thread(this); animThread.start(); } } public void stop() { animThread.stop(); animThread = null; } // 实现Runnable接 public void run() { Thread.currentThread().setPriority(Thread. NORM_PRIORITY);//设置线呈优先级NORM_PRIORITY while (true) { moveBall(); try { Thread.sleep(100); // 休眠0.1秒 } catch (Exception sleepProblem) { // This applet ignores any exceptions if it has a problem sleeping. // Maybe it should take Sominex } } } private void moveBall () { // 球对角运动 if (ballDirection == 0) { ballX-=2; / / 如果球从左向右运动,球的X坐标减少2 ballY+=2; / / 如果球从上向下运动,球的Y坐标增加2 if (ballY > 100)//球的Y坐标增加到100, 改变球的运动方向 { ballDirection = 1; ballX = 10; ballY=100; } } else { ballX+=2; //如果球从右向左运动,球的X坐标增加2 ballY-=2;//如果球从下向上运动,球的Y坐标减少2 if (bally <= 10)//球的X坐标减少到10,改变球的运动方向 { ballDirection = 0; ballX = 100; ballY=10; } } paint(); } public void paint(Graphics g) { g.setColor(Color.pink); g.fillRect(10, 10, 120, 120); g.setColor(Color.green); g.fillOval(ballX,ballY, 30, 30); } } ex40_3.html: <html> <head> <title> ex40_3</title> </head> <body> <applet code=" BallAnim.class" width=800 height=400> </applet> </body> </html>

答案

参考答案:

解析:this.setBackground(Color.blue); animThread==null repaint(); 本题主要考查Java Applet程序的设计,Java语句的线程机制以及for循环语句。解答本题的关键是比较熟练的掌握JavJava语句的线程机制以及for循环语句的有关知识。线程是程序中的一个执行流。一个执行流是由CPU运行程序的代码、操纵程序的数据所形成的。创建线程的两种基本方法:(1)通过实现Runnable接口创建线程。(2)通过继承Thread类创建线程。控制线程运行的基本方法有:(1)sleep(),使比其低的优先级线程运行。(2)stop(),强行终止线程。(3)run(),创建线程体。(4)start()使新创建的线程处于可运行状态等。在本题中,this.setBackground(Color.blue);语句的功能是设置Applet显示区的背景色为蓝色,if(animThread !=null)语句的功能是判断线程animThread是否存在,语句的功能是重新绘制Applet。

单项选择题
单项选择题 A型题