【问题标题】:How to continue a loop with try catch? [closed]如何使用 try catch 继续循环? [关闭]
【发布时间】:2020-05-05 07:05:33
【问题描述】:

我已经尝试了几个小时,但我无法在循环中管理异常! 基本上我希望在出现错误时激活循环! Ps:这是一个迷你餐厅,因为我是初学者,所以我正在做Java培训!

这里是我想把异常放在代码的不同部分重做的地方:

                        do {


                    System.out.println("\nMain menu:\n");

                    for (int i = 0; i < mainMenu.length; i++) {
                        int menuNumber = i + 1;
                        System.out.println(menuNumber + ": "+ mainMenu[i]);
                    }

                    try {
                        System.out.print("The number of your choice: ");
                        mainMenuChoice.add(scanInt.nextInt());      // exeption here    



                            if(mainMenuChoice.get(mainI) > mainMenu.length || mainMenuChoice.get(mainI) <= 0) {
                                mainWhilePass = false;
                                mainMenuChoice.remove(mainI);
                            } else {
                                mainWhilePass = true;

                            }

                    } catch (Exception e) {
                        System.err.println("Error: " + e);
                    }


            } while (!mainWhilePass);

这里是完整的代码:

import java.util.ArrayList;
import java.util.Scanner;

public class McHouseCommand {

    public static void main(String[] args) {
        Scanner scanInt = new Scanner(System.in);
        Scanner scanLine = new Scanner(System.in);

        String mainMenu[] = {"McBurger", "McTrio", "Fries" , "Nothing"};
        String drinkMenu[] = {"Coca", "Pepsi", "Coffe", "Nothing"};
        String sauceMenu[] = {"Ketchup", "Moutarde", "Mayo", "Nothing"};
        int mainI = -1;
        int drinkI = -1; 
        int sauceI = -1;

        ArrayList<Integer> mainMenuChoice = new ArrayList<Integer>(); 
        ArrayList<Integer> drinkMenuChoice = new ArrayList<Integer>();
        ArrayList<Integer> sauceMenuChoice = new ArrayList<Integer>();
        boolean mainRetake, drinkRetake, sauceRetake;
        boolean mainWhilePass = false, drinkWhilePass = false, sauceWhilePass = false;
        String mainRetakeAnswer, drinkRetakeAnswer, sauceRetakeAnswer;

        System.out.println("Welcome to McHouse ! "+"\n");

        /* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu */

        do {
            mainI ++;
            do {


                    System.out.println("\nMain menu:\n");

                    for (int i = 0; i < mainMenu.length; i++) {
                        int menuNumber = i + 1;
                        System.out.println(menuNumber + ": "+ mainMenu[i]);
                    }

                    try {
                        System.out.print("The number of your choice: ");
                        mainMenuChoice.add(scanInt.nextInt());      // exeption here    



                            if(mainMenuChoice.get(mainI) > mainMenu.length || mainMenuChoice.get(mainI) <= 0) {
                                mainWhilePass = false;
                                mainMenuChoice.remove(mainI);
                            } else {
                                mainWhilePass = true;

                            }

                    } catch (Exception e) {
                        System.err.println("Error: " + e);
                    }


            } while (!mainWhilePass);


            do {

                System.out.print("\n[Yes | No] Do you want to retake: ");
                mainRetakeAnswer = scanLine.nextLine();

            } while (!mainRetakeAnswer.equalsIgnoreCase("yes") && !mainRetakeAnswer.equalsIgnoreCase("no"));

            if (mainRetakeAnswer.equalsIgnoreCase("yes")) {
                mainRetake = true;
            } else {
                mainRetake = false;
            }
        } while (mainRetake);

        System.out.println("");

        /* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu */

        do {
            drinkI ++;
            do {

                System.out.println("\nDrink menu:\n");

                for (int i = 0; i < drinkMenu.length; i++) {
                    int menuNumber = i + 1;
                    System.out.println(menuNumber + ": "+ drinkMenu[i]);
                }

                System.out.print("The number of your choice: ");

                drinkMenuChoice.add(scanInt.nextInt());

                if(drinkMenuChoice.get(drinkI) > drinkMenu.length || drinkMenuChoice.get(drinkI) <= 0) {
                    drinkWhilePass = false;
                    drinkMenuChoice.remove(drinkI);
                } else {
                    drinkWhilePass = true;

                }


            } while (!drinkWhilePass);


            do {

                System.out.print("\n[Yes | No] Do you want to retake: ");
                drinkRetakeAnswer = scanLine.nextLine();

            } while (!drinkRetakeAnswer.equalsIgnoreCase("yes") && !drinkRetakeAnswer.equalsIgnoreCase("no"));

            if (drinkRetakeAnswer.equalsIgnoreCase("yes")) {
                drinkRetake = true;
            } else {
                drinkRetake = false;
            }
        } while (drinkRetake);

        System.out.println("");

        /* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu */

        do {

            sauceI ++;
            do {

                System.out.println("\nSauce menu:\n");

                for (int i = 0; i < sauceMenu.length; i++) {
                    int menuNumber = i + 1;
                    System.out.println(menuNumber + ": "+ sauceMenu[i]);
                }

                System.out.print("The number of your choice: ");
                sauceMenuChoice.add(scanInt.nextInt());

                if(sauceMenuChoice.get(sauceI) > sauceMenu.length || sauceMenuChoice.get(sauceI) <= 0) {
                    sauceWhilePass = false;
                    sauceMenuChoice.remove(sauceI);
                } else {
                    sauceWhilePass = true;

                }


            } while (!sauceWhilePass);


            do {

                System.out.print("\n[Yes | No] Do you want to retake: ");
                sauceRetakeAnswer = scanLine.nextLine();

            } while (!sauceRetakeAnswer.equalsIgnoreCase("yes") && !sauceRetakeAnswer.equalsIgnoreCase("no"));

            if (sauceRetakeAnswer.equalsIgnoreCase("yes")) {
                sauceRetake = true;
            } else {
                sauceRetake = false;
            }
        } while (sauceRetake);

        /* What did you buy *//* What did you buy *//* What did you buy *//* What did you buy *//* What did you buy *//* What did you buy */

        System.out.println("");

        System.out.println("Great! ");
        System.out.println("You purchached: \n");

        System.out.println("Main Menu");
        for(int i = 0; i < mainMenuChoice.size();i++) {

            int r = mainMenuChoice.get(i) - 1;
            System.out.println( (i+ 1) + "| "+ mainMenu[r]);
        }

        System.out.println("");

        System.out.println("Drink");
        for(int i = 0; i < drinkMenuChoice.size();i++) {

            int r = drinkMenuChoice.get(i) - 1;
            System.out.println( (i+ 1) + "| "+ drinkMenu[r]);
        }

        System.out.println("");

        System.out.println("Sauce");
        for(int i = 0; i < sauceMenuChoice.size();i++) {

            int r = sauceMenuChoice.get(i) - 1;
            System.out.println( (i+ 1) + "| "+ sauceMenu[r]);
        }

        /* Program end *//* Program end *//* Program end *//* Program end *//* Program end *//* Program end *//* Program end */

        scanLine.close();
        scanInt.close();

        System.out.println("\n\nProgarm end");


    }

}

这是最终代码:

import java.util.Scanner;

public class McHouseCommand {

    public static void main(String[] args) {
        Scanner scanInt = new Scanner(System.in);
        Scanner scanLine = new Scanner(System.in);

        String mainMenu[] = {"McBurger", "McTrio", "Fries" , "Nothing"};
        String drinkMenu[] = {"Coca", "Pepsi", "Coffe", "Nothing"};
        String sauceMenu[] = {"Ketchup", "Moutarde", "Mayo", "Nothing"};
        int mainI = -1;
        int drinkI = -1; 
        int sauceI = -1;

        ArrayList<Integer> mainMenuChoice = new ArrayList<Integer>(); 
        ArrayList<Integer> drinkMenuChoice = new ArrayList<Integer>();
        ArrayList<Integer> sauceMenuChoice = new ArrayList<Integer>();
        boolean mainRetake, drinkRetake, sauceRetake;
        boolean mainWhilePass = false, drinkWhilePass = false, sauceWhilePass = false;
        String mainRetakeAnswer, drinkRetakeAnswer, sauceRetakeAnswer;

        System.out.println("Welcome to McHouse ! "+"\n");

        /* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu *//* Main Menu */

        do {
            mainI ++;
            do {
                System.out.println("\nMain menu:\n");

                for (int i = 0; i < mainMenu.length; i++) {
                    int menuNumber = i + 1;
                    System.out.println(menuNumber + ": "+ mainMenu[i]);
                }
                try {
                    System.out.print("The number of your choice: ");
                    if (scanInt.hasNextInt()) {
                        mainMenuChoice.add(scanInt.nextInt());      // exeption here

                        if(mainMenuChoice.get(mainI) > mainMenu.length || mainMenuChoice.get(mainI) <= 0) {
                            mainWhilePass = false;
                            mainMenuChoice.remove(mainI);

                        } else {
                            mainWhilePass = true;
                        }
                    } else {
                        System.err.print("Not valid choice: " + scanInt.next());
                        mainI -= 1;
                    }
                } catch (Exception e) {
                    System.err.println("Error: " + e);
                    scanInt.next();
                }

            } while (!mainWhilePass);
            do {

                System.out.print("\n[Yes | No] Do you want to retake: ");
                mainRetakeAnswer = scanLine.nextLine();

            } while (!mainRetakeAnswer.equalsIgnoreCase("yes") && !mainRetakeAnswer.equalsIgnoreCase("no"));

            if (mainRetakeAnswer.equalsIgnoreCase("yes")) {
                mainRetake = true;
            } else {
                mainRetake = false;
            }
        } while (mainRetake);

        System.out.println("");

        /* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu *//* Drink Menu */

        do {
            drinkI ++;
            do {
                System.out.println("\nDrink menu:\n");

                for (int i = 0; i < drinkMenu.length; i++) {
                    int menuNumber = i + 1;
                    System.out.println(menuNumber + ": "+ drinkMenu[i]);
                }
                System.out.print("The number of your choice: ");

                drinkMenuChoice.add(scanInt.nextInt());

                if(drinkMenuChoice.get(drinkI) > drinkMenu.length || drinkMenuChoice.get(drinkI) <= 0) {
                    drinkWhilePass = false;
                    drinkMenuChoice.remove(drinkI);
                } else {
                    drinkWhilePass = true;
                }
            } while (!drinkWhilePass);
            do {
                System.out.print("\n[Yes | No] Do you want to retake: ");
                drinkRetakeAnswer = scanLine.nextLine();

            } while (!drinkRetakeAnswer.equalsIgnoreCase("yes") && !drinkRetakeAnswer.equalsIgnoreCase("no"));
            if (drinkRetakeAnswer.equalsIgnoreCase("yes")) {
                drinkRetake = true;
            } else {
                drinkRetake = false;
            }
        } while (drinkRetake);
        System.out.println("");
        /* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu *//* Sauce Menu */
        do {
            drinkI ++;
            do {
                System.out.println("\nDrink menu:\n");
                for (int i = 0; i < drinkMenu.length; i++) {
                    int menuNumber = i + 1;
                    System.out.println(menuNumber + ": "+ drinkMenu[i]);
                }
                try {
                    System.out.print("The number of your choice: ");
                    if (scanInt.hasNextInt()) {
                        drinkMenuChoice.add(scanInt.nextInt());      // exeption here
                        if(drinkMenuChoice.get(drinkI) > drinkMenu.length || drinkMenuChoice.get(drinkI) <= 0) {
                            drinkWhilePass = false;
                            drinkMenuChoice.remove(drinkI);

                        } else {
                            drinkWhilePass = true;
                        }
                    } else {
                        System.err.print("Not valid choice: " + scanInt.next());
                        drinkI -= 1;
                    }
                } catch (Exception e) {
                    System.err.println("Error: " + e);
                    scanInt.next();
                }








            } while (!drinkWhilePass);


            do {

                System.out.print("\n[Yes | No] Do you want to retake: ");
                drinkRetakeAnswer = scanLine.nextLine();

            } while (!drinkRetakeAnswer.equalsIgnoreCase("yes") && !drinkRetakeAnswer.equalsIgnoreCase("no"));

            if (drinkRetakeAnswer.equalsIgnoreCase("yes")) {
                drinkRetake = true;
            } else {
                drinkRetake = false;
            }
        } while (drinkRetake);

        System.out.println("");


        /* What did you buy *//* What did you buy *//* What did you buy *//* What did you buy *//* What did you buy *//* What did you buy */

        do {
            sauceI ++;
            do {


                System.out.println("\nSauce menu:\n");

                for (int i = 0; i < sauceMenu.length; i++) {
                    int menuNumber = i + 1;
                    System.out.println(menuNumber + ": "+ sauceMenu[i]);
                }


                try {
                    System.out.print("The number of your choice: ");
                    if (scanInt.hasNextInt()) {
                        sauceMenuChoice.add(scanInt.nextInt());      // exeption here

                        if(sauceMenuChoice.get(sauceI) > sauceMenu.length || sauceMenuChoice.get(sauceI) <= 0) {
                            sauceWhilePass = false;
                            sauceMenuChoice.remove(sauceI);

                        } else {
                            sauceWhilePass = true;
                        }
                    } else {
                        System.err.print("Not valid choice: " + scanInt.next());
                        sauceI -= 1;
                    }
                } catch (Exception e) {
                    System.err.println("Error: " + e);
                    scanInt.next();
                }








            } while (!sauceWhilePass);


            do {

                System.out.print("\n[Yes | No] Do you want to retake: ");
                sauceRetakeAnswer = scanLine.nextLine();

            } while (!sauceRetakeAnswer.equalsIgnoreCase("yes") && !sauceRetakeAnswer.equalsIgnoreCase("no"));

            if (sauceRetakeAnswer.equalsIgnoreCase("yes")) {
                sauceRetake = true;
            } else {
                sauceRetake = false;
            }
        } while (sauceRetake);

        System.out.println("");


        /* Program end *//* Program end *//* Program end *//* Program end *//* Program end *//* Program end *//* Program end */

        scanLine.close();
        scanInt.close();

        System.out.println("\n\nProgarm end");


    }

}

【问题讨论】:

  • 当您说您希望循环“在出现错误时激活”是什么意思?你想抛出或捕获异常吗?请修正代码的缩进并删除任何多余的空行
  • while 被触发,但不再要求用户输入答案!它只是无限循环!
  • 仍然没有解释你想如何处理异常。并且不要在评论中解释,而是更新您的问题。
  • 我已经修改了代码,以便您可以更好地理解它,但是当我执行此代码时,它只会创建一个无限循环! ='(
  • 我仍然没有真正得到你想要做什么,但我看到你处理响应的逻辑很复杂。不是将响应添加到列表中,而是 mainMenuChoice.add(scanInt.nextInt());然后获取它并可能将其从列表中删除,您应该将其读入您验证的本地 int 变量,如果可以,则将其添加到列表中。所以int choice = scanInt.nextInt(); 然后验证并添加choice

标签: java while-loop try-catch do-while


【解决方案1】:

你必须在读取扫描仪之前测试类型,即使有错误,你也必须读取输入:

try {
    System.out.print("The number of your choice: ");
    if (scanInt.hasNextInt()) {
        mainMenuChoice.add(scanInt.nextInt());      // exeption here

        if(mainMenuChoice.get(mainI) > mainMenu.length || mainMenuChoice.get(mainI) <= 0) {
            mainWhilePass = false;
            mainMenuChoice.remove(mainI);
        } else {
            mainWhilePass = true;
        }
    } else {
        System.out.print("not valid choice: " + scanInt.next());
    }
} catch (Exception e) {
    System.err.println("Error: " + e);
    scanInt.next();
}

【讨论】:

  • 谢谢!兄弟!你最好的
  • 是的,但我不明白该怎么做!我正在学习 Java,我是一个初学者,但我想在每次错误后删除 1 到 mainI
  • 是的,这项工作!
  • 这是结局代码:
  • 对!我忘了 mainI,但现在一切都好...?
猜你喜欢
  • 2019-06-19
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多