检查TextField是否等于ArrayList中的元素

时间:2013-06-08 22:05:03

标签: java arraylist textfield

我让用户输入到Applet中的TextField,我想检查他们输入的String是否等于答案的ArrayList中的相应元素,但是我得到一个很大的编译时错误:

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at com.game.main.AppletMain.actionPerformed(AppletMain.java:72) // etc

这是代码,Main类(我已经编辑出了不重要的部分:

private TextField commandInput;
private TextArea messageDisplay;
private Message messages;
private Answer answers;
private int currentLevel;

@Override
public void actionPerformed(ActionEvent e) {
    String userInput = commandInput.getText();
    if (userInput == answers.getIntroAnswers().get(0)) {
        messageDisplay.append("\n \n" + userInput + "\n \n");
        commandInput.selectAll();
    }
    getCurrentLevel();
}

这是包含ArrayList的Answers类:

package com.game.main;

import java.util.ArrayList;

public class Answer {

private ArrayList<String> introAnswers;
private String introAns1 = "go", introAns2 = "Go";

public Answer() {
    introAnswers = new ArrayList<String>();
    introAnswers.add(introAns1);
    introAnswers.add(introAns2);
}

public ArrayList<String> getIntroAnswers() {
    return introAnswers;
}

}

4 个答案:

答案 0 :(得分:1)

您创建了对Answer类型对象的引用,但您从未为其分配过新对象

private Answer answers;

您可以在构造函数中执行此分配,只需执行一次,或者每次单击按钮时都必须创建新对象。
我假设您的班级名称是Cons

public Cons(){
 answer = new Answer();
//...
}

答案 1 :(得分:0)

您是如何构建GUI的?你得到的错误会让我猜测你在尝试调用它们之前没有实例化Answers对象。要解决此问题,请确保已初始化answers-variable以保存Answer对象的实例。

此外,还需要考虑比较字符串。

==是比较引用相等性的运算符,它测试两个变量是否指向同一个对象。比较字符串时,始终使用equals() - 方法。像这样:

String a = "asd";
String b = "asdasd";
String c = "asd";
a.equals(b); // would equal false
c.equals(a); // true

答案 2 :(得分:0)

String是一个对象,因此==只比较引用,而不是它们的内容。尝试 :answers.getIntroAnswers().get(0).equals(userInput)

答案 3 :(得分:0)

除了其他人所说的,在代码进入“answers.getIntroAnswers()。get(0)”之前,这是大多数人抛出可能为真的异常,我也认为“String userInput = commandInput.getText ();”因为在提供的代码中没有初始化该文本字段,所以很有可能抛出异常......