我是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);
返回值将始终为
false
(isCorrectGuess(guess)
返回false
或isPriorGuess(guess)
将返回true
)。在情况2中,这不会发生,因为isPriorGuess(guess)
仅被调用一次(而isCorrectGuess(guess)
被调用0或1次,具体取决于isPriorGuess(guess)
的值)。