做字符串验证(带多个字符串)

时间:2017-09-19 06:41:40

标签: java

出于某种原因,当我有多个正确的字符串时,该语句不断重复

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

3 个答案:

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