首页 > 解决方案 > 如何在java中修复循环while/try catch错误

问题描述

我正在创建一个简单的计算器程序(这个 java 编程的第一周)。

问题背景:只有5个选项有效。(1-加法;2-减法;3-乘法;4.除法;5.退出)。当用户输入 1-4 选项时,将填充结果,但用户需要循环返回以重新输入数据,直到选择选项 5。5是退出程序(结束循环/程序的唯一方法)。我的问题: 1. 如何阻止 try-catch 不停地运行?有没有更好的方法来实现 try-catch?例如,处理字符串数据错误消息。理想情况下,如果输入字符串,代码应该循环返回以通过生成消息“请重新输入数字...”再次重新启动,直到用户输入有效数字 2. 我正在尝试在主类中使用尽可能多的静态方法。我不确定我的做法是否准确?

这是我输入的代码:

    12 2 
    //-everything works well.
    2 //-enter again 
    s s (string entry-error) 

然后,将填充以下消息:

    "You have entered invalid floats. please re-enter:  
    Exception in thread "main" java.util.InputMismatchException
        ...
        at calculator.performSubtract(calculator.java:65)
        at calculator.main(calculator.java:34)" 

代码(示例)

   public class calculator {
//use static methods to implement the program 
    static Scanner userInput = new Scanner(System.in);
    static int userChoice;
    static float numberOne;
    static float numberTwo; 
    static float answer; 
    static int choice;

    public static void main(String[] args) {
       do {
       //this menu statement has to be repeated unless 5 is entered (exit the 
      //program) 
        System.out.println("Welcome to <dj's> Handy Calculator\n\n\t \1. Addition \n\t 2. Subtraction\n\t 3. Multiplication\n\t 4. Division\n\t 5. Exit\n\n");
        System.out.print("What would you like to do? ");

        try {   
        choice = userInput.nextInt();
        }catch (InputMismatchException e) {
            continue;
        }
        switch (choice) {
        case 2: performSubtract();
        break;
        ...
        case 5: exit();
        break;
        } 
        }while(choice >0 && choice <5);
        userInput.close();
    }

    public static void performSubtract () {
        //catch error statement. 
        try {
        numberOne = userInput.nextFloat();
        numberTwo= userInput.nextFloat();
        answer= numberOne-numberTwo;
        } catch (Exception e) {
        System.out.println("You have entered invalid floats. please re-enter:  ");
        numberOne = userInput.nextFloat();
        numberTwo= userInput.nextFloat();
        }
        System.out.printf("Please enter two floats to subtraction, separated by a space: %.1f %.1f\n", numberOne, numberTwo);
        System.out.printf("Result of subtraction %.1f and %.1f is %.1f\n", numberOne, numberOne, answer);
        System.out.println("\nPress enter key to continue...");
    }

}

标签: javaloopstry-catch

解决方案


我认为问题在于您没有从扫描仪中清除问题令牌。您的 catch 语句会打印一条错误消息,然后再次尝试将相同的标记解析为 int 或 float。

您可以在这里查看:https ://www.geeksforgeeks.org/scanner-nextint-method-in-java-with-examples/

看起来您需要调用userInput.next()才能越过无效令牌。

此外,如果您愿意,hasNextInt() 将让您完全避免捕获。


推荐阅读