球不再在BallWallBounce中移动(Java Ex4.15的艺术与科学)

球不再在BallWallBounce中移动(Java Ex4.15的艺术与科学),java,Java,摘自Java艺术与科学第4章,练习15。我想写一个程序,使一个球在窗口内从边到边反弹 这是我的密码: import acm.graphics.*; import acm.program.*; import java.awt.*; public class BouncingBall extends GraphicsProgram { private static final int N_STEPS=1000; private static final int PAUSE_TIME = 2; p

摘自Java艺术与科学第4章,练习15。我想写一个程序,使一个球在窗口内从边到边反弹

这是我的密码:

import acm.graphics.*;
import acm.program.*;
import java.awt.*;

public class BouncingBall extends GraphicsProgram {

private static final int N_STEPS=1000;
private static final int PAUSE_TIME = 2;
private static final double ovalsize =50;

public void run(){
    GOval oval = new GOval(getWidth()/2-ovalsize/2,getHeight()/2-ovalsize/2, ovalsize, ovalsize);
    //positions the ball's start position at the center of the window
    oval.setFilled(true);
    add (oval);
    double dx=((getWidth()-ovalsize)/4)/N_STEPS;
    double dy=((getHeight()-ovalsize)/2)/N_STEPS;
    while(true) {
        oval.move(dx, dy);   //indicates the oval moving
        pause(PAUSE_TIME);
        if (oval.getY() > getHeight() - ovalsize) {//code indicates if ball encounters any edge
                                                    //of the screen, it will change direction.
            dy*=-1; 
        }
        if(oval.getX() > getWidth()- ovalsize) {
            dx*=-1;
        }
        if(oval.getY() < 0) {
            dy*=dy-1;
        }
        if(oval.getX() < 0) {
            dx*=-1;
        }
    }   
}

(这是来自其他网页的代码),球不再移动

有人能告诉我发生了什么事吗

编辑:我回去测试程序,似乎代码中还有另一个问题可能与此相关。当我启动应用程序时,球将正常移动。然后它会移动得越来越快,大约62秒后,球会飞出,只在窗口的顶部边缘来回移动

double dx=((getWidth()-ovalsize)/4)/N_STEPS;
double dy=((getHeight()-ovalsize)/2)/N_STEPS;
double dx = (getWidth()/N_STEPS);
double dy = (getWidth()/N_STEPS);