比较while循环中的字符串

时间:2016-02-01 21:38:06

标签: java string-comparison

我正在尝试编写一个代码,将用户字符串与字符串'm'或'f'进行比较,如果用户的回答与字母不匹配则重复循环

    public static void main(String[] args) {

    String om = JOptionPane.showInputDialog("I will calculate the number of chocolate bar you should eat to maintain your weigth\n"
            + "Please enter letter 'M' if you are a Male\n"
            + "'F' if you are a Female");
    JOptionPane.showMessageDialog(null, om.equalsIgnoreCase("m"));
// if i don't do this, it says the variables have not been initialized
    boolean m = true;
    boolean f = true;
    if (om == "m"){
     m = om.equalsIgnoreCase("m");
    } else if ( om == "f"){
     f = om.equalsIgnoreCase("f");
    }
    JOptionPane.showMessageDialog(null, "The m is: " + m);
    JOptionPane.showMessageDialog(null, "The f is: " + f);
//if the user enters one variable the other variable becomes false, thus 
 // activating the while loop
    while (m == false || f == false){
        om = JOptionPane.showInputDialog("Please enter letter 'M' if you are a Male\n"
                + "'F' if you are a female");


    }
  /* i tried using '!=' to compare the string that doesn't work, i tired converting the strings to number to make it easier something like the code below:

int g = 2;
if (om = "m"){
g = 0
}
while (g != 0){

}

无效

所以我尝试使用boolean,但是如果用户没有输入一个字母,则另一个字母变为false并激活while循环

5 个答案:

答案 0 :(得分:1)

您应该将字符串与

进行比较
string1.equals(string2)

不是

string1 == string2

答案 1 :(得分:0)

您必须对字符串使用以下内容:

if (om.equalsIgnoreCase("m") {
    ....
}

当您使用==时,您正在比较值指向的引用,而.equals()正在比较实际的。< / p>

例如:

String a = "foo";
String b = "foo";

a == b  // This will return false because it's comparing the reference
a.equalsIgnoreCase(b)  // This however will return true because it's comparing the value

答案 2 :(得分:0)

请勿使用==来比较字符串,请使用等号。

也是测试

m == false || f == false

不是你想要的,它总是评估为真:

  • 如果您输入“&#39; M&#39;然后(f == false)评估为真。

  • 如果您输入&#39; F&#39;然后(m == false)评估为真。

  • 如果您输入&#39; X&#39;那么(m == false)为真,(f == false)为真。

逻辑OR表示如果A为真,或者B为真,则A OR B为真。

它应该是(!m && !f),这意味着&#34;您的输入不是&#39; M&#39;而你的输入不是&#39; F&#39;&#34;。

或等效地,将其写为!(m || f):&#34;输入不是&#39; M&#39;或者&#39; F&#39;&#34;。

答案 3 :(得分:0)

除了将运算符从==更改为.equals()之外,您还需要确定在测试验证之前是否将它们都设置为true。我会将它们设置为false,因此您无需更改验证语句中boolean mboolean f的值。

    boolean m = true;
    boolean f = true;

    if (om == "m"){
     m = om.equalsIgnoreCase("m");
    } else if (om == "f"){
     f = om.equalsIgnoreCase("f");
    }

可能是

    boolean m = false;
    boolean f = false;

    if (om.equalsIgnoreCase("m")){
     m = true; //do not need to address the f because its already false.
    } else if (om.equalsIgnoreCase("f")){
     f = true;
    }

它更快更容易阅读。

答案 4 :(得分:-1)

尝试将布尔变量设置为False。

boolean m = false;  boolean f = false;

这应该会给你想要的结果。