2017-02-02 11 views
2

Я узнаю об исключениях в java. Я столкнулся со следующей проблемой:Можем ли мы использовать «catch» для обработки OutOfBoundsException с определенным значением?

String bigstring = myscanner.nextLine(); 
String[] splited = bigstring.split("\\s+"); 
try { 
    smallstring1 = splited[0]; 
    smallstring2 = splited[1]; 
    smallstring3 = splited[2]; 
} catch(java.lang.ArrayIndexOutOfBoundsException exc) { 
    smallstring3 = null; 
} 

Это будет работать, если пользователь хочет ввести только 2 слова.

Что делать, если он хочет набрать одно слово?

Можем ли мы как-то указать значение, которое мы получаем по ошибке после двоеточия?

Как:

java.lang.ArrayIndexOutOfBoundsException: 2 

или

java.lang.ArrayIndexOutOfBoundsException: 1 

Можно ли как-то использовать (в данном примере), это "2" или "1" в Try/поймать блок?

ответ

1

Вероятно, вы не должны использовать исключения для нормального потока программы. Исключения обычно должны быть «исключительными».

В любом случае, хотя вы не можете этого сделать, вы можете использовать операторы if внутри вашего блока catch. Вы также можете проверить splited.length, чтобы проверить, насколько велик массив.

2

java.lang.ArrayIndexOutOfBoundsException не является исключением, предназначенным для возмещения. Он передает ошибку программирования.
Поэтому, вместо того чтобы пытаться понять индекс, который вызывает проблему в catch, вы должны убедиться, что исключение не возникает.

В вашем случае вы должны проверить размер массива, прежде чем пытаться получить его значение.

Вот пример:

int arraySize = splited.length; 

    if (arraySize == 3){ 
     smallstring1=splited[0]; 
     smallstring2=splited[1]; 
     smallstring3=splited[2]; 
    } 

    else if (arraySize == 2){ 
     smallstring1=splited[0]; 
     smallstring2=splited[1]; 
    } 

    else if (arraySize == 1){ 
     smallstring1=splited[0]; 
    }