有 Java 编程相关的问题?

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

list Java:如何使用try/catch块和return

如果列表为空并且我想getLast(),下面的代码将抛出一个异常。另外,我想用throw/catch-blocks对其进行修改,以便异常消息将出现在控制台上

double foo(double[] numbers, double n) {
    LinkedList<Double> list = new LinkedList<Double>();
    for (double x : numbers) {
        if (x > 0 && x <= n && x % 2 != 0) {
            list.add(x);
        }
    }

    Collections.sort(list);
    return list.getLast();
}

我的想法是:

double foo(double[] numbers, double n) {
    LinkedList<Double> list = new LinkedList<Double>();
    for (double x : numbers) {
        if (x > 0 && x <= n && x % 2 != 0) {
            list.add(x);
        }
    }

    Collections.sort(list);
    try{
        return list.getLast();
    } catch (Exception e){
        System.out.println("caught: " + e);
    }
    return list.getLast();
}

是这样吗?异常是否被捕获?那throw/catch-块后面的代码呢?它会执行吗?如果是,异常是否将由return list.getLast();再次抛出


共 (3) 个答案

  1. # 1 楼答案

    如果list.getLast()抛出异常,将捕获该异常并打印消息。然后,您将执行完全相同的操作,并抛出完全相同的异常

    如果您依赖于列表空时抛出异常,请考虑重新投掷例外:

    try {
      return list.getLast();
    } catch (Exception e) {
      System.err.println("Caught: " + e);
      throw e; // re-throw
    }
    // no "return" outside since we'll have thrown our previously caught error.
    
  2. # 2 楼答案

    • 是这样吗如果希望在打印后抛出异常,这可能是正确的功能,但调用getLast()两次并不是“正确”的方法
    • 异常被捕获了吗是的
    • 抛出/捕获块之后的代码是什么?将要执行的是什么是的,它将执行。由于捕获到异常并且没有重新抛出,因此执行将照常继续
    • 如果是,按返回列表。getLast();是否将再次抛出异常是,将再次引发异常

    我想你要找的是:

    try {
        return list.getLast();
    } catch (Exception e){
      System.out.println("caught: " + e); // consider e.printStackTrace()
      throw new RuntimeException("Failed to get last", e);
    }
    }
    
  3. # 3 楼答案

    为什么要使用try/catch呢。如果您只想确定列表是否为空,那么检查list.size() != 0怎么样?然后返回list.getLast()(如果为真)或Double.Nan(如果为假),并向控制台发送消息