我遇到了java if if语句嵌套在while循环中的问题

时间:2012-07-27 09:52:11

标签: java

我是初学者。

我正在尝试使用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语句并再次开始循环指令。

请帮我解决这个问题。

7 个答案:

答案 0 :(得分:5)

使用

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

更高

equalsIgnoreCase比较内容,但==比较引用,在你的情况下,引用与使用scan.nextLine();创建新String对象的引用不同。

答案 1 :(得分:5)

比较字符串时,您需要使用.equals()方法,因此,在您的情况下,您需要将method == "exit"更改为method.equals("exit")。这同样适用于其他if语句。

您可以查看this Oracle教程,了解有关字符串比较的更多信息。

答案 2 :(得分:5)

如果使用==来比较字符串,则会比较对象的引用,在这种情况下,它将始终返回false。因为如果你实际上没有看到这种情况,你就没有别的东西而只有其他东西,并且它会继续进行下一次迭代。

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

旁注

请注意参考比较,因为您可能已经看到了使用引用相等性的奇怪示例,这可能会引发您(这对我来说第一次确实如此,如下面的示例所示)。

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

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

答案 3 :(得分:3)

使用method.equals("exit")进行字符串比较。

请参阅this帖子。

答案 4 :(得分:1)

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

equals(String)这是String类中的method,用于比较两个字符串的内容。

答案 5 :(得分: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来检查字符串相等性。

答案 6 :(得分:1)

这是所有初学者的问题。我开始的时候就做过了。这里的问题是

  

等于运算符==

不应该用于比较两个字符串。因为它用于检查任何两个对象没有区别但是同一个实例。即

Object O1 = new Object()
Object o2 = o1

这里

  

o1 == o2

将评估为真。因为他们检查参照平等。

对于字符串,当您比较字符串的内容时,您应该总是将

进行比较
  

等于

方法或

  

equalsIgnoreCase

如果你对案件不感兴趣。上帝保佑。欢呼声。