2016-12-04 5 views
-2

私はNINのチェッカーを作ろうとしていますが、ユーザーが正しい文字を入力してもwhileループは終了しません。私が論理ORを使用したかどうかはわかりません。ループチェッカーは論理的に終了しませんが、

System.out.println("Give the Doctor's 9Digit National Insurance Number"); 
    scanner.nextLine(); 
    String temp1 = scanner.nextLine(); 

    while((temp1.charAt(0)=='D' || temp1.charAt(0)=='F' || temp1.charAt(0)=='I' || 
      temp1.charAt(0)=='Q'|| temp1.charAt(0)=='U' || temp1.charAt(0)=='V' || Character.isDigit(temp1.charAt(0))) 
      || 
      (temp1.charAt(1)=='D' || temp1.charAt(1)=='F' || temp1.charAt(1)=='I' || 
      temp1.charAt(1)=='Q'|| temp1.charAt(1)=='U' || temp1.charAt(1)=='V' || 
      temp1.charAt(1)=='O'|| Character.isDigit(temp1.charAt(1))) 
      || 
      (!Character.isDigit(temp1.charAt(2)) || !Character.isDigit(temp1.charAt(3)) || 
      !Character.isDigit(temp1.charAt(4)) || !Character.isDigit(temp1.charAt(5)) || 
      !Character.isDigit(temp1.charAt(6)) || !Character.isDigit(temp1.charAt(7))) 
      || 
      (temp1.charAt(8)!='A' || temp1.charAt(8)!='B' || temp1.charAt(8)!='C' || temp1.charAt(8)!='D') 
     ) 
    { 
     System.out.println("THE RIGHT FORMAT OF NIN IS: "); 
     System.out.println("2 PREFIX LETTERS THEN 6 DIGITS & 1 SUFIX LETTER"); 
     System.out.println("PREFIX LETTERS CANNOT BE D, F, I, Q, U or V & 2ND PREFIX CANNOT BE O"); 
     System.out.println("SUFIX LETTERS CAN ONLY BE A, B, C, D"); 
     System.out.println("Give NIN in the right Format!"); 


     temp1 = scanner.nextLine(); 

    } 

    String dNin = temp1 ;` 
+1

このコードはわかりませんが、これは正しいプログラミング方法ではありません。 –

+0

まず、ブール変数のような停止条件を最小限に抑えてください。次に、 'Regex'の使い方についてどう思いますか? –

答えて

0

問題は、あなたのループの最後の部分です!: (temp1.charAt(8)= 'A' || temp1.charAt(8)= 'B' || temp1.charAt(8 )!= 'C' || temp1.charAt(8)!= 'D') この部分は常に真です。たとえば、その文字がAならば、temp1.charAt(8)!= 'B'は真、逆も真です。次は正しいでしょう:

(temp1.charAt(8)= 'A' || temp1.charAt(8)= 'B' || temp1.charAt(8)= 'C' || temp1 while関数でのcharAt(8)= 'D')

0

(temp1.charAt(8)!='A' || temp1.charAt(8)!='B' || temp1.charAt(8)!='C' || temp1.charAt(8)!='D') 

はあなたのロジックで

(temp1.charAt(8)!='A' && temp1.charAt(8)!='B' && temp1.charAt(8)!='C' && temp1.charAt(8)!='D') 

でなければなりません

"SUFIXの文字はA、B、C、Dのみ可能"

です。

これを行うには通常の例外を使用するだけです。 インポートが必要な場合がありますjava.util.regex.*

関連する問題