当前位置: 首页 > 面试题库 >

同时执行条件不会停止循环

索正豪
2023-03-14
问题内容

我已经编写了一个包含do-while循环的“ Hangman”游戏,不断询问用户字母,直到他们解决单词或耗尽生命。奇怪的是,在满足条件时循环不会停止。

这是包含循环的游戏逻辑的实现:

String letter;
int result = 0;

do {
    displayWord();

    System.out.println("Please enter a letter: ");
    letter = scan.next().toLowerCase();

    if (letter.matches("[a-z]")) {
        result = hg.process(letter);
        displayResult(result);
    } else {
        System.out.println("Sorry, not a valid input.");
    }
}
while(result != 2 || result != -2);

可变结果是从process方法中获取返回值。这是实现。

public int process(String letter) {
    boolean found = false;

    //... some code here

    if(!found) {
        if(lifeLine == 0) {
            return gameOver; // no lives left
        } else {
            lifeLine--;
            return wrong; // wrong guess
        }
    } else if (found && this.answer.equals(this.rightAnswer)) {
        return complete; // complete game
    } else {
        return right; // right answer, but incomplete game
    }
}

难道是我返回导致循环不断循环的值的方式吗?我这样声明了这些值:

public static final int right = 1;
public static final int wrong = -1;
public static final int complete = 2;
public static final int gameOver = -2;

问题答案:

逻辑上,根据德摩根定律,

result != 2 || result != -2

是相同的

!(result == 2 && result == -2)

这永远是一个真实的表达。

条件可能应该是

!(result == complete || result == gameOver)

当应用与上述相同的法律时,

result != complete && result != gameOver

(使用常量-尽管我更喜欢像GAMEOVER这样的大写符号-代替魔术数字也使代码更易于阅读。)



 类似资料:
  • 我正在运行一个纸牌游戏,两个玩家轮流挑选纸牌,玩家向前移动许多空格。在这种情况下,一旦任何一个玩家达到25或更大的数字,他们击中了家,游戏应该停止。 我的while循环在两个玩家都达到25后继续循环,即使我已经设置了条件,在玩家1的值小于25或玩家2的值小于25时循环。 当循环条件出了什么问题? 编辑:这是我运行的一个测试的一些输出。

  • 即使while中的布尔值为false,循环仍将继续。我不知道怎么了。如果没有缓存boolean循环变量,将您从循环中释放出来,但是由于某种原因,程序没有这样做,那么应该将boolean循环变量设置为false。 *编辑:在第11次查看我的代码并完成更多的代码后,发现问题出现在顶部的另一个循环中,我没有正确地解决这个问题,所以一直反复调用这个循环。我修好了,现在可以用了。非常感谢你,对此很抱歉

  • 我正在使用最新的JMeter 3.3运行最新的Selenium WebDriver测试,一切似乎都很好, 我只有1个线程配置了1秒的爬升和1个循环计数,但是在webdriver执行完成后,JMeter并没有停止整个测试执行,而是无限期地继续执行测试,我不确定为什么会发生这种情况,我正在使用chromedriver,我所做的所有配置都是按照JMeter文档进行的,我还添加了命令位于脚本末尾。请参考附

  • 我使用Drools6.1.0.final和一个无状态会话来激发所有规则。 在我的.drl文件中有以下两个简单的规则。 我想这样做:如果第一个规则为true,则不执行任何其他规则,并从。drl文件退出。 我试着如下: > 试图在第一个规则的Then块中抛出运行时异常,但由于NullPointerException的原因,它仍然会在第二个规则中失败。 添加了drools.halt()和kcontext

  • 我在camelcontext.xml文件的主路由中配置了camel循环,它将调用请求处理路由3次。我还配置了onException xml处理程序(将handled设置为true)。但是,当第一次迭代出现异常时,执行控制会转到onException块,但是循环不会停止处理,相反,其他两次迭代(第二次和第三次)也会发生。