如何使用try catch继续循环?

问题描述 投票:0回答:1

我已经尝试了几个小时,但是我无法同时管理循环中的异常!基本上,我希望在出现错误时激活循环!附言:这是一家迷你餐厅,因为我是初学者,所以我正在用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");


    }

}
java while-loop try-catch do-while
1个回答
0
投票

您必须在阅读扫描仪之前测试类型,即使有错误,也必须阅读输入内容:

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.