добавление элементов в ArrayList с использованием цикла и вывод их на консоль - PullRequest
0 голосов
/ 25 сентября 2018

Я знаю, что это основной вопрос, но я боролся с ним в течение многих дней и не могу найти решение.Пожалуйста, любой совет будет очень признателен.

Я просто пытаюсь добавить элементы (объекты Node), содержащиеся в существующем ArrayList, в новый пустой ArrayList.Идея состоит в том, что если я могу добавлять элементы по одному, я могу запустить метод сортировки кучи для списка из 1 элемента, затем из списка 2, затем из списка 3 и т. Д.

Однако при использовании цикла for, цикла while или даже расширенного цикла for я не могу успешно добавлять элементы и выводить их результирующие значения или их порядок.Когда я добавляю их вручную, как показано ниже, это работает:

 ArrayList<Integer> test_list = new ArrayList<Integer>();

test_list.add(0, 5);
test_list.add(1,10);
test_list.add(2, 15);
test_list.add(3, 20);
test_list.add(4, 25);

for (Integer num : test_list){      
System.out.println("output testing output testing" + num);
}

Однако, когда я пытаюсь использовать цикл для их добавления, например:

for (int i = 0; i<test_list.size()-1; i++)
{
    test_list.add(i, i*5);
    System.out.println(test_list.get(i));
}

Это не будет работать!Я посмотрел API для ArrayList и посмотрел на вопросы о стековом потоке, и из того, что я понял, метод .set (index, element) не работает в пустых списках, однако .add (index, element) 'должно работать, и я не могу понять, почему это не так.

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

test_list.size () - это ноль в вашем цикле.Вам нужно указать количество шагов для циклов for

0 голосов
/ 25 сентября 2018

Проблема в том, что ваш список массивов пуст (размер = 0), прежде чем вы начнете добавлять к нему;Таким образом, ваш цикл работает на пустом месте.

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

Когда вы добавляете их вручную, вы успешно получаете элементы всписок, потому что вы не зависели от размера списка.

Используйте альтернативную реализацию в Mert Ozdal's answer

0 голосов
/ 25 сентября 2018

ArrayList.set(index, data)

Используется для установки элемента по указанному индексу.Однако, если размер списка меньше, чем индекс, к которому вы пытаетесь получить доступ, он выдаст исключение, и это тоже имеет смысл.Метод set следует использовать только для замены элементов, а не для добавления элементов

ArrayList.add(index, data)

Этот метод используется для вставки некоторых данных в список.Если вы пытаетесь вставить что-то в середину списка, данные будут скорректированы, чтобы освободить место для нового индекса.Если вы пытаетесь добавить что-то в конец списка, это также будет работать нормально.Но если индекс, который вы пытаетесь добавить элемент, больше, чем размер arrayList, этот метод также будет исключением IOB.

0 голосов
/ 25 сентября 2018

Если вы запустите этот код с пустым списком, ваш цикл for не будет работать вообще.Если вы добавите более 2 элементов вне цикла, цикл for сработает, и ваш код вызовет бесконечный цикл, так как ваша верхняя граница имеет размер test_list ArrayList, и вы добавляете элементы к этому объекту внутри цикла for.Определите статическую верхнюю границу и заполните свой ArrayList столько раз, чтобы избежать этого бесконечного цикла.

for (int i = 0; i<5; i++)
{
    test_list.add(i, i*5);
    System.out.println(test_list.get(i));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...