Оператор if внутри оператора try catch не обнаруживает часть try/catch
Итак, у меня есть задание для класса, и я полностью застрял. Я прятался здесь весь семестр и нашел то, что мне нужно, но на этот раз я потерян. Мне нужна помощь с оператором try catch внутри цикла. Задание требует от нас, чтобы люди вводили свои имена и выбирали расписание 1, 2, 3, 4, 5, 6. с исключениями, если оно выходит за пределы этого диапазона или если время уже занято. вот что у меня так далеко. при запуске он позволит мне ввести имя и время, но выдает ошибку для строки 40, которая является "if(timeSlot[i] <1 || >6){ "
линия.
Любая помощь будет оценена, спасибо
import java.util.Scanner;
public class Scheduler {
Scanner input = new Scanner(System.in);
public static void main(String[] args) throws TimeInUseException,
InvalidTimeException {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String name[] = new String[6];
int timeSlot[] = new int[6];
//as long as there is less than 6 it will keep running
int d = 0;
while (d < 6) {
//try block to see if the time slot has been taken
try {
for (int i = 0; i < name.length; i++) {
//ask for the name
System.out.println("Please type your name: ");
name[i] = input.nextLine();
//ask for the time
System.out.println("Please select a time: 1, 2, "
+ "3, 4, 5, 6");
timeSlot[i] = input.nextInt();
// if the time is less than 1 or greater than 6
// it will throw an invalid time exception
if (timeSlot[i] < 1 || timeSlot[i] > 6) {
throw (new InvalidTimeException());
}
// if the time slot is not equal to null(not empty)
// it will throw a time in use exception
if (timeSlot[i] != null) {
throw (new TimeInUseException());
}
}
} // catch for invalid time
catch (InvalidTimeException ite) {
ite.getMessage();
} //catch for time in use
catch (TimeInUseException tiue) {
tiue.getMessage();
}
d++;
}
for (int i = 0; i < 6; i++) {
System.out.println(name[i] + " has an appointment at: "
+ timeSlot[i]);
}
}
}
исключения на запрос
public class InvalidTimeException extends Exception{
//sets the String to say time is in use
public InvalidTimeException(String message) {
super(message);
message = "That time is invalid, please enter either 1, 2, 3, 4, 5, or 6";
}
InvalidTimeException() {
throw new UnsupportedOperationException("That time is invalid, please enter either 1, 2, 3, 4, 5, or 6"); //To change body of generated methods, choose Tools | Templates.
}
}
И второй
public class TimeInUseException extends Exception {
//sets the String to say time is in use
public TimeInUseException(String message) {
super(message);
// message = "That time is already in use, please select another";
}
TimeInUseException() {
throw new UnsupportedOperationException("That time is already in use, "
+ "please select another");
}
}
3 ответа
Ваш catch
блоки находятся не в том месте. Они должны быть сразу после вашего блока попытки, а не внутри. Я не совсем понимаю, что вы пытаетесь сделать со своим циклом for, так что, возможно, есть некоторые другие проблемы, но это должно быть началом.
То, что вы получили в строке 40, является синтетической ошибкой. Вы должны явно указать в логическом операторе ИЛИ, какое условие вы хотите ввести - компилятор Java здесь не догадается, что вы пытаетесь проверить, больше ли значение в массиве timeSlot больше 6. Что у вас есть? чтобы сделать это введите:
if(timeSlot[i] < 1 || timeSlot[i] > 6){
throw new InvalidTimeException();
}
Кроме этого, ваши блоки catch находятся вне области видимости и не могут быть в цикле for.
Измените свое заявление на if(timeSlot[i] < 1 || timeSlot[i] > 6)
,