繁体   English   中英

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

[英]How would I determine whether a number entered by a user contains the proper amount of numbers and - marks

我是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是否采用正确的格式 ,似乎是完全相同的作业,我假设我们使用的是同一本书,尽管它被标记为重复,但实际上并没有给出答案,我可以找不到原始问题。 我们也还没有学习数组,所以我正在寻找一个更简单的答案,尽管我敢肯定,使用数组的示例除了简单的答案之外不会受到伤害,因此我可以提高自己的技能。

编辑更新:尽管我敢肯定有更好的方法可以做到这一点,但它确实有效。

公共静态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;
}

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

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

最好以一种单独的方法提取重复部分(例如上面提到的is-digit检查)。 这样,您就可以避免重复自己,并且可以更好地控制程序。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM