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

使用catch块来继续代码而不是处理异常可以吗?

夏侯嘉荣
2023-03-14

我有一些代码,包括检查用户输入,看看输入是字符串还是int,并将根据结果执行不同的代码。我使用integer.ParseInt来确定用户输入是否是整数,如果不是,则抛出NumberFormatException。

import java.io.*;
import java.util.*;

public class Datafile{

    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\Kence\\workspace\\Java 8 - Beyond the Basics - Working Files\\Practice Programs\\src\\Practice Data Edited",true));
        String data = null;
        boolean end = false;
        boolean cont = true;
        String dataEntered = null;
        int menuChoice = printMenu();
        while(!end){
            switch(menuChoice){
                case 1:
                    System.out.println("Please enter a line of data or press 0 to exit back to the main menu");
                    dataEntered = input.nextLine();
                    try {
                        if(Integer.parseInt(dataEntered) == 0){
                            break;
                        }
                    } catch (Exception e) {
                        data += dataEntered + "\n";
                        while(cont){
                            System.out.println("Data entered.Please enter the next line of data or press quit to exit back to the main menu.");
                            dataEntered = input.nextLine();
                            if(Integer.parseInt(dataEntered) == 0){
                                cont = false;
                                break;
                            }else{
                                data+= dataEntered;
                                System.out.println("Current data entered is " + dataEntered);
                            }
                    }


                    }


                    break;

                case 2:
                    System.out.println("2 Entered");
                    break;
                case 3:
                    System.out.println("3 Entered");
                    break;
                case 4:
                    System.out.println("4 Entered");
                    break;
            }//End of switch statement
            menuChoice = printMenu();
        }



        input.close();
    }//End of main



    public static void printStars(){
        for(int i = 0; i<66 ; i++){
            System.out.print("*");
        }
        System.out.println();
    }

    public static int printMenu(){

        printStars();
        System.out.println("System Started");
        printStars();
        System.out.println("Enter 1 to input a new line of data");
        System.out.println("Enter 2 to list all data");
        System.out.println("Enter 3 to save existing data");
        System.out.println("Enter 4 to load data");
        printStars();
        return Integer.parseInt(input.nextLine());
    }

}

共有1个答案

刘安志
2023-03-14

异常通常只应在特殊情况下使用(参见名称来自哪里?)。它们在紧循环中尤其糟糕,因为执行开销很高。有无效的用户输入似乎是一个相当常见的情况,所以我会寻找另一种方法。看看这个答案。

但这一切都取决于语言。例如,在Python中,try/catch是事实上的编码方式(duck-typing)。

 类似资料:
  • 问题内容: 在一个教程中,我发现 您的代码无法处理Unchecked Exception, 即我们不能使用块,示例是类似的异常,但是可以使用try / catch块处理这些异常。我认为我不清楚这个概念! 我也认为throw关键字只能与block.can一起使用吗? 问题答案: 已检查和未检查的异常之间的唯一区别是,必须使用捕获或在方法签名中声明 已 检查的异常,而对于未检查的异常,这是可选的。 您

  • 无法使用由try和catch块包围的@controlleradvice和@afterthollow when方法。 我可以一步一步解释 }

  • EDIT应该返回true或false,但它的抛出错误

  • 在我的脚本中,有时会出现服务器、连接、配置或API问题,因此我实现了一个try-catch块来正确捕获异常并跳过它们。 ...但我的问题没有用这个解决方案解决,因为(引发问题的)元素不是问题本身。所以基本上,我的问题是,是否有任何方法可以捕获错误并继续您离开的地方:不跳过错误并转到下一个元素,而是在foreach循环中重复当前的迭代。 显然,继续和打破是行不通的! ...并且当catch部分捕获到

  • 我一直在研究如何改变c#方法执行的行为,特别是当出现异常以支持: 重试/继续:能够再次尝试同一语句并在成功后继续跳过/继续:移动到下一个语句并继续执行 我读过很多回复,说这是糟糕的编码实践,但这是针对代码转换器的,它从支持此功能的语言转换数百万行代码。我需要在功能上保持一致。

  • 本文向大家介绍SQL Server 2005 中使用 Try Catch 处理异常,包括了SQL Server 2005 中使用 Try Catch 处理异常的使用技巧和注意事项,需要的朋友参考一下 TRY...CATCH是Sql Server 2005/2008令人印象深刻的新特性.提高了开发人员异常处理能力.没有理由不尝试一下Try.. Catch功能. * TRY 块 - 包含可能产生异常的