2013-09-21 4 views
0

это университетское задание (образец академического отчета), я думал, что я был сделан и собираюсь подать, но когда я начал тестировать ... Я продолжаю получать ArrayIndexOutOfBoundsException в строке 60 в главном, и я не могу понять, почему. Я новичок в Java, но на самом деле много часов уделяю этой программе. Любая помощь/совет очень ценится. строка 60 = "int credits = Integer.parseInt (вход [1]);" // Я думаю, что ошибка связана с типами данных ??? я потерялся.получает ArrayIndexOutOfBoundsException, но не может понять, почему

классы Курс/класс/Отчет передать данные в основной java2pgm1

+0

Вы проверили, что такое значение переменной строки? –

+0

ОШИБКА = работа: Исключение в потоке "основного" java.lang.ArrayIndexOutOfBoundsException: 1 \t в java2pgm1.Java2pgm1.main (Java2pgm1.java:60) Java Результат: 1 строить успешные (общее время: 11 секунд) – XoronioX

+0

Привет, да спасибо. вот значение курса String. course = JOptionPane.showInputDialog («Пожалуйста, введите курс»); Строка [] input = course.split (":"); – XoronioX

ответ

0

При вызове расколоть возвращает вам массив. Здесь вы раскалываете с помощью (":") Перед доступом к нему вам нужно проверить длину переменной ввода.

String[] input = course.split(":"); 
    int credits = Integer.parseInt(input[1]); 

Массив вход не может содержать более чем на 1 значение, так что не удается

+0

вход = CGS1920: 1: b: 201201. для каждого присваивания не требуется проверка и предполагается, что вход всегда находится в правильном формате. – XoronioX

+0

Подробнее о ArrayIndexOutofBoundException. Это не имеет никакого отношения к типу данных. Это связано с длиной массива. Если вы вводите по существу CGS1920: 1: b: 201201, тогда ваш массив должен иметь 4 значения, а код должен работать. –

+0

Хорошо, спасибо за руководство! оцените помощь. пожалуйста, ищите меня еще одну вещь, после этого блока кода вы увидите код для ввода q для выхода из цикла ... это, возможно, будет частью проблемы, но выход не будет разделен после ввода q – XoronioX

0

исключение будет происходить, когда вход от пользователя не соответствует ожидаемой формате course_number:number_of_credits:grade_received:term_taken. В вашем случае, какое входное значение вы используете в этом исключении? Он содержит :?

Предполагают, что вы проверить длину input массива перед ссылкой на индекс [п]

+0

Большое спасибо! Я рассмотрю его и попытаюсь найти свою проблему. – XoronioX

0
String[] input = course.split(":"); 
int credits = Integer.parseInt(input[1]); 
Integer term = Integer.parseInt(input[3]); 
Course cObject = new Course(input[0],credits,input[2],input[3]); 

выше фрагмент кода в ваш главный всегда предполагает, что course строка имеет абв: Def: ГХИ: JKL по крайней мере 3 " :" в этом. Это всегда хорошая практика для обработки ошибки, когда строка не имеет 3 ":". Измените код на что-то, как показано ниже

String[] input = course.split(":"); 
if(input.length == 4) 
{ 
    int credits = Integer.parseInt(input[1]); 
    Integer term = Integer.parseInt(input[3]); 
    Course cObject = new Course(input[0],credits,input[2],input[3]); 
} 
else 
{ 
    //show some error message to user 
} 
+0

Это имеет смысл, поэтому программа может обрабатывать различное количество: во входных данных. Спасибо за совет! знак равно – XoronioX

0

здесь размер входного массива может быть 0 или 1, вы можете проверить его input.length. Если размер массива меньше или равен элементу, который вы хотите получить из массива, тогда возникает исключение Exception ArrayIndexOutOfBoundsException.

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