Хорошо. Так. Самая сложная проблема, которую вы пытаетесь решить с помощью этого фрагмента кода: «Что произойдет, если кто-то попытается ввести оценку, которая выходит за пределы?» Если кто-то введет оценку, скажем, «-15», то это, очевидно, будет ошибкой!
Я не уверен, требует ли ваша домашняя работа «исключения» для обработки ошибки. Если нет, то я бы не использовал try {} / catch {} для этой проблемы, так как это излишне. Но сначала давайте посмотрим на ваш код:
if (grade[index] < 0 || grade[index] > 100 )
{
try
{
x=1;
}
catch (InvalidTestScore e)
{
e.printlnStackTrace();
System.out.println ("Choose a test score between 0 and 100");
}
}
else
{
x=2;
}
А конкретнее:
try
{
x=1;
}
Итак. Что означает этот блок? Там написано: «Привет, Java, попробуй сделать что-то внутри этого блока try {}. Если выдается ошибка, перейдите к блоку catch {}». В этом случае содержимое блока try {} имеет вид «x = 1». Возникает вопрос: «Будет ли выражение x = 1 когда-либо создавать исключение?» В этой программе нет, не будет. Программа будет делать то, что говорит - присвоить значение «1» переменной «x». Попробовать / поймать здесь не имеет смысла . Это не ловушка настоящей ошибки.
И настоящая ошибка, конечно же, заключается в том, вводит ли пользователь неверный номер. Проверка на это может выглядеть так:
if (grade[index] < 0 || grade[index] > 100 )
{
System.out.println("Choose a test score between 0 and 100");
break;
}
Это говорит о том, что если оценка выходит за пределы, распечатайте сообщение об ошибке. "перерыв;" означает «выйти из цикла» - чтобы прекратить выбирать оценки.
Теперь перейдем к вашей фактической ошибке. "InvalidTestScore" не найден. В Java, если вы собираетесь использовать переменную или объект, вы должны сначала определить его. Когда вы говорите «поймать (InvalidTestScore e)», вы говорите java: «Если возникнет ошибка, мы выдадим исключение. Существует много типов исключений, но мы ищем InvalidTestScore».
Что ж, в Java нет исключения типа InvalidTestScore. Java поставляется с исключениями NullPointerExceptions и ArrayIndexOutOfBound, но не с InvalidTestScore. Это означает, что если вы хотите использовать исключение InvalidTestScore, вы должны написать свое! (Как это сделать выходит за рамки этого ответа.)
Но ты не написал свой собственный. Так что Java не знает, где его найти. T * символ ошибки "невозможно найти". *
Итак, есть некоторые другие проблемы с вашим кодом - циклы, которые не должны быть там, и т. Д. И т. Д. Я рекомендую вам открыть пустой файл .java и начинать по одной строке за раз. Сначала напишите так много кода:
strInput = JOptionPane.showInputDialog(null, "How many tests do you have? ");
numberofTests = Integer.parseInt(strInput);
System.out.println(numberofTests);
Скомпилируйте и запустите программу. Убедитесь, что эти 3 строки делают то, что вы ожидаете. Если это не так, то сделайте эту часть отлично работающей. Затем перейдите к следующей части кода:
for (int index = 0; index < grade.length; index++) /* etc */
Постепенно создавая свою программу, и , компилируя ее как можно чаще, вы избежите написания кода страницы только для того, чтобы найти расстраивающую ошибку, которую трудно отследить.
И, конечно, вам следует посетить часы работы вашего профессора или ТА! Это делает ТА счастливой. :)
Удачи!