我是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;
}

最佳答案

您的问题被标记为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)的值)。

10-06 04:23