如何在无效输入后 return 返回到上一条语句而不是在 Java 中重新启动整个程序?

How to return back to a previous statement after invalid input instead of restarting the whole program in Java?

我正在编写这个程序,用户可以在其中输入他们的姓名、身份证号码和所需的会员级别来注册(可用的选项只有黄金、白金、钻石)。然后程序会将姓名、身份证号码和会员级别分别保存在单独的变量中。 身份证号码格式设置为YYMMDDPB###G,其中前6位,YYMMDD表示出生日期(年-月-日),PB表示出生地,最后一位G表示性别(奇数代表男性,偶数代表女性)。我还需要允许用户对任何无效输入重复该过程。

对于membership level,我想只允许输入字母G,P,D,其他输入将被视为无效,打印错误语句,并带回membership level input,供用户使用再重新输入。我该怎么做?

public static void main(String[] args) {

        Scanner input = new Scanner (System.in);
        String prompt;

        do
            {
            Scanner sc = new Scanner(System.in);
            // Part 1 - Receiving input
            // Name
            System.out.println("Please enter your name: "); // Member enters name here
            String name = sc.nextLine();

            // Identity Card Number
            System.out.println("Please enter your IC number (without the dash): "); // Member enters identity card number here
            String identity_card_number = sc.nextLine();

            // Membership Level
            System.out.println("Please enter the membership level you would like to sign up. Enter G for Gold, P for Platinum, D for Diamond. (Enter only G, P, or D.)"); // Member enters desired membership level to sign up
            String membership_level = sc.nextLine();
            String memLvl = "default";

            if (membership_level.equals("G")){
                memLvl = ("Gold");
            }
            else if (membership_level.equals("P")){
                memLvl = ("Platinum");
            }
            else if (membership_level.equals("D")){
                memLvl = ("Diamond");
            }
            else {
                memLvl = ("UNINDENTIFIED: Please re-enter the correct input for desired membership level");
            }

编辑:为了回答 Chintan Adhia 的回答,我对您建议的代码进行了一些更改。

// Membership Level
            boolean isMemLvlInvalid = false;
            String memLvl = "default";
            String membership_level = sc.nextLine();
            do{
                    isMemLvlInvalid = false;
                    System.out.println("Please enter the membership level you would like to sign up. Enter G for Gold, P for Platinum, D for Diamond. (Enter only G, P, or D.)"); // Member enters desired membership level to sign up
                    membership_level = sc.nextLine();

                    if (membership_level.equals("G")) {
                    memLvl = ("Gold");
                    } else if (membership_level.equals("P")) {
                    memLvl = ("Platinum");
                    } else if (membership_level.equals("D")) {
                    memLvl = ("Diamond");
                    } else {
                    memLvl = ("UNINDENTIFIED: Please re-enter the correct input for desired membership level");
                    isMemLvlInvalid = true;
                    System.out.println(memLvl);
                    }
                }
        while(isMemLvlInvalid);

这段代码的问题是我输入身份证号码后必须按两次回车键(可能是sc.nextLine造成的),有什么办法可以解决这个问题,所以我只需要按回车键键一次?

其中一个选项是 运行 循环会员级别,直到它不正确。基本上是 sittsering 所说的。示例代码如下。

            boolean isMemLvlInalid = false;
        String memLvl = "default";
        do{
            isMemLvlInalid = false;
            System.out.println("Please enter the membership level you would like to sign up. Enter G for Gold, P for Platinum, D for Diamond. (Enter only G, P, or D.)"); // Member enters desired membership level to sign up
            String membership_level = sc.nextLine();

            if (membership_level.equals("G")) {
                memLvl = ("Gold");
            } else if (membership_level.equals("P")) {
                memLvl = ("Platinum");
            } else if (membership_level.equals("D")) {
                memLvl = ("Diamond");
            } else {
                memLvl = ("UNINDENTIFIED: Please re-enter the correct input for desired membership level");
                isMemLvlInalid = true;
                System.out.println(memLvl);
            }
        }
        while(isMemLvlInalid);