我是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;
}
答案 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);
返回值始终为false
(isCorrectGuess(guess)
返回false
或isPriorGuess(guess)
将返回true
)。在案例2中,由于isPriorGuess(guess)
只被调用一次(而isCorrectGuess(guess)
被称为0或1次,具体取决于isPriorGuess(guess)
的值),因此不会发生这种情况。
答案 1 :(得分:0)
在第一个示例中,如果每个if条件都将被计算,则保守,如果为true,则执行正文,但如果条件计算为true,则不会检查其他情况。