连续if和嵌套if之间的区别是什么?

时间:2016-12-18 03:04:14

标签: java if-statement

我是Java新手。这是我的两个代码。

1)。

    if (!isCorrectGuess(guess) && !isPriorGuess(guess)){
        state += 1;
    }

    if( isCorrectGuess(guess) && !isPriorGuess(guess)){
        correctguess += guess;
    }

    if (!isPriorGuess(guess)){
        guessed += guess;
    }

    return isCorrectGuess(guess) && !isPriorGuess(guess);

2)。

    if (!isPriorGuess(guess)){
        guessed += guess;
        if (isCorrectGuess(guess)){
            correctguess += guess;
            return true;
        }
        else{
            state += 1;
            return false;
        }
    }
    return false;

我认为他们应该有相同的结果,但似乎我错了。谁能告诉我这两个代码之间的区别是什么?谢谢!

这是我的作业,第一个代码未通过测试,但第二个代码未通过。

这是我的isCorrect和isPrior的代码:

public boolean isCorrectGuess(char guess) {
    return guessWord.indexOf(guess) != -1;
}

public boolean isPriorGuess(char guess) {
    return guessed.indexOf(guess) != -1;
}

2 个答案:

答案 0 :(得分:2)

您的问题已标记为Javascript,但您的问题是Java。它们完全不一样,但我对两种语言的回答都是一样的。

假设isCorrectGuess()isPriorGuess()idempotent(每次调用时表现相同)并且没有副作用,这两种情况之间的唯一区别(就我而言)可以告诉)是两个函数被调用的次数和顺序。对各种变量和返回值的影响似乎相同。

编辑您对该问题的编辑解释了为什么这两个案例不一样。对isPriorGuess()的调用依赖于guessed的当前值,该值随着案例1和案例2的执行而变化。特别是,假设在任何一个案例执行之前,isPriorGuess(guess)返回false并且isCorrectGuess(guess)返回true。然后在案例1中,代码

if (!isPriorGuess(guess)){
    guessed += guess;
}

更改guessed的值,以便在后续调用中,isPriorGuess(guess)将返回true。因此,执行return语句时:

return isCorrectGuess(guess) && !isPriorGuess(guess);

返回值始终为falseisCorrectGuess(guess)返回falseisPriorGuess(guess)将返回true)。在案例2中,由于isPriorGuess(guess)只被调用一次(而isCorrectGuess(guess)被称为0或1次,具体取决于isPriorGuess(guess)的值),因此不会发生这种情况。

答案 1 :(得分:0)

在第一个示例中,如果每个if条件都将被计算,则保守,如果为true,则执行正文,但如果条件计算为true,则不会检查其他情况。