【问题标题】:java looping with case, while, and if statementsjava循环使用case、while和if语句
【发布时间】:2013-08-07 00:55:17
【问题描述】:

我一直在做一个小项目,试图学习一些基础知识,我正在尝试克隆太空入侵者。我没有真正的经验(这就是我这样做的原因)并且我遇到了一些我以前从未遇到过的问题。

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

    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)。 这段代码是从另一个经常从摆动计时器调用的函数中调用的。

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

如果我用 '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 循环。

我不知道问题出在哪里,我认为这是一个逻辑错误,但对我来说似乎相当简单。同样,如果有人想查看其余代码,我可以发布它。否则,如果有人有任何建议,我将不胜感激。我愿意接受具体的建议,或者只是关于代码效率的一般建议。谢谢

回答

好的,感谢 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:{

    }
    }
}

这基本上只是将所有外星人向右移动并停止,但我已经超越了最初的问题。

【问题讨论】:

标签: java loops if-statement while-loop


【解决方案1】:

你有一个无限循环:

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

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

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

此外,您似乎需要在每个案例的末尾添加 break; 语句。

【讨论】:

    【解决方案2】:

    loop,在当前状态下,是无限的。您需要有一个条件,您的 boolean variablemoveRight 将设置为 false

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 2016-01-12
      • 1970-01-01
      • 2012-06-18
      • 2015-05-19
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多