我有一个名为updatedDisplay的字符串,该字符串在构造函数中设置为空。
button []是JButtons,alarmCode是String字段。
我希望用户按下四个按钮(它们应该串联起来并存储在updatedDisplay字段中)。
执行checkCode()方法以尝试将updatedDisplay与alarmCode进行匹配。麻烦的是,它们永远都不匹配。我最初以如下方式声明updatedDisplay时,可能与“空格”有关:
私有字符串UpdatedDisplay =“”;
UpdatedDisplay字段似乎没有存储e.getActionCommand()值。
//add actionListeners to each button (except the "clear" button) to display value on screen
for (int i = 0; i< (buttons.length -1); i++) {
buttons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//store the name of the button in a local variable
String command = e.getActionCommand();
System.out.println("You clicked " + command);
updatedDisplay = updatedDisplay + command;
//updatedDisplay = command;
System.out.println (updatedDisplay);
screen.setText(updatedDisplay);
}
});}
我有一个armButton,按下该按钮时应触发checkCode()方法。该方法检查updatedDisplay和alarmCode是否相等:
//add actionListener to the arm button
armButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
checkCode();
}
});
checkCode():
public void checkCode() {
//check if user entered the correct code
if (updatedDisplay == alarmCode)
{
updatedDisplay = "System Armed!";
screen.setText(updatedDisplay);
}
else
{
updatedDisplay = "Incorrect Code, Try again!";
screen.setText(updatedDisplay);
}
}
即使当我将按钮按下输出到终端窗口时,它们看起来也正确-但是正如我所说,我怀疑开始时正在输入“空格”。
有任何想法吗?
最佳答案
解
尝试:
if( updatedDisplay.equals( alarmCode ) { // ...
比较方式
要了解这一点,请阅读:
http://leepoint.net/notes-java/data/expressions/22compareobjects.html
摘要
由于
updatedDate
和alarmCode
是对象引用,因此必须要求对象比较它们的值。您可以将它们视为指针,其值是内存中包含字符串的位置。而不是比较指针(引用)的值,而是要比较从该内存位置开始的文本。