java循环用case,while和if语句

时间:2013-08-07 00:55:18

标签: java loops if-statement while-loop

我一直致力于一个试图学习一些基础知识的小项目,我正在尝试克隆太空入侵者。我没有真正的经验(这就是为什么我这样做)而且我遇到过以前从未遇到过问题的事情。

我的问题是循环,我使用了基本循环,但我现在使用了一些嵌套循环,它给了我一些问题。这是破坏我的项目的代码

    public void moveLevel(int l, ArrayList ms){
    switch(l){
    case 1:{
        centerX = 60;
        centerY = 35;
        alienArray = ms;
        moveRight = true;
        while(moveRight == true){
            x += 1;
            }
        }
    case 2:{    
        }
    }
}

如果有人认为它会有所帮助,我可以显示更多代码,但基本上,这个块获取传递给它的级别编号(l)以及一个包含大约15个“外来”对象的数组列表。线'x + = 1'是外星人的移动(每个外星人的位置是x)。 此代码是从另一个函数调用的,该函数经常从swing计时器调用。

正在发生的事情是,当代码到达这一点时,程序似乎冻结了。我在JPanel上有一个没有反应的按钮,我有一个热键来关闭没有反应的应用程序,并且用鼠标退出应用程序什么也没做(我在JFrame中包含了一个DefaultCloseOperation(EXIT_ON_CLOSE)循环时没有这个工作。)

如果我用“if”替换“while”这个词,就像下面的代码一样正常。

    public void moveLevel(int l, ArrayList ms){
    switch(l){
    case 1:{
        centerX = 60;
        centerY = 35;
        alienArray = ms;
        moveRight = true;
        if(moveRight == true){
            x += 1;
            }
        }
    case 2:{    
        }
    }
}

我也尝试过do,while循环。

我不知道问题是什么,我认为这是一个逻辑错误,但对我来说似乎相当简单。再说一遍,如果有人想看到剩下的代码,我可以发布它。否则,如果有人有任何建议我会很感激。我愿意接受具体的建议或只是关于代码效率的一般建议。感谢

ANSWER

好的,我已经让我的代码向前推进,感谢Ted Hopp,他在下面评论过。看起来在case语句中正在执行无限循环。

这是我对任何好奇的人的修复,我已经包含了从原始帖子中调用该函数的函数。

    public void move(int l, ArrayList ms){
    level = l;
    alienArray = ms;
    moveLevel(level, alienArray);

    centerX += horizontal;
    centerY += vertical;
    x += horizontal;
    y += vertical;
    if(moveRight == true){
        horizontal = 1;
        vertical = 0;
        System.out.println(centerX);
    }
    else x -= 1;
}
public void moveLevel(int l, ArrayList ms){
    switch(l){
    case 1:{
        alienArray = ms;
        moveRight = true;
        if(moveRight == true){
            if (centerX > 300){
                moveRight = false;  
            }
        if(moveRight == false){
            if(centerX < 100){
            }
        }
        }
        }
    break;
    case 2:{

    }
    }
}

这基本上是将所有外星人向右移动并停止到目前为止,但我已经超越了原来的问题。

2 个答案:

答案 0 :(得分:4)

你有一个无限循环:

moveRight = true;
while(moveRight == true){
    x += 1;
}

因为moveRighttrue进入循环,并且永远不会通过重复执行false而成为x += 1;

看起来你正试图让某些东西动画到右边的连续动作。但是,这不是这样做的方法,因为你的循环不会让代码的任何其他部分(包括渲染)执行。在不了解您的代码结构的情况下,很难提供具体的建议,但我建议您阅读动画循环。网上有很多关于这个主题的教程资源。寻找像 java swing animation loop 这样的东西。

此外,在每个案例结束时,您似乎需要break;语句。

答案 1 :(得分:1)

loop,就像现在的状态一样,是无限的。您需要设置一个条件,将boolean变量moveRight设置为false