Добавить значения в массив в цикле

1

В моей программе я пытаюсь добавить значения к массиву во время цикла. Прежде чем он будет помещен в массив, он должен выполнить оператор if. Мне нужно иметь возможность добавлять столько значений, сколько необходимо на основе ввода. Я не знаю, как это сделать. Любая помощь будет оценена по достоинству.

for(int a=0; a<= subset1white.length-1;a++){
  String w = Integer.toString(Integer.parseInt(subset1white[a]) + 2);
  String x = Integer.toString(Integer.parseInt(subset1white[a]) - 2);
  String y = Integer.toString(Integer.parseInt(subset1white[a]) + 10);
  String z = Integer.toString(Integer.parseInt(subset1white[a]) - 10);
  String[] arithmetic = {w, x, y, z};
     for(int b=0; b<= arithmetic.length-1; b++){
        if(arithmetic[b] == subset1black[a]){

        }
     }

  }

Если цикл if возвращает true, мне нужно значение subset1black[a] должно быть помещено в массив, называемый result. Я знаю, как объявлять массивы, но я не знаю, как объявить массив, где длина может быть изменена (добавлены новые значения).

Теги:
arrays
arraylist

2 ответа

2
Лучший ответ

Используйте ArrayList<Integer> который может динамически расти по мере необходимости (как предлагает Бэш Гурунг):

// Declare
List<Integer> result = new ArrayList<Integer>();

// Add to end of the list
result.add(subset1black[a]);

См. Javadoc для получения дополнительной информации или если вы хотите добавить элементы в список по-другому.

Если вам действительно нужен примитивный массив, вы можете конвертировать List. См. Это связанное Q.

  • 0
    Спасибо за помощь.
0

В Java нет примитивных массивов с переменным размером, поэтому наиболее близким к такой структуре данных является класс ArrayList, который внутренне представляет собой массив объектов, при необходимости изменяя размер. Это помогает инициализировать ArrayList до ожидаемого размера (или немного больше), чтобы избежать изменения размера, но эта оптимизация не нужна.

Для рассматриваемого кода реализация вышеуказанного может быть:

List<Integer> result = new ArrayList<Integer>(subset1white.length);

for (int a=0; a<subset1white.length; a++) {

  String w = Integer.toString(Integer.parseInt(subset1white[a]) + 2);
  String x = Integer.toString(Integer.parseInt(subset1white[a]) - 2);
  String y = Integer.toString(Integer.parseInt(subset1white[a]) + 10);
  String z = Integer.toString(Integer.parseInt(subset1white[a]) - 10);

  String[] arithmetic = {w, x, y, z};

  for (int b=0; b<= arithmetic.length-1; b++) {
    if (arithmetic[b] == subset1black[a]) {
      result.add(new Integer(subset1black[a]));
    }
  }    
}

Нет необходимости инициализировать объект Integer для добавления в ArrayList, поскольку Java делает это автоматически (через "autoboxing"), но при этом код становится более чистым.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню