如何修复java中的while/try-catch循环错误

如何修复java中的while/try-catch循环错误,java,loops,try-catch,Java,Loops,Try Catch,我正在创建一个简单的计算器程序(java编程的第一周) 问题背景:只有5个选项有效。(1-加;2-减;3-乘;4.除;5.退出)。当用户输入1-4个选项时,结果将填充,但用户需要返回以重新输入数据,直到选择选项5为止。5是退出程序(结束循环/程序的唯一方法)。我的问题:1。如何阻止try-catch不停地运行?有没有更好的方法来实现try-catch?e、 例如,处理字符串数据错误消息。理想情况下,如果输入了字符串,则代码应通过生成消息“请重新输入数字…”返回以重新启动,直到用户2输入有效数字。

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

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

以下是我输入的代码:

    12 2 
    //-everything works well.
    2 //-enter again 
    s s (string entry-error) 
然后,填充以下消息:

“您输入的浮动无效。请重新输入:
线程“main”java.util.InputMismatchException中出现异常
...
在calculator.performSubtract(calculator.java:65)
位于calculator.main(calculator.java:34)”
代码(示例)

公共类计算器{
//使用静态方法来实现程序
静态扫描仪用户输入=新扫描仪(System.in);
静态int用户选择;
静态浮点数;
静态浮点数wo;
静态浮动答案;
静态整数选择;
公共静态void main(字符串[]args){
做{
//除非输入5,否则必须重复此菜单语句(退出
//计划)

System.out.println(“欢迎使用我认为问题在于您没有从扫描仪中清除问题令牌。 catch语句打印一条错误消息,然后再次尝试将同一标记解析为int或float

您可以在此处查看:

看起来您需要调用
userInput.next()
,以通过无效令牌


还有,hasNextInt()如果您愿意,可以完全避免捕获。

对于第一个问题:try-catch块通常用于查看您的代码是否无误地运行。根据您解释的内容,我将在赋值之前使用while循环,用于
numberOne
numberTwo
输入是否正确是浮动还是不浮动

// pseudo

while(input != float || input2 != float)
{
  print(please reenter)
}
numberOne = input
numberTwo = input2

错误在于,当读取无效输入时,
Scanner.nextFloat
不会推进当前标记。这意味着,当您在catch语句中再次调用
nextFloat
两次时,您将再次读取标记
s
s
,其中第一次将导致输入不匹配异常再次抛出。您应该将
performSubtract
方法更改为如下所示:

public static void performSubtract () {
    //catch errors
    System.out.println("Please enter two floats to subtraction, separated by a space");
    userInput.nextLine();//ignore the new line
    do {
        try {
            String[] nextLineTokens = userInput.nextLine().split("\\s+");
            if(nextLineTokens.length != 2)
            {
                System.out.println("You have not entered two floats. please re-enter:");
                continue;
            }
            numberOne = Float.parseFloat(nextLineTokens[0]);
            numberTwo = Float.parseFloat(nextLineTokens[1]);
            answer= numberOne-numberTwo;
            break;
        }
        catch (Exception e) {
            System.out.println("You have entered invalid floats. please re-enter:  ");
        }
    } while (true);
    System.out.printf("You entered: %.1f %.1f\n", numberOne, numberTwo);
    System.out.printf("Result of subtraction %.1f minus %.1f is %.1f\n", numberOne, numberTwo, answer);
    System.out.println("\nPress enter key to continue...");
    userInput.nextLine();
}
此外,如果输入无效输入,解析代码将继续,但如果输入的数字不是1-5,解析代码将退出。如果是第一次读入输入,解析代码也会因无效输入而退出。您可能应该更改解析迭代循环,如下所示:

public static void main(String[] args) {
    while(choice != 5) {
        //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) {
            userInput.next();
            continue;
        }
        switch (choice) {
            case 2: performSubtract();
            break;
            // ...
            case 5: exit();
            break;
        } 
    }
    userInput.close();
}
publicstaticvoidmain(字符串[]args){
while(选项!=5){
//除非输入5,否则必须重复此菜单语句(退出
//计划)

System.out.println(“欢迎来到这里,你的帖子看起来大部分都是代码。请添加更多细节,并将代码缩减为a。谢谢。我仍在努力学习如何简洁地提问。我正在学习java。有点被各种不同的概念淹没了。
public static void main(String[] args) {
    while(choice != 5) {
        //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) {
            userInput.next();
            continue;
        }
        switch (choice) {
            case 2: performSubtract();
            break;
            // ...
            case 5: exit();
            break;
        } 
    }
    userInput.close();
}