2014-10-16 2 views
1

У меня есть метод, который добавляет два вектора вместе, и мне нужно вернуть исключение, если длина этих векторов не совпадает с началом. Я написал кодОшибка Java error error

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));

Я уже нахожусь в Интернете в течение часа, но я не понимаю, в чем проблема. Я уверен, что это связано с попыткой и уловкой, но я понятия не имею, как это исправить. Что мне делать?

+2

У вас есть исключение исключения IllegalOperandException.so вам нужно обработать исключение –

+0

Попробуйте окружить этот System.out.println (LinearAlgebra blah blah) блоком try/catch, который специально обрабатывает IllegalOperandException или вообще, обрабатывает Exception. – MarsAtomic

+1

@MarsAtomic http://stackoverflow.com/questions/2416316/why-is-the-catchexception-almost-always-a-bad-idea – m0skit0

ответ

3

Всякий раз, когда вы делаете что-то, что может бросить определенный тип Exception, у вас должно быть что-то на своем месте. Это может быть одно из двух:

  1. окружают его с блоком try/catch;
  2. введите 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); 
} 

Это позволит вам иметь дело с ним, когда это произойдет. Это позволяет вам возвращать некоторый конкретный результат, если все идет не так, или (в этом случае) печатает ошибку и завершает работу программы.