如何在无效输入后 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);
我正在编写这个程序,用户可以在其中输入他们的姓名、身份证号码和所需的会员级别来注册(可用的选项只有黄金、白金、钻石)。然后程序会将姓名、身份证号码和会员级别分别保存在单独的变量中。 身份证号码格式设置为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);