【问题标题】:If comparison in Java miss [duplicate]如果Java中的比较错过[重复]
【发布时间】:2013-06-15 22:51:28
【问题描述】:

我有一部分代码应该这样做: 1)从键盘上取一种颜色的名字 2)将该颜色赋予一个对象,其中我有另一个对象声明 3) 将2的数组对应的行从2减1。

在主类中,我想在变量 TemporaryColor 中记住颜色。

Scanner input = new Scanner(System.in);
String TemporaryColor = input.nextLine();
playerOrd[1].DecrementoSegnalino(TemporaryColor);

playerOrd 是一个包含此方法的类:

public void DecrementoSegnalino(String color) {
    SegnalinoScommessaGiocatore.decrementaSegnaliniScommessa(color);    
}

SegnalinoScommessaGiocatore 有这个数组:

private int[] numeroSegnaliniScommessa = {2,2,2,2,2,2};

还有这个方法:

public void decrementaSegnaliniScommessa(String color) {
    if (color.equalsIgnoreCase("Black") numeroSegnaliniScommessa[0]--;
    if (color.equalsIgnoreCase("Blue") numeroSegnaliniScommessa[1]--;
    if (color.equalsIgnoreCase("Green") numeroSegnaliniScommessa[2]--;
    if (color.qualsIgnoreCase("Red") numeroSegnaliniScommessa[3]--;
    if (color.equalsIgnoreCase("Yellow") numeroSegnaliniScommessa[4]--;
    if (color.equalsIgnoreCase("White") ) numeroSegnaliniScommessa[5]--;    
    }

传递我用键盘编写的字符串时出现问题... 如果我一开始就用这个:

playerOrd[1].DecrementoSegnalino("Black");

有效!

有什么问题?

【问题讨论】:

    标签: java if-statement compare


    【解决方案1】:

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

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

    做,

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

    或者,

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

    【讨论】:

    • 制作社区维基,因为这个问题已经被问过很多次了。
    • 我之前粘贴过旧代码。我使用了equals(我编辑了帖子),但问题仍然存在!正如我所说,如果我写: playerOrd[1].DecrementoSegnalino("Black");比较成功
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2011-05-05
    相关资源
    最近更新 更多