如何测试HashSet是否包含TextField中的内容

时间:2013-12-20 03:54:21

标签: java jtextfield hashset

我一直在尝试测试我的文本字段是否包含我的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;
        }

    }

每当我尝试这个程序时它会崩溃,我不知道为什么

1 个答案:

答案 0 :(得分:0)

这不是崩溃,这是一个无限循环。程序变得没有响应,因为您可能正在ActionListener附加JTextFieldJButton执行此代码,而该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}}