Что не так с этим списком номеров Java? - PullRequest
0 голосов
/ 02 декабря 2011

У меня есть следующий список.Список требуется другим классом, который я использую.

List<Number> series, series2

серия полна 120 значений, теперь я пытаюсь получить каждое второе значение в series2, которое пусто

for (int num = 1; num < 121; num = num + 2) {
    series2.add(num, series.get(num));
}

Почемуэто сбой?

Ответы [ 4 ]

5 голосов
/ 02 декабря 2011

Без большего количества кода я не могу сказать наверняка, но наиболее вероятно, что вы никогда не делаете series2 = new LinkedList<Number> или что-то подобное.

Другая проблема, которую я вижу, состоит в том, что вы начинаете с 1Реализации интерфейса List, как правило, индексируются 0, поэтому вам нужно

for(int num = 0; num < series.size(); num += 2)

. Лучше всего предоставить полный код (что необходимо для компиляции и воспроизведения проблемы) и трассировку стека.вы также получаете сообщение об ошибке.

РЕДАКТИРОВАТЬ:

Это также зависит от того, что вы хотите для вывода.Давайте представим, что вы вводите в серию 0,1,2,3,4,5,6,7,8,9 и что мы имеем дело только с 10 числами.

Вы хотите, чтобы серия 2 была:

  • null,1,null,3,null,5,null,7,null,9
  • 1,null,3,null,5,null,7,null,9,null
  • 1,3,5,7,9

Если это один из первых двух, вам нужно изменить цикл, чтобы добавить дополнительные, например:

for (int num = 0; num < 120; num++) {
    series2.add(num % 2 == 1 ? series.get(num) : null);
}

Или альтернативно:

for(int num = 1; num < 120; num+=2) {
    series2.add(null);
    series2.add(series.get(num));
}

В любом случае попытка добавить вот так: series2.add(num, series.get(num)), вероятно, потерпит неудачу.Согласно документации для List.add(int,E)

Throws

IndexOutOfBoundsException - если индекс выходит за пределы диапазона (index <0 || index> size ())

Так что вы можете использовать это только для добавления к середине List.Если вы хотите добавить в конец, вы должны использовать List.add(E).Если вы хотите добавить к какому-то конкретному индексу в List, которого он еще не содержит, вам нужно добавить null (или что-то еще), пока вы не доберетесь туда.Очевидно, это проблема, если ваша реализация List не поддерживает null s.

3 голосов
/ 02 декабря 2011

Вы получите IndexOutOfBoundsException, потому что вы добавляете вещи в series2 за пределами этого списка.Попробуйте просто сделать

series2.add(series.get(num));

Кроме того, воспользуйтесь советом тлеющего кодера и замените цикл, связанный с series.size ();однако ваш цикл на самом деле не вызовет IndexOutOfBoundsException в том виде, в каком он находится в данный момент, так как последний индекс, который передает ваше условие, будет 119 - действительный индекс, предполагающий 120 элементов.

1 голос
/ 02 декабря 2011

вылетает как?Возможно, вы ссылаетесь на get (120), которого не существует.Элементы будут иметь номер 0-119.

1 голос
/ 02 декабря 2011

Было бы более полезно, если бы вы сообщили нам об исключении, которое получили.

Из того, что вы сказали нам, я думаю, это потому, что series2 не инициализирован.

...