在 Do While 循环中使用 try/Catch
Using a try/Catch in a Do While loop
我正在尝试在 do-while 循环中使用 try-catch 语句。逻辑似乎有效,但 do 循环并没有一遍又一遍地循环。如果它进入捕获状态,它似乎只是跳出了 do 循环。
private boolean madeChoice = false;
public void whatToDo(){
System.out.println("");
System.out.println("");
System.out.println("=====================================");
System.out.println("Welcome");
System.out.println("=====================================\n");
System.out.println("What would you like to do today? Your choices are: \n");
choices();
do{
try{
System.out.println("");
System.out.println("Please enter your choice");
int numberEntered = keyboard.nextInt();
if(numberEntered > 3 || numberEntered < 1){
System.out.println("-----------------------------------------------------------");
System.out.println("That is not a choice. Please choose from the following: \n");
choices();
numberEntered = keyboard.nextInt();
}else{
System.out.println("That is a good CHOICE");
madeChoice = true;
}
}catch (InputMismatchException e){
System.out.println("-----------------------------------------------------------");
System.out.println("This is not a number. Please choose from the following: \n");
choices();
}
}while(!madeChoice);
}
private void choices(){
System.out.println("1. Add a new set into your account");
System.out.println("2. See all the sets in your account");
System.out.println("3. Exit the Account Manger.");
}
在continue
前添加keyboard.nextLine()
,出现异常时,需要“吃掉”输入:
catch (InputMismatchException e){
System.out.println("-----------------------------------------------------------");
System.out.println("This is not a number. Please choose from the following: \n");
choices();
keyboard.nextLine();
continue;
// numberEntered = keyboard.nextInt();
}
编辑,我更改了您的一些代码:
public void whatToDo(){
System.out.println("");
System.out.println("");
System.out.println("=====================================");
System.out.println("Welcome");
System.out.println("=====================================\n");
System.out.println("What would you like to do today? Your choices are: \n");
Scanner keyboard = new Scanner(System.in);
do{
try{
choices();
System.out.println("");
System.out.println("Please enter your choice");
int numberEntered = keyboard.nextInt();
if (numberEntered >= 1 && numberEntered <= 3) {
System.out.println("That is a good CHOICE");
madeChoice = true;
} else {
System.out.println("-----------------------------------------------------------");
System.out.println("That is not a choice. Please choose from the following: \n");
}
}catch (InputMismatchException e){
System.out.println("-----------------------------------------------------------");
System.out.println("This is not a number. Please choose from the following: \n");
keyboard.next();
// numberEntered = keyboard.nextInt();
}
}while(!madeChoice);
}
也许你可以将你的代码更新为这样的东西,这似乎对我有用:
private boolean madeChoice = false;
private static boolean isMissMatchException = false ;
private static boolean isInvalidInput = false ;
public void whatToDo(){
if(Test.isMissMatchException)
{
System.out.println("-----------------------------------------------------------");
System.out.println("This is not a number. Please choose from the following: \n");
Test.isMissMatchException = false ;
} else if (Test.isInvalidInput)
{
System.out.println("-----------------------------------------------------------");
System.out.println("That is not a choice. Please choose from the following: \n");
Test.isInvalidInput = false ;
} else {
System.out.println("");
System.out.println("");
System.out.println("=====================================");
System.out.println("Welcome");
System.out.println("=====================================\n");
System.out.println("What would you like to do today? Your choices are: \n");
}
choices();
do{
try{
System.out.println("");
System.out.println("Please enter your choice");
@SuppressWarnings("resource")
int numberEntered = new Scanner(System.in).nextInt();
if(numberEntered > 3 || numberEntered < 1){
Test.isInvalidInput = true ;
this.whatToDo();
}else{
System.out.println("That is a good CHOICE");
madeChoice = true;
}
}catch (InputMismatchException e){
Test.isMissMatchException = true ;
this.whatToDo();
}
}while(madeChoice);
}
private void choices(){
System.out.println("1. Add a new set into your account");
System.out.println("2. See all the sets in your account");
System.out.println("3. Exit the Account Manger.");
}
我正在尝试在 do-while 循环中使用 try-catch 语句。逻辑似乎有效,但 do 循环并没有一遍又一遍地循环。如果它进入捕获状态,它似乎只是跳出了 do 循环。
private boolean madeChoice = false;
public void whatToDo(){
System.out.println("");
System.out.println("");
System.out.println("=====================================");
System.out.println("Welcome");
System.out.println("=====================================\n");
System.out.println("What would you like to do today? Your choices are: \n");
choices();
do{
try{
System.out.println("");
System.out.println("Please enter your choice");
int numberEntered = keyboard.nextInt();
if(numberEntered > 3 || numberEntered < 1){
System.out.println("-----------------------------------------------------------");
System.out.println("That is not a choice. Please choose from the following: \n");
choices();
numberEntered = keyboard.nextInt();
}else{
System.out.println("That is a good CHOICE");
madeChoice = true;
}
}catch (InputMismatchException e){
System.out.println("-----------------------------------------------------------");
System.out.println("This is not a number. Please choose from the following: \n");
choices();
}
}while(!madeChoice);
}
private void choices(){
System.out.println("1. Add a new set into your account");
System.out.println("2. See all the sets in your account");
System.out.println("3. Exit the Account Manger.");
}
在continue
前添加keyboard.nextLine()
,出现异常时,需要“吃掉”输入:
catch (InputMismatchException e){
System.out.println("-----------------------------------------------------------");
System.out.println("This is not a number. Please choose from the following: \n");
choices();
keyboard.nextLine();
continue;
// numberEntered = keyboard.nextInt();
}
编辑,我更改了您的一些代码:
public void whatToDo(){
System.out.println("");
System.out.println("");
System.out.println("=====================================");
System.out.println("Welcome");
System.out.println("=====================================\n");
System.out.println("What would you like to do today? Your choices are: \n");
Scanner keyboard = new Scanner(System.in);
do{
try{
choices();
System.out.println("");
System.out.println("Please enter your choice");
int numberEntered = keyboard.nextInt();
if (numberEntered >= 1 && numberEntered <= 3) {
System.out.println("That is a good CHOICE");
madeChoice = true;
} else {
System.out.println("-----------------------------------------------------------");
System.out.println("That is not a choice. Please choose from the following: \n");
}
}catch (InputMismatchException e){
System.out.println("-----------------------------------------------------------");
System.out.println("This is not a number. Please choose from the following: \n");
keyboard.next();
// numberEntered = keyboard.nextInt();
}
}while(!madeChoice);
}
也许你可以将你的代码更新为这样的东西,这似乎对我有用:
private boolean madeChoice = false;
private static boolean isMissMatchException = false ;
private static boolean isInvalidInput = false ;
public void whatToDo(){
if(Test.isMissMatchException)
{
System.out.println("-----------------------------------------------------------");
System.out.println("This is not a number. Please choose from the following: \n");
Test.isMissMatchException = false ;
} else if (Test.isInvalidInput)
{
System.out.println("-----------------------------------------------------------");
System.out.println("That is not a choice. Please choose from the following: \n");
Test.isInvalidInput = false ;
} else {
System.out.println("");
System.out.println("");
System.out.println("=====================================");
System.out.println("Welcome");
System.out.println("=====================================\n");
System.out.println("What would you like to do today? Your choices are: \n");
}
choices();
do{
try{
System.out.println("");
System.out.println("Please enter your choice");
@SuppressWarnings("resource")
int numberEntered = new Scanner(System.in).nextInt();
if(numberEntered > 3 || numberEntered < 1){
Test.isInvalidInput = true ;
this.whatToDo();
}else{
System.out.println("That is a good CHOICE");
madeChoice = true;
}
}catch (InputMismatchException e){
Test.isMissMatchException = true ;
this.whatToDo();
}
}while(madeChoice);
}
private void choices(){
System.out.println("1. Add a new set into your account");
System.out.println("2. See all the sets in your account");
System.out.println("3. Exit the Account Manger.");
}