Java while循环只循环一次

时间:2015-01-25 12:06:58

标签: java loops if-statement while-loop

我试图制作一个回合制的蛇,但是我无法让它正常工作。我认为run()方法可能有问题,因为如果if()语句没有激活,它只会循环一次。如果我在if()语句之后添加任何内容,比如System.out.println()或repaint(),那么一切都会起作用。我认为这可能是因为如果if()语句没有激活,while循环根本不做任何事情,因此如果我不做任何事情就会自行打破。但我无法相信程序会违反其代码。所以我只是想知道真正的原因是什么。有任何想法吗? :)

编辑:没有真实条件的while()循环不是问题。我已经多次测试了,但我很肯定循环没有循环。不过,我可能错了,我不知道。 :|

我的代码:

public class Class extends Applet implements KeyListener, Runnable {

private static final long serialVersionUID = 1L;

int p = 5;
int x[] = new int[p];
int y[] = new int [p];
int e;
int n;

public Class() {
    for (int i = 0; i < p; i++) {
        x[i] = 10 + i;
        y[i] = 10;
    }
    e = x[0];
    n = y[0];
    addKeyListener(this);
    new Thread(this).start();
}

public static void main(String[] args) {
    new Class();
}

public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_UP) {
        y[0]--;
    }
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        x[0]++;
    }
    if (e.getKeyCode() == KeyEvent.VK_DOWN) {
        y[0]++;
    }
    if (e.getKeyCode() == KeyEvent.VK_LEFT) {
        x[0]--;
    }
}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}

public void run() {
    while (true) {
        if (x[0] != e || y[0] != n) {
            for (int i = p - 1; i > 1; i--) {
                x[i] = x[i-1];
                y[i] = y[i-1];
            }
            x[1] = e;
            y[1] = n;
            e = x[0];
            n = y[0];
            repaint();
        }
    }
}

public void paint(Graphics g) {
    for (int i = 0; i < p; i++) {
        g.drawString(x[0] + ", " + y[0], 10, 10);
        g.fillRect(x[i] * 10, y[i] * 10, 10, 10);
    }
}
}

请以非常简单的方式解释所有内容,因为我还不擅长编程(还)。良好的建议也非常感谢。 :)

1 个答案:

答案 0 :(得分:0)

在更详细地查看代码后,很明显,如果您没有拨打repaint(),则没有任何内容可以指示应用程序使用“{1}}或paint()按键分配的新变量。在按键或update()循环的每次迭代后调用repaint()是否有害?否则屏幕将不会使用新变量进行更新(即使它们实际上随着每次按键而改变)