Сравнение объектов и переменных в Java

449
27 января 2017, 05:48

Здравствуйте, постоянно сталкиваюсь с проблемой сравнения объектов или просто переменных, даже одного типа. Точнее, элементов разных массивов одного типа. Конкретика: Нужно занести в один массив индексы всех элементов другого массива,
которые *не* содержатся в третьем массиве.

Реализую я это следующим образом:

    ...
    // Array_1 - одномерный int массив с некоторыми элементами
    // Array_2 - одномерный List<Integer>, в котором хранятся
    // индексы элементов, которые переносить не надо
    ...
    List<Integer> Array_3 = new ArrayList<>();
    for (Integer i = 0; i < Array_1.length; i++){
        for (int j = 0; j < Array_2.size(); j++){
            if (!Array_2.get(j).equals(i)){
                Array_3.add(i);
            }
        }
    }

В чём проблема: проверка !Array_2.get(j).equals(i) не срабатывает, и не важно, стоит восклицательный знак или нет - условие будет всегда true, и заноситься будут все i, а не те, которых нет в Array_2. И так не в первый раз. Такое замечаю постоянно - проверяю правильно, через .equals(), а результат нулёвый. Типы данных тоже соблюдаю - раз в Array_2 у меня хранятся объекты Integer, то и i тоже типа Integer.

И вторая часть вопроса: У меня есть некоторая функция, которая транспонирует двумерный List<List<Integer>>. В отдельном проекте всё работает отлично: в нём я создал конкретный вариант этого двумерного List-a, вывел его на экран, транспонировал, вывел на экран, попробовал разные варианты и размеры - все работает. В этом проекте больше ничего нет. В том же, где я пишу, если я пытаюсь вызвать эту функцию, программа зацикливается. Причём не зависает, что Windows пишет "программа не отвечает", а работает, но зациклившись и не закрываясь. Вот, собственно, код:

public static List<List<Integer>> transpose_2list (List<List<Integer>> badList) {
    // создаём "дупликат" поданного List-a, т.к. из него самого 
    // нельзя ничего удалять, добавлять etc.
    List<List<Integer>> answer = new ArrayList<>();
    Integer strings = 0, columns = 0;
    if (badList.size() < 1) {
        answer = badList;
    }
    // без этой проверки, если входной List будет пустым, будет NullPointerException
    if (badList.size() > 0) {
        if (badList.get(0).size() > 0) {
            strings = badList.get(0).size();
        }
    }
    if (badList.size() > 0) {
        columns = badList.size();
    }
    for (Integer i = 0; i < strings; i++) {
        answer.add(new ArrayList<>(columns));
    }
    // само транспонирование
    for (int i = 0; i < strings; i++) {
        for (int j = 0; j < columns; j++) {
            answer.get(i).add(badList.get(j).get(i));
        }
    }
    return answer;
}

Код рабочий, вроде, всё нормально. Вычислил, как выглядит подающийся в эту функцию List, специально попробовал всё в отдельном файле - проблем нет. При вызове в сложной программе - зацикливание. Причём именно на этой функции. Причём, после череды проб, мне показалось, что это как раз из-за проверок на badList.size() и т.д. Но без этого программа может крашнуться, и так далее. Пробовал сделать следующим образом:

   public static List<List<Integer>> transpone_the_2list (List<List<Integer>> badList) {
    List<List<Integer>> answer = new ArrayList<>();
    Integer strings = 0, columns = 0;
    boolean transposed = false;
    if (badList.size() < 1) {
            answer = badList;
    }
    // добавил всего одну проверку
    if (!transposed){
        transposed = true;
        if (badList.size() > 0) {
            if (badList.get(0).size() > 0) {
                strings = badList.get(0).size();
            }
        }
        if (badList.size() > 0) {
            columns = badList.size();
        }
        for (Integer i = 0; i < strings; i++) {
            answer.add(new ArrayList<>(columns));
        }
        for (int i = 0; i < strings; i++) {
            for (int j = 0; j < columns; j++) {
                answer.get(i).add(badList.get(j).get(i));
            }
        }
    }
    return answer;
}

Эта проверка тоже игнорируется и программа зацикливается,
даже больше: Intellij IDEA говорит:

Я примерно понимаю, что, по идее, при прохождении условия оно всегда true, и что это не цикл, но почему тогда программа зависает? Уже паранойя нападает, и начинаешь тыкать сотни непонятных ненужных проверок :) Что я делаю не так? Извините, если много текста, я решил подробно и на примерах описать свои проблемы. Благодарю заранее :)

READ ALSO
Проблема с использованием иконок

Проблема с использованием иконок

Я сделал NavigationDrawer с помощью MaterialDrawer от Mike PenzОн отлично работает, но когда я пытаюсь заменить значки "FontAwesome" на "GoogleMaterial" или другие получаю...

313
FBX binary как прочитать?

FBX binary как прочитать?

мне нужно прочтитать именно fbx binary(не предлагать fbx ascii)(хотел написать конвертер именно для java)

365