2017-09-19 52 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));