0

编辑:我将之前的代码更改为将字符串与 !=, 进行比较的代码为 .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();
     }

}

尽管如此,无论我输入什么,我仍然会收到此消息The value you type, is not valid。再次输入:

我就是想不通。我错过了什么?

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

4 回答 4

1

改变这个

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

        if (MathOperation.equals("+") || MathOperation..equals("-") || MathOperation.equals("*") || MathOperation.equals("/"))
于 2013-10-18T11:45:11.293 回答
1

即使您使用equals().

本质上你所拥有的是

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

if子句始终为真。

于 2013-10-18T11:47:30.073 回答
0

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

如果你也像我一样讨厌条件逻辑,你可以这样做:

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 :)

于 2013-10-18T12:05:41.403 回答
0

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

String 不是原始类型,它是Object. 这意味着要将其与其他元素进行比较,您必须针对已验证的元素调用equlas它的方法。

"+".equals(mathOperation)

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

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

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

if (mathOperation != '+')

于 2013-10-18T11:48:18.667 回答