Для цикла логика работает, но не имеет смысла - PullRequest
0 голосов
/ 14 ноября 2018

VisitProcedure.length равно 7

Так что по какой-то причине этот метод работает так, как я хочу.Но логика не имеет смысла для меня.У меня есть массив 7 , и я хочу, чтобы пользователь ввел некоторую часть индекса 0-6 , и он будет отображать значение этого индекса.Если они набирают число, которое выходит за пределы, то это вызывает исключение.Но вот как я читаю логику оператора if

, если index меньше 0 или index больше 6, сделайте это (p = VisitProcedure [index] .getProcedure (); // отображает индекс

Но вместо этого он делает противоположное. Когда я выбираю 0-6 Он отображает значение массива по этому индексу, а когда я делаю что-то еще, его индекс не совпадает.Также, когда я пытаюсь использовать другую логику

, если индекс больше, чем равен 0 и меньше, чем 7, сделать это

, я все равно сталкиваюсь с ошибкой. Но в основном все работает нормальноэто просто не имеет смысла для меня, почему.

public Procedure GetByIndex(int index)throws ArrayIndexOutOfBoundsException {
            Procedure p;
            if (index < 0 || index > 1 - VisitProcedure.length) { //switching 1 - to - 1 still doesnt work
                p = VisitProcedure[index].getProcedure();
                return p;   
            }
            else{
                ArrayIndexOutOfBoundsException ar;
                ar = new ArrayIndexOutOfBoundsException(); 
                throw ar;
                //throw new ArrayIndexOutOfBoundsException();

            }
        }

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Ваш текущий код неверен, но он все равно работает по следующим причинам:

  • , если вы передаете действительный индекс (от 0 до 6), index > 1 - VisitProcedure.length равен true(поскольку 1 - VisitProcedure.length отрицательно), поэтому условие if равно true, и вы возвращаете VisitProcedure[index].getProcedure().

  • Если вы передаете недопустимый index > 6 или index < 0,условие по-прежнему true, и при обращении к недопустимому индексу массива выбрасывается ArrayIndexOutOfBoundsException (т.е. он все еще генерируется, но не по предложению else).

В другихслова, ваше состояние всегда true, поэтому ваш код эквивалентен:

public Procedure GetByIndex(int index)throws ArrayIndexOutOfBoundsException {
    return VisitProcedure[index].getProcedure();
}
0 голосов
/ 14 ноября 2018
If(index>0 && index<=VisitProcedure.length-1){
    //if index is greater than 0 and less than or equal to index 6

    p = VisitProcedure[index].getProcedure();
            return p; 

}else{
 ArrayIndexOutOfBoundsException ar;
            ar = new ArrayIndexOutOfBoundsException(); 
            throw ar;
            //throw new ArrayIndexOutOfBoundsException();

}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...