如何确定用户输入的数字是否包含适当数量的数字和 - 标记



我是Java编程的新手,我们目前正在学习字符串和字符。我的实验室任务是让用户输入其 SSN,并让程序确定它是否有效。输入的格式需要为 123-45-6789。到目前为止,这就是我所做的: 包装实验室;

import java.util.Scanner;
public class Lab4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a valid SSN");
String ssn = input.nextLine();
System.out.print(ssn);
if (ssn.length() == 11) {
if 

}
}
}

我一直在这里的论坛上寻找,并找到了一些不同的答案,但是当我在我的代码中尝试它们时,出现了一些问题。我不是找任何人为我写出来。我将使用什么类型的方法来检查字符 0-2、4-5、7-10 是否包含数字以及 3 和 6 处的字符是否包含 -。 显然,charAtcontains会有所帮助,但我不确定如何写出条件来确定这一点。

这个问题问 如何判断SSN的格式是否正确 这似乎是完全相同的作业,我假设我们使用的是同一本书实际上并没有给出答案,尽管它被标记为重复,我找不到原始问题。我们还没有学习数组,所以我正在寻找一个更简单的答案,尽管我相信除了更简单的答案之外,使用数组的示例不会有什么坏处,这样我就可以更多地发展我的技能。

编辑更新: 虽然我确信有更好的方法可以做到这一点,但它有效。

public static void main(String[] args( {

Scanner input = new Scanner(System.in);
System.out.println("Enter a valid SSN");
String ssn = input.nextLine();

if (ssn.length() == 11 && 
ssn.charAt(0)>='0' && ssn.charAt(0)<='9' && 
ssn.charAt(1)>='0' && ssn.charAt(1)<='9' && 
ssn.charAt(2)>='0'  && ssn.charAt(2)<='9' &&
ssn.charAt(4)>='0'  && ssn.charAt(4)<='9' &&
ssn.charAt(5)>='0'  && ssn.charAt(5)<='9' &&
ssn.charAt(7)>='0'  && ssn.charAt(7)<='9' &&
ssn.charAt(8)>='0'  && ssn.charAt(8)<='9' &&
ssn.charAt(9)>='0'  && ssn.charAt(9)<='9' &&
ssn.charAt(10)>='0'  && ssn.charAt(10)<='9' &&
ssn.charAt(3)=='-' && ssn.charAt(6)=='-') 
{
System.out.println(ssn + " is a valid social security number");
}
else
System.out.print(ssn + " is not a valid social security number");
input.close();

}

}

首先,我会避免嵌套的ifs,就像这样:

if (foo==bar) {
if(that!=other) {
if(...)
}
}

这很快就会导致混乱。 尝试使 if 语句并行,而不是嵌套。诸如此类:

if (ssn.length() != 11) {
System.out.print("SSN must be 11 letters long");
return;
}
if (ssn.charAt(3)!='-' || ssn.charAt(7)!='-') {
System.out.print("SSN must be 11 letters long");
return;
}

其次,您需要检查字符是否是数字。您可以通过简单的数字比较来做到这一点:

if (ssl.charAt(0)<'0' || ssl.charAt(0)>'9') {
System.out.print("Char at 0 was not a digit");
return;
}

最好在单独的方法中提取重复部分(如上面提到的 is 数字检查(。通过这种方式,您可以避免重复自己,并且可以更好地控制您的程序。

希望这有帮助。

最新更新