当我输入任何有效选项(A,B,C)时,if语句认为该选项不是A,B或C,而是会导致连续循环。
package other;
import java.util.Scanner;
public class Menu implements InterfaceMenu{
private String option;
public void greeting(){
System.out.println("This program will use the Pythagorean Theorem");
System.out.println("to calculate a missing side.\n");
System.out.println("Choose an option!\n");
System.out.println("Choose Option A for missing side c");
System.out.println("Choose Option B for missing side b");
System.out.println("Choose Option C for missing side a\n");
}
public String optionGet(){
System.out.print("Choose an option: ");
Scanner ad = new Scanner(System.in);
option=ad.next().toUpperCase();
if( (option=="A") || (option=="B") || (option=="C") ){
ad.close();
}
else{
optionGet();
}
return option;
}
}
答案 0 :(得分:3)
除了使用错误的方法来比较字符串之外,还有另一个严重的问题:optionGet()
在Scanner
上打开一个新的system.in
。如果输入包含不是A,B或C的选项,则optionGet()
将自己递归调用。递归调用执行另一个
Scanner ad = new Scanner(System.in);
,而第一个仍然是。没有人知道它会做什么,但它可能会导致问题。不要那样做。不要使用递归。这里不合适。相反,将用于检查选项的代码放在循环中,并确保new Scanner
在循环之外。
答案 1 :(得分:0)
使用String.equals()
方法。不是==
比较器。 .equals()
检查字符串之间的相等性,==
检查引用是否相同,这不是您想要做的事情。
答案 2 :(得分:0)
使用option.equalsIgnoreCase("A")
代替==。因为==比较参考变量,等于比较内容。
答案 3 :(得分:0)
在Java字符串中,无法使用==
标识符进行比较,方法与整数相同。相反,您可以使用String.equals()
。
对于您所写的内容,但最好比较字符,但需要将optionGet()
中的返回变量类型更改为public char optionGet()
。但是,执行此操作还需要您将option
的类型更改为char
。将类型更改为char
将允许您使用==
比较字符。
另外请务必在Scanner ad
之外定义optionGet()
,因为您当前的代码正在为每次重复重新定义。
您对自己的想法更容易。