循环不正常

时间:2013-10-18 11:41:14

标签: java

编辑:我更改了之前的代码,我将字符串与!=,与.equals()进行了比较,但它仍然是相同的。

我正在尝试制作初学者计算器。我陷入了无法解决的无限循环中。

首先我尝试了这个:

public void GetValues()
{
    System.out.println("Welcome to the \"Math Calculator\"\n");

    System.out.print("Type in the first number: ");
    int FirstNumber = Scan.nextInt();

    System.out.print("Type in the second number: ");
    int SecondNumber = Scan.nextInt();

    System.out.println("\nWhat operation would you like to do?\n");
    System.out.println("For addition, type \"+\"");
    System.out.println("For subtraction, type \"-\"");
    System.out.println("For multiplication, type \"*\"");
    System.out.println("For division, type \"/\"\n");

    MathOperation = Scan.next();

    while (MathOperation != "+" || MathOperation != "-" || MathOperation != "*" || MathOperation != "/")
     {
        System.out.print("The value you typed, is not valid. Type again: ");
        MathOperation = Scan.next();
     }

}

尽管如此,无论我输入什么内容,我仍然会收到此消息您输入的值无效。再次输入:

我无法弄明白。我错过了什么?

EDIT2:我将循环更改为:

    while (!IsEqual)
    {
        System.out.print("The value you typed, is not valid. Type again: ");
        MathOperator = Scan.next();

        if (MathOperator.equals("+") || MathOperator.equals("-") || MathOperator.equals("*") || MathOperator.equals("/"))
        {
            IsEqual = true;
        }
    }

现在它有效。感谢所有努力帮助我的人。干杯:)

4 个答案:

答案 0 :(得分:1)

更改此

if (MathOperation == "+" || MathOperation == "-" || MathOperation == "*" || MathOperation == "/")

        if (MathOperation.equals("+") || MathOperation..equals("-") || MathOperation.equals("*") || MathOperation.equals("/"))

答案 1 :(得分:1)

你应该通过第二次尝试获得你所获得的,即使你已经使用equals()正确地写了比较。

实质上你拥有的是

if (it's not all four math operations at the same time)
{
    "invalid"
}

if子句始终为真。

答案 2 :(得分:0)

您使用无效方法进行比较。

String不是基本类型Object。这意味着要将其与其他方法进行比较,您必须根据验证的元素从中调用方法equlas

"+".equals(mathOperation)

解决此问题的另一种方法是从Object移动到原始char结构。

char mathOperation = Scan.nextChar(); //Note that variables should start with small letter.

然后您可以使用==!=运算符来获取结果。

if (mathOperation != '+')

答案 3 :(得分:0)

当然,你应该总是使用.equals方法进行每个对象的比较(不仅仅是字符串)对对象执行==操作检查它们是否指向相同的内存空间,这与检查两个值是否相同是不同的。 / p>

如果你像我一样讨厌条件逻辑,你可以选择这样的事情:

Vector<String> allowedMathOperators = new Vector<String>();
allowedMathOperators.add("+");
allowedMathOperators.add("-");
allowedMathOperators.add("*");
allowedMathOperators.add("/");

String mathOperation = "";
Scanner scan = new Scanner(System.in);

do{
    System.out.println("What operation would you like to do?");
    mathOperation = scan.next();
}while( !allowedMathOperators.contains( mathOperation ));

我的解决方案的优点是,如果您决定添加对附加运算符的支持,那么您不必扩展条件逻辑,只需将char添加到allowedMathOperators :)