[英]I am facing problems with java if statement nested in while loop
我是初学者。
我正在尝试使用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);
}
}
}
}
首先,我不知道这种类型的嵌套我现在只是在试验,所以也许这就是为什么我的方法对你们来说似乎有点不寻常。
现在,问题是每当我执行这段代码时,无限循环工作完美但它总是跳过if语句,无论我输入什么并开始再次循环指令。
请帮我解决一下这个。
采用
method.equalsIgnoreCase("exit")
比method == "exit"
equalsIgnoreCase
比较内容,但==
比较引用,在你的情况下,引用与你使用scan.nextLine();
这会创建一个新的String对象。
比较字符串时,需要使用.equals()
方法,因此,在您的情况下,您需要将method == "exit"
更改为method.equals("exit")
。 这同样适用于其他if
语句。
您可以查看此 Oracle教程,以获取有关字符串比较的更多信息。
如果使用==
来比较字符串,这将比较对象的引用,在这种情况下,它将始终返回false。 如果您实际上没有看到这种情况,那么您没有其他地方而只有其他地方,并且它会继续进行下一次迭代。
将其更改为.equals()
方法以比较对象值而不是引用。
边注
请注意参考比较,因为您可能已经看到了使用引用相等性的奇怪示例,这可能会引发您(这对我来说肯定是第一次,如下面的示例所示)。
String a = "Hello";
String b = "Hello";
如果你在这种情况下比较a == b
它实际上会返回true,这是因为Java缓存了字符串,因此在这种情况下它们具有相同的引用。 当你看到这样的例子时要小心,因为它们是例外。
使用method.equals("exit")
进行字符串比较。
看这篇文章。
==它对象的测试引用相等。
等于(字符串)这是一种方法,在String
类两个字符串的内容进行比较。
在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
来检查字符串相等性。
这是所有初学者的问题。 我开始的时候就做过了。 这里的问题是
等于运算符==
这里不应该用来比较两个字符串。 因为它用于检查任何两个对象没有区别但是同一个实例。 即
Object O1 = new Object()
Object o2 = o1
这里
o1 == o2
将评估为真。 因为他们检查参照平等。
在string的情况下,当您比较字符串的内容时,您应该始终将theme与之比较
等于
方法或
equalsIgnoreCase
如果你不为这个案子烦恼。 上帝保佑。 干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.