W jaki sposób dodać elementy do listy za pomocą metody żeby nie zwracało nulla

0

Witam,
kłopot z dodawnaiem elementu do listy za pomocą metody, oczywiście jest to "projekt" w ramach treningu. Mam klase która tworzy zawodnika(imie nazwisko numer i ilosc goli). W klasie mam konstruktor bez argumentów, który ma scaner i prosi uzytkownika o podanie danych zawodnika. W klasie gdzie zarzadam kolekcja pilkarzy mam metode ktora ma dodawac pilarza i odwoluje sie w niej do konstruktora bez arg:

 public static void dodawanie(List<Pilkarz> e)
  {
	 System.out.println("dodaj pilkarza");
	 Pilkarz p = new Pilkarz();
	 e.add(p);
  } 

wszystko fajnie tworze liste, dodaje pilkarza bo sie konstruktor ladnie wywoluje ale w liscie mam zwrocone nulle i 0. :/

1

Sformatuj kod. Wygląda na to, że operacje wykonują się tylko na stosie, a nie zmieniają obiektu. Pokaż funkcję add i resztę kodu. Dlaczego nie Zrobić tego prosto, jak na przykład tutaj:
https://algs4.cs.princeton.edu/13stacks/LinkedStack.java.html

0

Sorki ale właśnie jedyne co wkleiłam to funkcja add. Nastepnie w main wywoluje metode i tworzę liste:

public static void main(String[] args) {
		
		List<Pilkarz> pilkarz = new ArrayList<Pilkarz>();
		dodawanie(pilkarz);

Ta metoda (wyżej) odwołuje się do tego konstruktora:

public Pilkarz()
{
	Scanner sc = new Scanner(System.in);
	System.out.println("podaj imie pilkarza");
	String imie = sc.nextLine();
	System.out.println("podaj nazwisko pilkarza");
	String nazwisko = sc.nextLine();
	System.out.println("podaj numer pilkarza");
	int numer = sc.nextInt();
	sc.nextLine();
	System.out.println("podaj liczbe strzelonych goli pilkarza");
	int LiczbaGoli = sc.nextInt();
	sc.nextLine();
}

Oczywiście jak ręcznie dodaje przy użyciu konstuktora argumentowego to ładnie się wszystko dodaje do listy, ale problem pojawia się w momencie dodana za pomocą metody.

P.S. Przepraszam za brak angielskiego i słabe formatowanie kodu - jest to dosyć stary odgrzebany "projekt " który chciałam naprawić.

2

A gdzie w tym konstruktorze przypisujesz wartości do pól?

String imie = sc.nextLine();

tworzy zmienną lokalną i do niej przypisuje to co wprowadzasz.
Spróbuj tak:

this.imie = sc.nextLine();

z resztą pól podobnie

0

mdolata dziękuje bardzo oczywiście że tu był kłopot....
Pozostał mi ostatni problem do rozwiązania. Mianowicie kiedy już mam dodane elementy do listy w żaden sposób nie wykonują się żadne metody które napisałam.
Mam np. metodę która ma zwrócić zawodnika z największąilością goli:

public static int NajwiecejGoli(List<Pilkarz> b) 
{
	int gole = b.get(0).getLiczbaGoli();
	for(Pilkarz x: b)
	{
		if(x.getLiczbaGoli() > gole)
		{
			gole = x.getLiczbaGoli();
		}
	}
	return gole;
}

Niestety metoda się nie wykonuje mimo że w mainie mam wpisaną taką procedurke:

	List<Pilkarz> pilkarz = new ArrayList<Pilkarz>();
	
		
		Pilkarz p =new Pilkarz("jan","englert",5 , 6);
		Pilkarz p1 =new Pilkarz("will","fsfs",3 , 5);
		Pilkarz p2 =new Pilkarz("ewa","urww",7 , 21);
		Pilkarz p3 =new Pilkarz("gregor","buba",9 , 26);
		
		
		pilkarz.add(p);
		pilkarz.add(p2);
		pilkarz.add(p1);
		pilkarz.add(p3);
		
		NajwiecejGoli(pilkarz);

Jeżeli napiszę algorytm na sztywno w pętli to działa, ale za pomocą metody już niestety nie.

1

Mam np. metodę która ma zwrócić zawodnika z największąilością goli:

A wg mnie ta metoda zwraca największą liczbę goli wśród piłkarzy w liście

NajwiecejGoli(pilkarz);

to wywołanie zwraca największą liczbę goli ale nic z tą liczbą nie robisz. Możesz np wypisać żeby widzieć co zwróciło.

1

Powtórzę za @mdolata, nic nie robisz ze zwracaną liczbą.

System.out.println( NajwiecejGoli(pilkarz));
0

Ok wszystko już wiem do zamknięcia. Jeszcze raz dziekuje za pomoc

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