虽然while循环错误
嘿家伙我在这里有一个程序,其中用户需要猜测程序本身要求的单词。这些代码没有语法错误,但我的问题在于,每次输入正在请求的正确单词时,JOptionPane(ErrorMessage)仍然出现。虽然while循环错误
我想要发生的是,用户只能进行5次试验,一旦用户在最后一次试验中输入了错误的单词,就应该显示正确的单词。一旦用户输入正确的单词,它应该转到下一个单词。请帮我解决这个问题,我已经在这里呆了3个小时了。非常感谢你。
private void guessedWordActionPerformed(java.awt.event.ActionEvent evt) {
int trials = 5;
boolean tryAgain = true;
do{
if (wordLibrary.isCorrect(wordIdx, guessedWord.getText())){
JOptionPane.showMessageDialog(null, "Your answer is correct! Guess another word.","", JOptionPane.INFORMATION_MESSAGE);
getRootPane().setDefaultButton(nextTrial);
guessedWord.setText("");
wordIdx = (wordIdx + 1) % wordLibrary.getSize();
scrambledWord.setText(wordLibrary.getScrambledWord(wordIdx));
guessedWord.setText("");
getRootPane().setDefaultButton(guessButton);
guessedWord.requestFocusInWindow();
tryAgain = false;
}
else if (!wordLibrary.isCorrect(wordIdx, guessedWord.getText())) {
JOptionPane.showMessageDialog(null, "Your answer " + guessedWord.getText() + " is wrong.\n Number of trials remaining: " + trials ,
"Incorrect Answer", JOptionPane.ERROR_MESSAGE);
trials--;
guessedWord.setText("");
tryAgain = true;
}
}while(tryAgain && trials > 0);
guessedWord.requestFocusInWindow();
}
//This is the isCorrect method
public boolean isCorrect(int idx, String userGuess) {
return userGuess.equalsIgnoreCase(getWord(idx));
}
当你第一次给一个错误的答案,guessedWord的文字变成了空字符串“”,所以在接下来的迭代中,它永远不会等于给定词,因为你与guessedWord.getText()
现在将得到的字符串是“”。
你需要问用户一个新单词,然后得到新单词!
例如,你可以设置你的类私有变量int trials
,用5初始化(在main方法),另一种,boolean tryAgain
与真正的初始化。然后上面的方法可写为:
private void guessedWordActionPerformed(java.awt.event.ActionEvent evt){
if (tryAgain && trials > 0) {
if (wordLibrary.isCorrect(wordIdx, guessedWord.getText())){
JOptionPane.showMessageDialog(null, "Your answer is correct! Guess another word.","", JOptionPane.INFORMATION_MESSAGE);
getRootPane().setDefaultButton(nextTrial);
guessedWord.setText("");
wordIdx = (wordIdx + 1) % wordLibrary.getSize();
scrambledWord.setText(wordLibrary.getScrambledWord(wordIdx));
guessedWord.setText("");
getRootPane().setDefaultButton(guessButton);
guessedWord.requestFocusInWindow();
tryAgain = false;
} else {
trials--;
JOptionPane.showMessageDialog(null, "Your answer " + guessedWord.getText() + " is wrong.\n Number of trials remaining: " + trials ,
"Incorrect Answer", JOptionPane.ERROR_MESSAGE);
guessedWord.setText("");
tryAgain = true;
}
} else {
//show "the correct word was..."
}
guessedWord.requestFocusInWindow();
}
感谢您的建议,但它仍然无效。我试图删除guessedWord.setText(“”);并用else语句替换else else – user3261887
重点是guessedWord.getText()不会获得新文本,但始终是相同的。你应该在调用'guessedWordActionPerformed()'方法的时候把do while循环(我猜这是一个Listener)。 'guessedWordActionPerformed()'是一个布尔方法,它只是调用'wordLibrary.isCorrect(wordIdx,guessedWord.getText())'。当它返回5次错误时,用户输掉。 – vefthym
我用更简单的方式更新了我的答案... – vefthym
这发生在您执行的操作中。当你循环时,你不会给用户任何时间输入新的信息。
为什么你想在这里循环?你不需要它。只需检查一次。如果他们错了,更改组件并等待ActionPerformed
再次被调用。
如果你想给出最大数量的试验,那么你应该使用某种形式的非局部变量来存储它。
我们可以看到isCorrect的代码吗?它可能总是返回错误。 –
我会把5美元比作字符串而不是equals()! –
...或equalsIgnoreCase()... – vefthym