我有一个方法可以将两个向量相加在一起,如果这些向量的长度不同,我需要返回一个异常。 我写了一段代码
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相关,但我不知道如何修复它。 我该怎么办?
答案 0 :(得分:3)
每当你做一些可以抛出特定类型Exception
的东西时,你必须有适当的东西来处理它。这可以是两件事之一:
try
/ catch
块包围它; Exception
类型添加到方法的throws
子句中。在您的情况下,您正在调用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);
}
这将允许您在发生时处理它。如果一切都出错,它可以让你返回一些特定的结果,或者(在这种情况下)打印错误并终止程序。