Привет, ребята, я новичок в java, и я наткнулся на эту штуку. Хорошо, так что здесь у меня есть кое-что, что я просто не могу понять

Вот у меня этот класс:

class FailSoftArray {

    private int a[]; // reference to array
    private int errval; 
    public int length; 

    public FailSoftArray(int size, int errv) {
        a = new int[size];
        errval = errv;
        length = size;
    }

    public int get(int index) {
        if(indexOK(index)) return a[index];
        return errval;
    }

    public boolean put(int index, int val) {
        if(indexOK(index)) {
            a[index] = val;
            return true;
        }
        return false;
    }

    private boolean indexOK(int index) {
        if(index >= 0 & index < length) return true;
        return false;
    }
}

Что означает indexOK(index)? Что оно делает?

-2
Ahmad Hamdy 4 Мар 2015 в 23:23

3 ответа

Лучший ответ

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

Обычно, если значение меньше нуля или больше или равно длине массива использовалось в качестве индекса, это вызовет ошибку с выдачей IndexOutOfBoundsException, поскольку массив индексируется из 0 к length - 1.

Метод избегает такого возможного результата, гарантируя, что индекс всегда будет действителен перед его использованием, и делает это путем сравнения индекса, чтобы убедиться, что он >= 0, затем сравнивая < length, затем {{X2} } проверяет, что оба верны (если оба условия верны, его можно использовать в качестве индекса для массива без создания исключения.)

3
mbomb007 4 Мар 2015 в 20:42

Когда вы вызываете indexOK, ваша программа запускает следующий метод с индексом в качестве аргумента:

private boolean indexOK(int index) {
if(index >= 0 & index < length) return true;
return false;
}
}

IndexOK возвращает логическое значение, поэтому результат будет либо истинным, либо ложным. Когда результат верен?

if(index >= 0 & index < length) return true;
return false;

Если аргумент больше или равен нулю И аргумент меньше длины, результат будет истинным. В противном случае результат будет ложным.

Цель indexOK - проверить, является ли значение подходящим индексом для массива. Отрицательный индекс недействителен, как и индекс, который равен или превышает длину массива, на который он ссылается. Итак, проверка

index >= 0

Определяет, является ли индекс отрицательным, и проверка

index < length

Определяет, равен ли индекс длине массива, на который он ссылается, или превышает его.

2
heartyporridge 4 Мар 2015 в 20:29

Позвольте мне переписать метод в более понятной форме:

    private boolean indexOK(int index) {
        if(index >= 0 & index < length) {
            return true;
        }
        return false;
    }

Метод вернет истину, когда значение индекса как минимум равно 0 и в то же время меньше длины. Вы можете использовать оператор if без фигурных скобок, но он будет использовать только следующую строку как «внутренний блок». Это довольно плохая практика, поскольку она немного непонятна. Более того, это может легко быть причиной нежелательных ошибок и ошибок, поскольку добавление строк во «внутренний блок» без добавления фигурных скобок вокруг них - не такая уж редкость. По моему скромному мнению, на одну строку (или две скобки) кода больше не так уж и много, и их всегда нужно добавлять.

-2
Edotee 4 Мар 2015 в 20:35