Wprowadzanie danych do ArrayList

0

Hej, mam taki mały techniczny problem i nie wiem gdzie jest błąd.

import java.util.Scanner;

public class main {
    public static void main (String args[]){
        Scanner scanner = new Scanner(System.in);
        Punkt punkt = new Punkt();

        while (true){
            int userChoice = scanner.nextInt();

            switch (userChoice){
                case 1 -> System.out.println(punkt.getPracownicy());
                case 2 -> punkt.addPracownicy();
            }
        }
    }
}
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Punkt {
    public List<String> pracownicy = new ArrayList<>();
    Scanner scanner = new Scanner(System.in);
    public void addPracownicy(){
        String name = scanner.nextLine();
        pracownicy.add(name);
    }

    public List<String> getPracownicy() {
        return pracownicy;
    }
}
1

Może zmień:

public List<String> pracownicy = new ArrayList<>();

na

public List<String> pracownicy = new ArrayList<String>();

A tak poza tym, to taki mały techniczny problem i nie wiem gdzie jest błąd nic nam nie mówi...

Dostajesz jakieś komunikaty o błędach?
Coś nie działa? Nie dodaje danych do listy?
Cokolwiek na temat "błędu" może nam podpowiedzieć gdzie szukać problemu bez konieczności wklejania tego kodu do swojego IDE...

5

Może zmień:

public List<String> pracownicy = new ArrayList<>();
na
public List<String> pracownicy = new ArrayList<String>();

Nie ma takiej potrzeby

0

zapomniałem dodać.
Chciałbym żeby po wybraniu w konsoli drugiej opcji, czyli

 case 2 -> punkt.addPracownicy();

i wpisaniu imienia np"Franek"
w pierwszej opcji czyli

case 1 -> System.out.println(punkt.getPracownicy());

wyświetlało się imię "Franek"

0

@Tycian: A co w takim razie się wypisuje jak odpalisz swój projekt?

Uproszczona wersja w Ideone pokazuje listę imion:
https://ideone.com/CLqodu

Jeśli chcesz zmienić sposób wyświetlania, to musisz sobie np. zamiast metody getPracownicy() napisać metodę, która generuje stringa z listą pracowników sformatowaną zgodnie z Twoją koncepcją.

0

aktualna wersja nie pokazuje nic, jakby było puste bądź nie wyświetla tej listy ale nie wiem z jakiego powodu.

Uproszczona wersja w Ideone pokazuje listę imion:
https://ideone.com/CLqodu

tutaj widzę jest ręczne dodawanie imion, a chciałbym żeby punkt.addPracownicy(); dodawał imiona do ArrayList i getPracownicy tą zawartość wyświetlało

0

case 1 -> for(String pracownik:punkt.getPracownicy()) System.out.println(pracownik);

0
_13th_Dragon napisał(a):

case 1 -> for(String pracownik:punkt.getPracownicy()) System.out.println(pracownik);
Wynik w konsoli

2
Franek
1

2
Franekk
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:943)
	at java.base/java.util.Scanner.next(Scanner.java:1598)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2263)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2217)
	at main.main(main.java:10)

Process finished with exit code 1

0

Jakiego słowa nie rozumiesz w komunikacie:

Exception in thread "main" java.util.InputMismatchException
	...        
	at main.main(main.java:10)

?

0
Tycian napisał(a):

Uproszczona wersja w Ideone pokazuje listę imion:
https://ideone.com/CLqodu

tutaj widzę jest ręczne dodawanie imion, a chciałbym żeby punkt.addPracownicy(); dodawał imiona do ArrayList i getPracownicy tą zawartość wyświetlało

Nie ma znaczenia jak bardzo obudujesz wywołanie tych metod.

Jeśli nie jesteś pewien, czy metody się wykonują i czy lista nie jest pusta, to powinieneś to sobie sprawdzić debuggerem.
Ewentualnie wypisywać jakieś swoje własne informacje debuggujące przy każdym wywołaniu śledzonych metod.

Na start np. zamiast od razu "wypisywać całą listę", wpisz sobie pierwszy element listy: System.out.println(punkt.getPracownicy().get(0));

0

Uczyłem się z jednego filmiku gdzie gość pod tymi samymi wierszami wpisywał to samo i wszystko mu działało. Wpisywał imiona zaznaczał opcje wyświetlania imion i działa
Link poniżej:

A nie wiem gdzie mogę mieć błąd.

0

Szklana kula wskazuje że błąd jest w wierszu 42.
Kompilator wskazuje że błąd jest w wierszu 10, przy próbie wpisania imienia zamiast opcji menu - co jasne i wyraźnie napisano w przedstawionym przez ciebie komunikacie:

2
Franek
1

2
Franekk
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:943)
	at java.base/java.util.Scanner.next(Scanner.java:1598)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2263)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2217)
	at main.main(main.java:10)

Process finished with exit code 1

Zacznij używać debuggiera

0
Tycian napisał(a):

Uczyłem się z jednego filmiku gdzie gość pod tymi samymi wierszami wpisywał to samo i wszystko mu działało. Wpisywał imiona zaznaczał opcje wyświetlania imion i działa
Link poniżej:

A nie wiem gdzie mogę mieć błąd.

Może masz inną wersję Javy?

Od kiedy Java wypisuje elementy ArrayListy podając ją za argument println?

Może nie każda maszyna Javy to robi?
Tutaj masz 4 sposoby i żaden nie robi tego tak jak Ty: https://interviewsansar.com/how-to-print-arraylist-elements-in-java/

0

Może masz inną wersję Javy?

Mam najnowsza wersje Javy.

Od kiedy Java wypisuje elementy ArrayListy podając ją za argument println?

Nie znam się, ale chlopa co oglądałem zrobił taki kod. 200 zaczyna tworzyć to co ja mam

Zacznij używać debuggiera

Używałem i wyświetla mi ten sam błąd przy ponownej próbie wpisania imienia.

0

Weź przeczytaj normalny kurs Javy, co do filmiku podać ci link do filmiku gdzie chłop opowiada że ziemia jest plaska?

0

Weź przeczytaj normalny kurs Javy, co do filmiku podać ci link do filmiku gdzie chłop opowiada że ziemia jest plaska?

Teorie teoriami, a w IntelliJ pokazuje mu wynik

0

To może tak.
case 1 -> punkt.getPracownicy();
klasa Punkt

        for (String p:pracownicy
             ) {
            System.out.println(p);```

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