当前位置: 首页 > 知识库问答 >
问题:

如何解决switch case语句中的异常处理问题?

边银龙
2023-03-14

我正在为班级做一个项目,我们的任务是设计一个包含5个选项的计算器程序。如果用户输入的选项不在1和5之间,当我试图编码以捕获时,我面临一个问题。当前,如果用户输入6到9之间的数字。第一次捕获异常时,将显示一条错误消息,提示输入1到5之间的选项,并显示一条重新输入的消息。但是,如果用户继续输入6到9之间的数字,则不会显示错误消息,并显示主菜单。我还试图捕捉输入字符串而不是1和5之间的选择,并显示不同的错误消息,说明用户输入了无效输入,然后要求用户重新输入,然而,当输入一个字符串作为选项时,我会收到一个输入不匹配异常错误,但当选择操作后输入一个字符串而不是浮点时,则会显示正确的错误消息。

我是一名Java初学者,愿意接受所有建议,但如果可能的话,我希望我的代码与当前的编写方式有些相似。

static void promptEnterKey() {
    System.out.println("Press enter key to continue ...");
    Scanner scanner = new Scanner(System.in);
    scanner.nextLine();
}

public static void main(String[] args) {
    float Firstnum, Secondnum, Solution;
    int choice;
    Scanner scan = new Scanner(System.in);
    do {
        System.out.printf("Welcome to Paul's Handy Calculator\n\n (1) Addition\n "
                + "(2) Subtraction\n (3) Multiplication\n (4) Division\n (5) Exit\n\n");
        System.out.printf("What would you like to do? ");
        choice = scan.nextInt();
        try {
            if (choice < 1 || choice > 5) {
                System.out.printf("You have not entered a number between 1 and 5. "
                        + "Try again.\n");
                System.out.printf("Enter your choice between 1 and 5 only: \n");
                choice = scan.nextInt();
                continue;
            }
            switch (choice) {
            case 1:
                System.out.print("Please enter two floats to add, "
                        + "separated by a space: ");
                Firstnum = scan.nextFloat();
                Secondnum = scan.nextFloat();
                Solution = Firstnum + Secondnum;
                System.out.println("Result of adding " + Firstnum + " and " 
                        + Secondnum + " is " + Solution + "\n");
                promptEnterKey();
                break;
            case 2:
                System.out.println("Please enter two floats to subtract, "
                        + "separated by a space: ");
                Firstnum = scan.nextFloat();
                Secondnum = scan.nextFloat();
                Solution = Firstnum - Secondnum;
                System.out.println("Result of subtracting " + Firstnum 
                        + " and " + Secondnum + " is " + Solution + "\n");
                promptEnterKey();
                break;
            case 3:
                System.out.print("Please enter two floats to multiply, "
                        + "separated by a space: ");
                Firstnum = scan.nextFloat();
                Secondnum = scan.nextFloat();
                Solution = Firstnum * Secondnum;
                System.out.print("Result of multiplying " + Firstnum + " and " 
                        + Secondnum + " is " + Solution + "\n");
                promptEnterKey();
                break;
            case 4:
                System.out.print("Please enter two floats to divide, "
                        + "separated by a space: ");
                Firstnum = scan.nextFloat();
                Secondnum = scan.nextFloat();
                if (Secondnum == 0) {
                    System.out.println("You cannot divide by zero, "
                            + "please enter another number to divide by");
                    Secondnum = scan.nextFloat();
                }
                Solution = Firstnum / Secondnum;
                System.out.println("Result of dividing " + Firstnum + " and " 
                        + Secondnum + " is " + Solution + "\n");
                promptEnterKey();
                break;
            case 5:
                System.out.println("Thank You for using Paul's Handy Calculator");
                System.exit(0);
                break;
            default:
            }
        } catch (InputMismatchException ex) {
            System.out.println("You have entered an invalid choice. Try again.  ");
            String flush =scan.next();
        }
    } while (choice != 5);
}

共有1个答案

华烈
2023-03-14

您只需将欢迎信息移到do之外,同时移动初始的扫描。nextInt()在try块内调用,并删除扫描。nextInt()在if语句中调用:

// Moved welcome message outside of do-while
System.out.printf("Welcome to Paul's Handy Calculator\n\n (1) Addition\n "
        + "(2) Subtraction\n (3) Multiplication\n (4) Division\n (5) Exit\n\n");
System.out.printf("What would you like to do? ");

do {
    try {
        // Moved scan.nextInt inside of try block
        choice = scan.nextInt();
        if (choice < 1 || choice > 5) {
            System.out.printf("You have not entered a number between 1 and 5. " + "Try again.\n");
            System.out.printf("Enter your choice between 1 and 5 only: \n");          
            // Removed nextInt call
            continue;
        }
        ...
 类似资料:
  • 本文向大家介绍浅谈JavaScript异常处理语句,包括了浅谈JavaScript异常处理语句的使用技巧和注意事项,需要的朋友参考一下 程序运行过程中难免会出错,出错后的运行结果往往是不正确的,因此运行时出错的程序通常被强制中止。运行时的错误统称为异常,为了能在错误发生时得到一个处理的机会,JavaScript提供了异常处理语句。包含try-catch、try-catch-finally和thro

  • 问题内容: 我有一个关于异常处理的问题。考虑以下Java代码段。 我知道这是处理异常的推荐方法。但是我可以通过使用以下代码片段来实现相同的目的。 有人可以告诉我第二种方法的弊端吗? 问题答案: 第二种方法可读性较差。此外,即使“聪明”的窍门是使用instanceof关键字,Pokemon异常处理也永远不会走。无论如何,我不是在取笑或嘲笑您,但最好是编写供人类阅读和维护的代码,而不是计算机。

  • 本文向大家介绍详解Java异常处理中finally子句的运用,包括了详解Java异常处理中finally子句的运用的使用技巧和注意事项,需要的朋友参考一下 当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。finally关

  • 本文向大家介绍C#异常处理中try和catch语句及finally语句的用法示例,包括了C#异常处理中try和catch语句及finally语句的用法示例的使用技巧和注意事项,需要的朋友参考一下 使用 try/catch 处理异常 try-catch 块的用途是捕捉和处理工作代码所生成的异常。 有些异常可以在 catch 块中处理,解决问题后不会再次引发异常;但更多情况下,您唯一能做的是确保引发适

  • 本文向大家介绍解析Python中的异常处理,包括了解析Python中的异常处理的使用技巧和注意事项,需要的朋友参考一下 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。 用错误码来表示是否出错十分不便,因为函数

  • 本文向大家介绍一篇文章解决Java异常处理,包括了一篇文章解决Java异常处理的使用技巧和注意事项,需要的朋友参考一下 前言 与异常相关的内容其实很早就想写了,但由于各种原因(懒)拖到了现在。在大二开学前夜(今天是8.31)完成这篇博客,也算完成了暑期生活的一个小心愿。 以下内容大多总结自《Java核心技术 卷Ⅰ》,同时也加上了一些华东师范大学陈良育老师在《Java核心技术》Mooc中所讲的内容。