@blessmemary

Дубликация значений в массиве. В чем ошибка?

Помогите решить проблему, пожалуйста.
В сканер передаю 5 строк "a", "b", "с", "d", "e"
Ожидаемый исход: массив 10 строк: aabbccddee
Получаю: массив с 10 строками: aaaaaabcde

Код приложил ниже скриншота.
Заранее спасибо!

614344d83a429822259372.png

private static void mySecondTask(){
        Scanner scan2 = new Scanner(System.in);
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            System.out.print("Введите строку: ");
            String elem = scan2.next();
            list.add(elem);
        }
        doubleValues(list);
        for (String s : list) {
            System.out.println("" + s);
        }

    }
    private static void doubleValues(ArrayList<String> lst){
        System.out.println("Я тут");

        int current;
        for (int i = 0; i < 5; i++) {
            System.out.println("Я в цикле");
            current = i;
            System.out.println("Текущий индекс: " + current);
            String value = lst.get(current);
            System.out.println("Текущее значение: " + value);

            lst.add((current+1),value);
            System.out.println("добавил значение "+value+ " под индексом " +(current+1));
        }
    }
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Вы модифицируете исходный список, но не делаетe поправку на это.

Сначала вы берете первый символ и добавляете его на второе место.
Потом вы берете второй символ, но это не "b", как вы хотели бы, а "a", добавленное на предыдущем шаге. И так далее.

Вам надо или собирать новый список, или помнить, что вы уже какие-то символы вставили. После i вставок первый недублируемый символ будет на позиции 2*i и вставлять его копию надо на следующую (2i+1) позицию.

Ну, или идти по списку с конца к началу. Тогда вы будете обращатся к пока неизмененной части.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы