我正在尝试构建一个基本游戏,用户对州首府的知识进行测试。在这个阶段,我只是尝试为按钮设置一些基本功能。
我正在尝试这样做,以便当用户输入对应于正确答案的字符串时,程序显示“正确!”。我尝试过使用IF ELSE语句,但即使输入正确的答案,它也输出“错误!”。它可能很简单但我无法发现它。如果有人能指出我正确的方向,将非常感激。我是一个非常初学者,所以也许这完全是错误的方式,但到目前为止这是我所拥有的:
public class Main {
public static void main(String[] args){
Gui a = new Gui();
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Gui extends JFrame{
private static final long serialVersionUID = 1L;
JPanel row1 = new JPanel();
JLabel instructions = new JLabel("What is the capital of Alabama?");
JPanel row2 = new JPanel();
JLabel aLabel = new JLabel("Answer: ");
JTextField aField = new JTextField(14);
JPanel row3 = new JPanel();
JButton submit = new JButton("Submit");
JButton reset = new JButton("Reset");
public Gui() {
super("State Capitals Game");
setLookAndFeel();
setSize(400, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.insets = new Insets(5,5,5,5);
gc.gridx = 0;
gc.gridy = 0;
add(instructions, gc);
gc.gridx = 0;
gc.gridy = 1;
add(aLabel, gc);
gc.gridx = 0;
gc.gridy = 2;
add(aField, gc);
gc.gridwidth = 3;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 4;
add(submit, gc);
///this is where I'm stuck////
submit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String userIP = aField.getText();
String mg = "Montgomery";
if(userIP == mg){
System.out.println("correct!");
}else{
System.out.println("WRONG!");
}
}
});
gc.gridwidth = 3;
gc.fill = GridBagConstraints.HORIZONTAL;
gc.gridx = 0;
gc.gridy = 5;
add(reset, gc);
reset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
reset.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "pressed");
aField.setText("");
}
});
}
private void setLookAndFeel() {
try {
UIManager.setLookAndFeel(
"com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
);
} catch (Exception exc) {
// ignore error
}
}
}
答案 0 :(得分:2)
比较字符串时,应使用equals()方法:
String mg = "Montgomery";
if(userIP.equalsIgnoreCase(mg)){ // like this
System.out.println("correct!");
}else{
System.out.println("WRONG!");
}
否则你不会比较字符串的内容,而是比较不是你想要的引用
编辑:
实际上,你可能想要的是使用equalsIgnoreCase()
,因为如果用户输入“montgomery”,它将抛出一个假,因为equals是区分大小写的。你可以找到api here
答案 1 :(得分:1)
您不应该使用==
比较字符串,而应使用equals
,例如
if(userIP.equals(mg)){
==
等式运算符测试物理相等性(即左右操作数引用相同的对象),而不是值相等(即左右操作数引用具有相同值的对象)。
答案 2 :(得分:1)
经典错误:使用equals
来比较字符串,而不是==
。
答案 3 :(得分:1)
在比较String
个对象时,解决方案很简单,您必须使用.equals()
方法。
所以你会:
if(str1.equals(str2)) {
//code goes here
}
实际上,在比较任何类型的java对象时,通常必须使用equals方法。但请注意,对于某些人,必须创建自定义比较器,或覆盖compareTo方法。但这只是额外的信息。
答案 4 :(得分:1)
您可以比较为
如果(userIP.equals(毫克))
答案 5 :(得分:1)
好的,首先你不应该将字符串与==进行比较!用户等于()。
在你的情况下,如果(mp.equals(userIP)){...
答案 6 :(得分:1)