Попытка использовать список массивов для создания двойников каждого индекса Копирование не работает правильно - PullRequest
0 голосов
/ 23 января 2019

Пример ввода будет {1, 2, 3}.Пример вывода будет {1, 1, 2, 2, 3, 3}.Я получаю {1, 1, 2, 3, 2}.Мой код:

public void doubleList(ArrayList<String> string){
    int length = string.size();
    string.add(1, string.get(0));
    for(int x = 2; x < length; x++){
    string.add(x+2, string.get(x));
    }
}

Я не уверен, в чем дело, но мне нужна помощь, так как мне кажется, что это имеет смысл.Что я делаю не так?

Ответы [ 5 ]

0 голосов
/ 23 января 2019

Попробуйте это

public static void doubleList(ArrayList<String> string) {
        int length = string.size();
        int y = 0;      
        for (int x = 0; x < length; x++) {          
            string.add(y, string.get(y));
            y+=2;
        }
    }
0 голосов
/ 23 января 2019

Это мое решение, начните с копирования индекса 0, добавив его к текущему индексу + 1, затем увеличьте индекс на 2 и т. Д.

  public static void doubleList(ArrayList<String> string){
      for(int x = 0; x < string.size(); x+=2){
          string.add(x + 1, string.get(x));
      }
  }
0 голосов
/ 23 января 2019

Нарисуйте, что вы хотите, чтобы:

1  2  3

1  1  2  3
│  ↑
└──┘ copy index 0 to index 1

1  1  2  2  3
      │  ↑
      └──┘ copy index 2 to index 3

1  1  2  2  3  3
            │  ↑
            └──┘ copy index 4 to index 5

Теперь вам просто нужно написать код, делающий это.

0 голосов
/ 23 января 2019

Вы хотите перебрать список и добавить дубликаты каждого элемента.Однако после добавления у вас будет дополнительный элемент в списке, поэтому вам придется переходить на два шага вперед на каждой итерации.

int originalSize = list.size();
for(int i = 0; i < originalSize; i++) {
    list.add(2*i, list.get(2*i));
}

Здесь - рабочий пример.

0 голосов
/ 23 января 2019

длина массива по-прежнему равна 3, поэтому он остановится, когда достигнет первого цикла, это будет выглядеть так

length: 3

arraylist: {1,1,2,3}

firstloop: {1,1,2,3,2} x = 3 (потому что вы назначаете x = 2), я думаю, вам следует сохранить массив, который вы хотите скопировать, в другой массив и назначить его массиву, напримерэто

public void doubleList(ArrayList<String> string){
    ArrayList<String> arrCpy=(ArrayList)string.clone();
    int length = string.size();

    for(int x = 0; x < length; x++){
        string.add(x*2, arrCpy.get(x));
    }

}
...