2

我是初学者。

我正在尝试使用 java while 循环。我了解 java while 循环和 if 语句,但以前从未嵌套过它们。我将首先发布脚本,然后告诉大家问题所在。

这是脚本:

import java.util.Scanner;
class whileloop{
    public static void main(String args[]){
        Scanner scan = new Scanner(System.in);
    System.out.println("This is a basic calculator.");
    System.out.println("To exit, input exit when asked to input the method.");
    System.out.println("----------------------------------------------");
    while (true){
        System.out.println("to add, input '+', to subtract, input '-', to divide, input '/', to multiply, input '*' and to exit, input 'exit.'");
        System.out.println("----------------------------------------------------");
        System.out.print("Please enter a method here:");
        String method = scan.nextLine();
        if (method == "exit"){
            System.out.println("You chose to exit.");
            break;
        }
        else if (method == "+"){
            System.out.println("You chose to add.");
            System.out.print("Please enter first number here:");
            double fnum = scan.nextInt();
            System.out.print("Please enter second number here:");
            double snum = scan.nextInt();
            double ans = fnum + snum;
            System.out.print("The answer is");
            System.out.println(ans);
        }
    }
}
}

首先,我对这种类型的嵌套一无所知,我现在只是在试验,所以也许这就是为什么我的方法对你们来说可能有点不寻常。

现在,问题是每当我执行这段代码时,无限的while循环工作得很好,但无论我输入什么,它总是跳过if语句并再次开始循环指令。

请帮我解决一下这个。

4

7 回答 7

5

use

method.equalsIgnoreCase("exit") rathe than method == "exit"

equalsIgnoreCase compares contents but == compares references and in you case references would not be same as you are using scan.nextLine(); which creates a new String Object.

于 2012-07-27T09:54:37.710 回答
5

When comparing strings, you need to use the .equals() method, so, in your case, you need to change method == "exit" to method.equals("exit"). The same applies for the other if statement.

You can take a look at this Oracle tutorial for more information on String comparison.

于 2012-07-27T09:54:55.680 回答
5

如果您使用==比较字符串,这将比较对象的引用,在这种情况下,在您的情况下它将始终返回 false。因为你没有 else 并且只有一个 else 如果你实际上没有看到这种情况发生并且它继续到下一次迭代。

将其更改.equals()为比较对象值而不是引用的方法。

边注

请注意参考比较,因为您可能已经看到使用参考相等的奇怪示例,这可能会让您感到困惑(这对我来说肯定是第一次,如下面的示例所示)。

String a = "Hello";
String b = "Hello";

如果a == b在这种情况下进行比较,它实际上会返回 true,这是因为 Java 缓存了字符串,因此在这种情况下它们确实具有相同的引用。当你看到这样的例子时要小心,因为它们是例外。

于 2012-07-27T09:57:56.010 回答
3

用于method.equals("exit")字符串比较。

看到这个帖子。

于 2012-07-27T09:53:16.327 回答
1

==对象的测试引用相等性。

equals(String)这是类中比较两个字符串内容的方法。String

于 2012-07-27T10:01:21.300 回答
1

在 java 中,==表示检查reference equality ,数字除外。(见下面的评论)

Object obj1 = new Object();//toString: java.lang.Object@459189e1 <--|
                                                                  //|- different addresses
Object obj2 = new Object();//toString: java.lang.Object@55f33675 <--|
obj1 == obj2; //false, because they are difference objects, difference references.

obj1 = obj2;
obj1 == obj2; //true, they are now pointing to the same object

因此,您需要使用.equals来检查字符串是否相等。

于 2012-07-27T10:01:34.433 回答
1

这是所有初学者都会遇到的问题。我开始时已经这样做了。这里的问题是

相等运算符 ==

此处不应用于比较两个字符串。因为它用于检查任何两个对象没有不同但属于同一个实例。IE

Object O1 = new Object()
Object o2 = o1

这里

o1 == o2

将评估为真。因为他们检查引用相等。

在字符串的情况下,当您比较字符串的内容时,您应该始终将它们与

等于

方法或

等于忽略大小写

如果你不关心这个案子。上帝保佑。干杯。

于 2012-07-27T10:04:01.657 回答