首先,我为我可能做过的任何明显错误的事情道歉。我对Java很陌生,我正尽我所能。
无论如何,我必须编写一个程序来验证加拿大社会保险号是否真实。要启动该程序,我需要能够确保用户的输入具有正确的类型和格式(基本上是9位数字,没有字母,空格,短划线等。只有数字)。我可以使用基本循环来执行验证过程,以及if和else语句,以及切换。
到目前为止,我有:
Scanner kb = new Scanner(System.in);
String sin;
System.out.print("Please enter a social insurance number with digits only: ");
sin = kb.next();
while (sin.length()!=9){
System.out.print("Enter a valid social insurance number with digits only: ");
sin = kb.next();
}
for (int i=0; i<sin.length(); i++){
Character c = sin.charAt(i);
if (Character.isDigit(c)){
???What can I put here???
}
}
我认为我必须以某种方式在while语句中包含for循环,以使验证过程正确循环并要求用户以所需格式重新输入输入。
感谢任何帮助,谢谢。
答案 0 :(得分:0)
从您的应用程序流程中分离您的验证逻辑,并根据需要重新检查:
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
System.out.print("Please enter a social insurance number with digits only: ");
String sin = kb.next();
// Ask for the user to enter again if entry is not valid
while (!isValid(sin)) {
System.out.print("Enter a valid social insurance number with digits only: ");
sin = kb.next();
}
// Move on
}
// Check for validity seperately
public static boolean isValid(String input)
{
// Does it have nine characters
if(input.length() != 9)
return false;
// Is it a number ?
try
{
Integer i = Integer.parseInt(input);
}
catch(NumberFormatException e)
{
return false;
}
// Passed all checks must be valid
return true;
}