有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java学习TryCatch

我是Java初学者,所以请耐心听我说

static int load = 100;
static int greet;

public void loadDeduct(int cLoad, int c){
    int balance;
    balance = cLoad - 7;
    System.out.println("Your balance: " + balance);
}

public void loadDeduct(int tLoad){
    int balance;
    balance = tLoad - 1;
    System.out.println("Your balance is: " + balance);
}

public static void main (String [] args){
    int choice;
    Scanner scan = new Scanner(System.in);

    System.out.println("I'm a cellphone, what do you want to do?");
    System.out.println("Press 1 to send SMS / Press 2 to Call");

    choice = scan.nextInt();

    CellphoneLoad N95 = new CellphoneLoad();

    if (choice == 1){
        N95.loadDeduct(load);
    }else if (choice == 2){
        N95.loadDeduct(load, greet);
    }else{
        System.out.println("Invalid Option!!!");
    }

如何用这个程序实现异常处理? 我不太确定如何使用catch block,因为我们还没有被告知整个异常情况。这只是我们被要求做的一个练习。我想用try-catch块替换if-else语句。。。可能吗


共 (3) 个答案

  1. # 1 楼答案

    代码中唯一可能引发异常的部分是调用:

    scan.nextInt();
    

    根据JavaDocs,这可能会引发以下异常:

    • 输入不匹配异常(如果下一个 令牌与整数不匹配 正则表达式,或已超出 射程)
    • 无接触异常(如有) 输入已耗尽)
    • 非法州例外(如果 (扫描仪已关闭)

    因此,如果您想让代码考虑引发这些异常的可能性,您应该这样重新编写:

    try {
        choice = scan.nextInt();
    } 
    catch (InputMismatchException e) {
      System.out.println(e.getMessage());
    }
    catch (NoSuchElementException e) {
      System.out.println(e.getMessage());
    }
    catch (IllegalStateException e) {
      System.out.println(e.getMessage());
    }
    

    一般来说,你希望你的“捕获”块从特定的或很可能发生在不太可能/更一般的性质开始

    您还可以“抛出”异常,这样无论异常发生在哪个方法中都不会处理它——调用导致异常的方法的方法必须处理它(或者再次抛出它,等等,直到它到达Java运行时)

    如果您希望替换“如果”语句,我建议您使用“切换”语句:

    switch (choice) {
        case 1:  N95.loadDeduct(load);
                 break;
        case 2:  N95.loadDeduct(load, greet);
                 break;
        default: System.out.println("Invalid Option!!!");
    }
    
  2. # 2 楼答案

    在这段代码中添加异常不会增加太多价值。 我能想到的是这样的:

    public static void main (String [] args){
    
    .....
    
    try{
     handleUserChoice(choice);//new method
    }
    catch(InvalidChoiceException e){
     System.out.println("Invalid Option!!!");
    }
    }
    
  3. # 3 楼答案

    在java中考虑异常的一个重要原则是: 1.运行时 2.打字/明确(因为没有更好的词)

    当出现编程错误时,应该抛出运行时异常,通常不应该捕获它们,除非您在顶层捕获以报告错误

    类型化/显式异常是在方法调用上修饰的,应该存在,以便调用方可以对其采取一些操作

    在上面的代码中,没有一个地方感觉它应该使用异常处理

    正如Patrick所指出的,您通常不希望使用异常来进行流控制