虽然循环检查器永远不会使用逻辑或

时间:2016-12-04 07:08:51

标签: java

我正在尝试为NIN制作一个检查器,但即使用户给出了正确的字母,while循环也永远不会完成。我不确定我是否使用了逻辑或权利。

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

2 个答案:

答案 0 :(得分: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.charAt(8)='D “)

答案 1 :(得分:0)

while函数中,

(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 LETTERS只能是A,B,C,D"

使用常规异常来做到这一点很简单。 您可能需要导入java.util.regex.*