2015-08-21 1 views
0
public class SomeClass { 
    int[] table;  
    int size; 

    public SomeClass(int size) { 
     this.size = size;  
     table = new int[size]; 
    } 

    public static void main(String[] args) { 
     int[] sizes = {5, 3, -2, 2, 6, -4}; 
     SomeClass testInst; 

     for (int i = 0; i < 6; i++) { 
      testInst = new SomeClass(sizes[i]); 
      System.out.println("New example size " + testInst.size); 
     } 
    }  
} 

Когда конструктор SomeClass вызывается с аргументом -2, генерируется ошибка времени выполнения: NegativeArraySizeException.Обработка ошибок в Java Задача

Я ищу, чтобы изменить этот код, чтобы он работал более уверенно, используя try, catch и throw. Конструктор должен вызывать исключение, но в противном случае ничего не делать при вызове с неположительным аргументом. Основной метод должен поймать исключение и распечатать предупреждающее сообщение, а затем продолжить выполнение через все шесть итераций цикла.
Кто-нибудь указывает мне в правильном направлении?

ответ

0

Вы должны бросить исключение (предпочтительно IllegalArgumentException) из конструктора SomeClass всякий раз, когда вы получите отрицательное число и обрабатывать его в основной метод. Ваш код должен выглядеть;

public class SomeClass 
{ 
    int[] table; 
    int size; 

    public SomeClass(int size) 
    { 
     if (size < 0) 
     { 
      throw new IllegalArgumentException("Negative numbers not allowed"); 
     } 
     this.size = size; 
     table = new int[size]; 
    } 

    public static void main(String[] args) 
    { 
     int[] sizes = { 5, 3, -2, 2, 6, -4 }; 
     SomeClass testInst; 
     for (int i = 0; i < 6; i++) 
     { 
      try 
      { 
       testInst = new SomeClass(sizes[i]); 

       System.out.println("New example size " + testInst.size); 
      } 
      catch (IllegalArgumentException e) 
      { 
       System.out.println(e.getMessage()); 
      } 
     } 
    } 
} 
+0

Большого вам спасибо :). – Federer

0

Есть операции, как подключение к удаленному серверу с помощью сокета, который может бросить исключения, как SocketException. Вам нужно поймать и справиться с этими исключениями, потому что, прежде чем приступить к соединению, вы не сможете узнать, будет ли это успешным или нет.

NegativeArrayException не так. Прежде чем приступать к созданию массива, вы можете точно знать, что он будет терпеть неудачу, если вы используете отрицательный размер.
Если размер исходит из вашего кода, как и в случае, вы должны исправить свой код, а не перехватывать это исключение.
Если он исходит из любого ввода, вы должны убедиться, что вход и действие соответствуют, прежде чем пытаться создать массив.

Если предположить, что массив размеров фактически упрощенный пример ввода способа справиться с ним будет:

public class SomeClass { 

    int[] table; 
    int size; 

    public SomeClass(int size) { 
     this.size = size; 
     table = new int[size]; 
    } 

    public static void main(String[] args) { 
     int[] sizes = {5, 3, -2, 2, 6, -4}; 
     SomeClass testInst; 

     for (int i = 0; i < 6; i++) { 
      if (sizes[i] < 0) { 
       System.out.println("Warning"); 
      } else { 
       testInst = new SomeClass(sizes[i]); 
       System.out.println("New example size " + testInst.size); 
      } 
     } 
    } 
} 

Что дает в качестве вывода:

New example size 5 
New example size 3 
Warning 
New example size 2 
New example size 6 
Warning 
+0

Большое вам спасибо :), tht отвечает на мою проблему :). – Federer

Смежные вопросы