0

我是学习 Java 的新手。我大约一周前开始学习,每天花大约 10 个小时学习,我不确定我是否落后于我“应该”的地方(我正在处理的另一个问题)我知道我的代码可能不是最有效的,但我必须从某个地方开始,而且我已经从上周阅读的信息宇宙中输入了大部分内容。现在,我只是在尝试制作游戏或应用程序来帮助巩固编程概念。把我学到的东西用起来并使这些信息相关。

我的问题是,重要的是,为什么我的“if”语句直接指向“else”?

public class ClassSelect {

public static String className;

public static void pickPlayer() {

    Scanner scan = new Scanner(System.in);
    System.out.println("Pick your class." + "\n" + "[F]ighter" + "\n"
            + "[W]izard");
    String scanClass = scan.nextLine();

    if ((scanClass == "f") || (scanClass == "F")) {
        System.out.println("You picked the Fighter");
        String classNameF = "Fighter";
        className = classNameF;
        try {
            File file = new File("saveData.txt");
            BufferedWriter output = new BufferedWriter(new FileWriter(file));
            output.write(className);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    else if ((scanClass == "w") || (scanClass == "W")) {
        System.out.println("You picked the Wizard");
        String classNameW = "Wizard";
        className = classNameW;
        try {
            File file = new File("saveData.txt");
            BufferedWriter output = new BufferedWriter(new FileWriter(file));
            output.write(className);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        System.out.println("You didn't choose either.");
    }
}
4

4 回答 4

3

对于字符串比较,您必须使用类equals的方法Object。您的 if 语句将变为 -if(scanClass.equals("f"))...

请记住,==比较参考而不是实际对象。

于 2013-08-05T08:34:00.327 回答
0

始终使用 比较字符串equals

  • == 比较引用。

  • 另一方面,equals() 比较值。

    if ((scanClass.equals("f") || (scanClass.equals("F"))) 
    
于 2013-08-05T08:39:59.250 回答
0

您应该 scanClass.equalsIgnoreCase("f")在 if 语句中使用,因为==运算符比较引用而不是值。

于 2013-08-05T08:45:05.153 回答
0

运算符 == 测试两个对象引用变量是否引用了完全相同的对象实例。

方法 .equals() 测试以查看相互比较的两个对象是否相等——但它们不必是同一对象的完全相同的实例。所以

 if ((scanClass == "f") || (scanClass == "F")) 

评估为 false 并且控制转到 else 块。

于 2013-08-05T09:00:24.207 回答