Java未报告的异常错误

时间:2014-10-16 21:51:21

标签: java exception compiler-errors

我有一个方法可以将两个向量相加在一起,如果这些向量的长度不同,我需要返回一个异常。 我写了一段代码

public static Vector  vectorAdd(Vector v1, Vector v2) throws IllegalOperandException{
    if(v1.getLength() == v2.getLength()) {
        double[] temp = new double[v1.getLength()];
        for(int i = 0; i < temp.length; i++) {
            temp[i] = v1.get(i) + v2.get(i);
        }
        Vector v3 = new Vector(temp);
        return v3;
    } else {
        throw new IllegalOperandException("Length of Vectors Differ");
    }
}

但是一旦我编译了我的主要方法

else if (userInput == 2) {
            System.out.println("Please enter a vector!");
            System.out.println("Separate vector components by "
                + "using a space.");
            Vector v1 = input.readVector();
            System.out.println();
            System.out.println("Please enter a vector!");
            System.out.println("Separate vector components by "
                + "using a space.");
            Vector v2 = input.readVector();
            System.out.println();
            System.out.println();
            System.out.println(LinearAlgebra.VectorAdd(v1, v2));

错误

错误:未报告的异常IllegalOperandException;必须被抓住或宣布被抛出                 System.out.println(LinearAlgebra.vectorAdd(v1,v2));

我现在一直在谷歌搜索一小时,但我没有得到什么问题。 我很确定它与try和catch相关,但我不知道如何修复它。 我该怎么办?

1 个答案:

答案 0 :(得分:3)

每当你做一些可以抛出特定类型Exception的东西时,你必须有适当的东西来处理它。这可以是两件事之一:

  1. try / catch块包围它;
  2. Exception类型添加到方法的throws子句中。
  3. 在您的情况下,您正在调用LinearAlgebra.vectorAdd()方法,并且该方法可以抛出IllegalOperandException(可能是因为其中一个参数是狡猾的)。这意味着您调用它的方法也可以抛出该异常。捕获它,或将throws IllegalOperandException添加到该行发生的方法的签名中。听起来好像是你的main方法,所以它会变成

    public static void main(String[] args) throws IllegalOperandException {
        //...
    }
    

    这称为让异常向上传播

    要抓住例外,你有

    try {
        System.out.println(LinearAlgebra.VectorAdd(v1, v2));
    } catch (IllegalOperandException e) {
        // do something with the exception, for instance:
        e.printStackTrace();
        // maybe do something to log it to a file, or whatever...
        // or you might be able to recover gracefully...
        // or if there's just nothing you can do about it, then you might:
        System.exit(1);
    }
    

    这将允许您在发生时处理它。如果一切都出错,它可以让你返回一些特定的结果,或者(在这种情况下)打印错误并终止程序。