我一直在尝试测试我的文本字段是否包含我的hashset中的内容但由于某种原因它在这里不起作用是我的代码:
int WrongCounter = 0;
int RightCounter =1;
boolean isOver = false;
while(!isOver){
question.setText("You have a "+RandomWord.length()+" letter word " + set);
char input = scan.next().charAt(0);
hangMan(WrongCounter);
if(set.contains(ansField.getText().charAt(0))){
set.remove(ansField.getText().charAt(0));
right.setText("You are right");
RightCounter++;
}
else if(!(set.contains(ansField.getText().charAt(0)))){
right.setText("You are wrong!");
WrongCounter++;
}
if(set.size()==0||WrongCounter ==8){
isOver = true;
hangMan(WrongCounter);
}
这是hangMan方法
private void hangMan(int wrongCounter) {
switch(wrongCounter){
case 1:
hangMan.setText(" -------|\n |\n |\n |\n___|___");
break;
case 2 :
hangMan.setText(" -------|\n |\n |\n |\n___|___");
break;
case 3:
hangMan.setText(" -------|\n | O\n |\n |\n___|___");
break;
case 4 :
hangMan.setText(" -------|\n | O\n | /\n |\n___|___");
break;
case 5:
hangMan.setText(" -------|\n | O\n | /|\n |\n___|___");
break;
case 6 :
hangMan.setText(" -------|\n | O\n | /|\\\n |\n___|___");
break;
case 7 :
hangMan.setText(" -------|\n | O\n | /|\\\n | /\n___|___");
break;
case 8 :
hangMan.setText(" -------|\n | O\n | /|\\\n | / \\n___|___");
break;
}
}
每当我尝试这个程序时它会崩溃,我不知道为什么
答案 0 :(得分:0)
这不是崩溃,这是一个无限循环。程序变得没有响应,因为您可能正在ActionListener
附加JTextField
或JButton
执行此代码,而该char input = scan.next().charAt(0);
由EDT线程调用。
GUI java应用程序与控制台应用程序不同,涉及多个线程,您不应该像示例中那样使用循环来阻止事件线程。你有一些未使用的代码:
actionPerformed
在您的控制台版本中阻止输入。现在你不再需要一个循环,因为它是用户本身,它将在用户界面上重复操作并多次调用actionPerformed
方法。
你想做什么?验证输入的文本是隐藏单词的排列?或者只是检查第一个字符?在这两种情况下,您都应该删除循环并将变量存储在int wrongCounter = 0;
int rightCounter = 0;
public void actionPerformed(ActionEvent e) {
char currentCharacter = textField.getText().charAt(0);
if (set.contains(currentCharacter)) {
++rightCounter;
// whatever
}
else {
++wrongCounter;
}
if (set.size() == 0 || wrongCounter == 8)
hangMan(); // doesn't need parameter anymore, it's outside the method
}
方法之外:
{{1}}