@Zlaylink

Почему результат кода разный?

Есть метод который находит прямоугольники в матрице, первый выдает верный результат, после попытки записать ветвление If-else в одно условие ловлю java.lang.ArrayIndexOutOfBoundsException: -1.
public static int getRectangleCount(byte[][] a)
    {
        int count = 0;
        for (int j = 0; j < a.length; j++) {
            for (int i = 0; i < a.length; i++) {
                if (a[i][j] == 1) {
                    if (i == 0){
                        if (j == 0) {
                            count++;
                        } else if (a[i][j - 1] == 0) {
                            count++;
                        }
                    } else if (a[i - 1][j] == 0) {
                        if (j == 0){
                            count++;
                        } else if (a[i][j - 1] == 0) {
                            count++;
                        }
                    }
                }
            }
        }
        return count;
    }


public static int getRectangleCount(byte[][] a)
    {
        int count = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a.length; j++) {
                if (a[i][j] == 1 && ((i == 0 && (j == 0 || a[i][j-1] == 0)) || (a[i-1][j] == 0 && (j == 0 || a[i][j-1] == 0)))) {
                    count++;
                }
            }
        }
        return count;
    }
  • Вопрос задан
  • 218 просмотров
Решения вопроса 1
VYakushev
@VYakushev
Разработчик Android в Nowtaxi
По-моему, вы с циклами намутили: массив у вас двумерный, но в обоих циклах вы запрашиваете длину только одного из индексов. Зато внутри в условиях подразумеваете использование обоих индексов. Вполне возможно, что ошибку вы не ловите в первом варианте кода из-за того, что используете другой порядок циклов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы