Nie mogę wpisać pierwszy element w ArrayList w Java

0

Treść zadania wygląda tak "Stwórz program, który zapyta użytkownika o ilość imion na liście. Stwórz pętle for, która zapyta i pobierze od użytkownika imię tyle razy ile ma być imion na liście ArrayList. Wyświetl wszystkie imiona z listy. "

Kod:

package com.Lesson;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        ArrayList<String> arr = new ArrayList<>();
        System.out.println("Wpisz ile ma być imion na liście");
        int ilosc = scan.nextInt();
        for(int i = 0; i < ilosc; i++)
        {
            System.out.println("Wpisz " + (i + 1) + " Imię");
            String a = scan.nextLine();
            arr.add(i, a);
            System.out.println("Element number " + (i + 1) + ": " + arr.get(i));
        }
        System.out.println(arr);

    }
}

Po uruchomienu programu nie mogę wpisać pierwszy element i on zostaje pusty, program tak jakby nie widział tej części kodu:

String a = scan.nextLine();
arr.add(i, a);

Po uruchomieniu wygląda tak:

Wpisz ile ma być imion na liście
5
Wpisz 1 Imię
Element number 1: 
Wpisz 2 Imię
4
Element number 2: 4
Wpisz 3 Imię
3
Element number 3: 3
Wpisz 4 Imię
2
Element number 4: 2
Wpisz 5 Imię
1
Element number 5: 1
[, 4, 3, 2, 1]

Process finished with exit code 0
2

po co indeks w arr.add? Przecież powinieneś dodawać te imiona korzystając z metody:
https://docs.oracle.com/javase/8/docs/api/java/util/List.html#add-E-

0

Spróbuj tak:

arr.add(a);

AFAIR .add(i, a); powoduje nadpisanie elementu znajdującego się pod indeksem i, ale skoro Twoja tablica jest pusta, to nie ma żadnego elementu do nadpisania i nic się nie dzieje. (nevermind)

0

@Patryk27: Też nie działa, szukałem rozwiązania w internecie ale nic nie znalazłem dla tego i napisałem tutaj

0

Spróbuj dodać dodatkowe wywołanie scan.nextLine() po linijce 12.

0

W 16 linijce zamień na coś takiego:

String a = scan.nextLine().isEmpty() ? scan.next() : scan.nextLine();

nextLine() bierze Ci entera (pusty string), który klikasz po wpisaniu ile ma być imion.

1

Używałeś jednego obiektu Scanner do ilości i imion i to powodowało problemy:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

        public static void main(String[] args)
        {
            Scanner namesCount = new Scanner(System.in);
            Scanner name = new Scanner(System.in);
            List<String> names = new ArrayList<>();
            System.out.print("Wpisz ile ma być imion na liście: ");
            int namesCount = namesCount.nextInt();
            for(int i = 0; i < ilosc; i++)
            {
                System.out.print("Wpisz " + (i + 1) + " Imię: ");
                names.add(name.nextLine());
            }
            System.out.println(names);

        }
    }

Wynik:

Wpisz ile ma być imion na liście: 3
Wpisz 1 Imię: A
Wpisz 2 Imię: B
Wpisz 3 Imię: C
[A, B, C]

Jeszcze trzeba popracować nad nazewnictwem zmiennych.

0

@.andy: Dzięki, działa

0

@Skoq: Działa, dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1