出于某种原因,当我有多个正确的字符串时,该语句不断重复
do {
System.out.println("Enter Service Code");
Scanner a = new Scanner(System.in);
serviceCode = a.nextLine();
} while (!serviceCode.equals("ORB1") || !serviceCode.equals("ORBH") ||
!serviceCode.equals("ISS5") || !serviceCode.equals("ILLOYDS") ||
!serviceCode.equals("DLAB") || !serviceCode.equals("LEOM7") ||
!serviceCode.equals("MOON2"));
但是,当代码只检查一个字符串时。 do while语句正常工作,并在输入正确的输入时停止循环
do {
System.out.println("Enter Service Code");
Scanner a = new Scanner(System.in);
serviceCode = a.nextLine();
} while (!serviceCode.equals("ORB1"));
答案 0 :(得分:1)
如果输入" ORB1","!serviceCode.equals(" ORB1")"将返回false但其他人将返回true;你正在使用" OR"运营商。所以,这句话:
!serviceCode.equals("ORB1") || !serviceCode.equals("ORBH") ||
!serviceCode.equals("ISS5") || !serviceCode.equals("ILLOYDS") ||
!serviceCode.equals("DLAB") || !serviceCode.equals("LEOM7") ||
!serviceCode.equals("MOON2")
永远是真的。你需要使用" AND"操作
!serviceCode.equals("ORB1") && !serviceCode.equals("ORBH") &&
!serviceCode.equals("ISS5") && !serviceCode.equals("ILLOYDS") &&
!serviceCode.equals("DLAB") && !serviceCode.equals("LEOM7") &&
!serviceCode.equals("MOON2")
答案 1 :(得分:1)
您的比较永远不会返回错误。它是A或B.
所以,如果你要说:
if ( !A OR !B ){
- >输入= A =>是的(因为!B返回true) - >输入= B =>是的(因为!A返回true) - >输入= C =>是的(因为!A返回true)
将你的OR(||
)改为AND(&&
)
另外:在循环之前声明并实例化Scanner
。
答案 2 :(得分:1)
更好的方法是创建一个包含有效代码的List
字符串,并检查该列表contains
是否提供了用户输入。
List<String> validServiceCodes = Arrays.asList("ORB1", "ORBH", "ISS5", "ILLOYDS", "DLAB", "LEOM7", "MOON2" );
do {
System.out.println("Enter Service Code");
Scanner a = new Scanner(System.in);
serviceCode = a.nextLine();
} while (!validCodes.contains(validServiceCodes));