2017-09-19 53 views
1

出于某种原因,当我有多个正确的字符串,声明不断重复做而字符串验证(使用多个字符串)

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")); 

但是,当只有一个字符串代码检查打击。 while语句工作正常,如果你输入“ORB1”将停止循环,当输入了正确的输入

do { 
    System.out.println("Enter Service Code"); 
    Scanner a = new Scanner(System.in); 
    serviceCode = a.nextLine(); 
} while (!serviceCode.equals("ORB1")); 
+0

看跌的System.out.println( “ - ” + serviceCode)调用a.nextLine()后,你就会知道为什么^^ –

+1

看看你的条件。假设你输入'“ORB1”'。然后,'!serviceCode.equals(“ORB1”)= False',因为它们是平等的。但是,其他人呢?他们不断返回“真”,因为他们不平等。 –

+0

bcoz所有这些其他或将是真的 – Ramanlfc

回答

1

的做“!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") 
+0

谢谢。不知道我怎么看过那个 –

1

您的比较永远不会返回false。这是A或B.

所以,如果你说:

if (!A OR !B){ 

- >输入= A =>真(!原因是b返回true) - >输入= B =>真(因为A返回true!) - >输入= C =>真(因为A返回true!)

更改您的OR(||)由AND(&&

另请参见:在循环之前声明并实例化您的Scanner

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));