我正在尝试为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 ;`
答案 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.*