Оператор 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),

Другие вопросы по тегам