使用try-catch,如果输入错误,我怎么能再次回想起尝试?

时间:2014-10-12 04:03:15

标签: java

正在建立书店系统 其中一种方法会要求用户输入书名然后描述书的代码。 我的问题是,如果有“InputMismatchException”,我怎么能回忆起尝试。 我的意思是捕获将打印到secreen“错误的输入!”但我想提示用户再次输入

这是我的代码

public void add(){
    try{
    System.out.println("Enter the book code :");
    int c = s.nextInt();
    try{
        System.out.println("Eneter the book quantity");
        int q = s.nextInt();

        try{
            System.out.println("Eneter the book description");
            String d = s.next();

            try{
                System.out.println("Eneter the book cost price");
                double cp = s.nextDouble();

                try{
                    System.out.println("Eneter the book selling price");
                    double sp = s.nextDouble();

                    try{
                        System.out.println("Enter status: [a for available - u for unvailable]");
                        String input = s.next();
                        if(input.equals("a")) {
                            System.out.println("available: ");
                        }
                        else if (input.equals("u")) {
                            System.out.println("unavailable ");
                        } 
                        else {
                            System.out.println("Wrong Input");
                        }

                        try{
                            System.out.println("enter the discount on the item \"if exsist\"");
                            double dis = s.nextDouble();
                        }catch(InputMismatchException e){
                            System.out.println("Wrong Input");

                        }
                    }catch(InputMismatchException e){
                        System.out.println("Wrong input");
                    }
                }catch(InputMismatchException e){

                }
            }catch(InputMismatchException e){
                System.out.println("WRONT INPUT!!");
            }
        }catch(InputMismatchException e){
            System.out.println("WRONG INPUT!!");
        }
    } catch(InputMismatchException e){
        System.out.println("Wrong input. NUMBERS only!!");
    }
} catch(InputMismatchException e){
    System.out.println("You have to enter a NUMBER only");

}

1 个答案:

答案 0 :(得分:0)

您需要某种循环,whiledo-while

boolean invalidInput;
do {
    invalidInput = false;
    try {
        System.out.println("Enter the book quantity");
        int q = s.nextInt();
    } catch (InputMismatchException e) {
        System.out.println("Please enter a valid integer.");  // this is more polite
        invalidInput = true;  // This is what will get the program to loop back
        s.nextLine();
    }
} while (invalidInput);

如果你这样做,你不需要嵌套所有try/catch块;执行一个输入直到它有效,然后执行下一个输入,等等。

正如一位评论者所说,最好将每个输入放在一个方法中。如果您这样做,则不需要boolean

private int getBookQuantity() {
    while (true) {
        try {
            System.out.println("Enter the book quantity");
            int q = s.nextInt();
            return q;           
        } catch (InputMismatchException e) {
            System.out.println("Please enter a valid integer.");  
            s.nextLine();
        }
    }
}

这是一个“无限循环”,当return语句返回有效值时退出。更好的方法可能只是编写一种输入int值的方法(以及doubleString的其他方法):

 private int getInteger(String whatToEnter) {
    while (true) {
        try {
            System.out.println("Enter the " + whatToEnter);
            int q = s.nextInt();
            return q;           
        } catch (InputMismatchException e) {
            System.out.println("Please enter a valid integer.");  
            s.nextLine();
        }
    }
}

编辑:抱歉,我忘记输入无效后需要nextLine();这会抛出无效的整数和行上的其他所有内容,这样就不会重复导致另一个异常。