【问题标题】:Java input failure [duplicate]Java输入失败[重复]
【发布时间】:2012-09-15 11:15:04
【问题描述】:

可能重复:
How do I compare strings in Java?

我做错了什么?在我编译并运行程序后,我输入我的输入,不管它是什么,程序总是把它当作错误的输入并说我错了,在这里:

import java.util.Scanner;

public class mena3 {

    public static void main(String[] args) {
        Scanner user_input = new Scanner(System.in);

        String Capitol;
        System.out.print("Enter the capitol of Morocco: ");
        Capitol = user_input.next();

        if(Capitol == "Rabat") {
            System.out.println("Good Job!");
        }
        else {
            System.out.println("That is incorrect");
        }
    }
}

在我输入拉巴特之后,它说那是不正确的。如果我输入 l,它会说那是不正确的。为什么我赢不了?

【问题讨论】:

    标签: java string java.util.scanner


    【解决方案1】:

    不要使用== 比较字符串。请改用equals(...)equalsIgnoreCase(...) 方法。了解 == 检查两个 objects 是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,并且这就是这里重要的事情。所以不是

    if (fu == "bar") {
      // do something
    }
    

    做,

    if ("bar".equals(fu)) {
      // do something
    }
    

    或者,

    if ("bar".equalsIgnoreCase(fu)) {
      // do something
    }
    

    投票结束这个问题,因为它在这个网站上只被问过和回答了无数次。

    【讨论】:

    • 您的打字速度令人难以置信。
    • 他可能已经预先写好了这个答案,因为这个问题被问的频率>_
    • +1 速度。是的 - 这个问题的核心可能是这个网站上最常见的问题(我昨天才回答了一个)。我会把答案放在手边,这样我就可以复制粘贴它,这样我就可以“赢得”答案了:)
    【解决方案2】:

    java 中最常见的错误之一。字符串需要 .equals() 而不是 ==

    错误:

    if (str == "foo") {
    
    }
    

    对:

    if ("foo".equals(str)) { // done in this order to avoid NPE
    
    }
    

    【讨论】:

    • -1 其实你错了! "a" == "a" 永远是真的!
    • “慢”打字,但无论如何都要 +1 投票。
    【解决方案3】:

    你的代码是完美的,只是你的比较方法是错误的。所有其他语言都将== 视为比较运算符。但在 Java 的情况下,它有点棘手。在 Java 中,== 被视为对象的比较运算符,而不是字符串变量。

    所以,要比较两个字符串,您有一个名为 `.equals() 的方法,它来自它自身的 String 类。

    因此您需要相应地更改您的代码,

    import java.util.Scanner;
    
    public class mena3 
    {
        public static void main(String[] args) 
        {
            Scanner user_input = new Scanner(System.in);
    
            String Capitol;
            System.out.print("Enter the capitol of Morocco: ");
            Capitol = user_input.next();
    
    //        if(Capitol == "Rabat")  // your previous code
            if(Capitol .equals ( "Rabat") ) // new updated comparison code
            {
                System.out.println("Good Job!");
            }
            else 
            {
                System.out.println("That is incorrect");
            }
        }
    }
    

    【讨论】:

    • 你有点慢......其他答案已经在你之前 7 分钟出现了,他们说的是同样的话
    • 谢谢大家,很抱歉这个问题问得太频繁了,感谢您的耐心回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2019-07-18
    相关资源
    最近更新 更多