• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekazanie danych z listy ArrayList do tablicy dwuwymiarowej

Object Storage Arubacloud
0 głosów
961 wizyt
pytanie zadane 20 lutego 2017 w Java przez plkpiotr Stary wyjadacz (12,420 p.)
zmienione kategorie 20 lutego 2017 przez Arkadiusz Waluk

W swoim projekcie mam następującą klasę zawierającą listę piłkarzy:

public class Club {
	ArrayList<Footballer> team;
	// (....)
}

Natomiast klasa piłkarza wygląda następująco (z odpowiednimi setterami i getterami):

public class Footballer {
	String firstName();
	String lastName();
	int position;
	// (...)
}

Zakładając, że mam pięciu piłkarzy i trzy pola składowe chciałbym stworzyć tablicę dwuwymiarową o różnych typach służącą za podstawę JTable, której kolumnami byłyby imię, nazwisko oraz pozycja.
Czy istnieje w języki Java sposób na wypełnienie takiej tablicy używając pętli lub pętli zagnieżdżonych?
Próbowałem użyć metody toArray() jednak chyba nieumiejętnie bo każda z komórek tabeli zawierała wszystkie dane piłkarza zamiast konkretnej, natomiast poprawnie działający kod bez pętli wygląda bardzo nieporadnie...

Object[][] data = { {club.getTeam().get(0).getFirstName(), club.getTeam().get(0).getLastName(), club.getTeam().get(0).getPosition()},
					{club.getTeam().get(1).getFirstName(), club.getTeam().get(1).getLastName(), club.getTeam().get(1).getPosition()},
					{club.getTeam().get(2).getFirstName(), club.getTeam().get(2).getLastName(), club.getTeam().get(2).getPosition()},
					{club.getTeam().get(3).getFirstName(), club.getTeam().get(3).getLastName(), club.getTeam().get(3).getPosition()},
					{club.getTeam().get(4).getFirstName(), club.getTeam().get(4).getLastName(), club.getTeam().get(4).getPosition()}};

1 odpowiedź

+1 głos
odpowiedź 20 lutego 2017 przez Mateusz51 Nałogowiec (28,180 p.)
wybrane 21 lutego 2017 przez plkpiotr
 
Najlepsza

Przykładowy kod:

Object[][] toObjectArray(List footballerList){
  int lenght = footballerList.lenght();
  Object[][] data = new Object[lenght][];
  for(int i=0;i<lenght;i++){
    Object[] footballerData = new Object[3];
    Fotballer footballer = footballerList.get(i);
    footbalerData[0] = footballer.getFirstName();
    ... 
    ...
    data[i] = footballerData;
  }
 return data;
}

Chyba że coś pomieszałem z indexami w tablicy. Ale dawno nie korzystałem z tablic dwuwymiarowych.

komentarz 20 lutego 2017 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 21 lutego 2017 przez plkpiotr

Dziękuję za kod, zaimplementowałem go do swojego programu w nieco innej postaci, bo pól mam troszkę więcej. Wewnątrz pętli for() umieściłem również system.out.println(), aby konsola wyświetlała poprawność danych i co dziwne, mimo odczytania wszystkich danych poprawnie wyrzucany zostaje błąd...

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 22, Size: 22
	at java.util.ArrayList.rangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)

Nie rozumiem, co mógłby oznaczać ten dwudziesty-drugi indeks : /
Jedyną poszlaką może być to, że kluby mają różną ilość piłkarzy i najmniejsza ich ilość w dwóch klubach z szesnastu to właśnie 22...

Edycja I:
Przy stałej deklaracji i przechodzeniu przez pętlę 22-razy, nie wyrzuca wyjątku, program się uruchamia z tym że czyta 22 graczy...

Object[][] data = new Object[22][];

Edycja II:

Operację ArrayList->Object[][] dokonuję w JTabbedPane (każda drużyna ma oddzielną zakładkę), być może przez to tablica dwuwymiarowa jest "współdzielona" w pewien sposób?

1
komentarz 21 lutego 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Cieżko mi bez kodu cokolwiek powiedzieć. Możliwe że jest to problem. Ale z tego to pamietam to w tabelkach jest możliwość dodawania danych do już instniejącej tabelki.
komentarz 21 lutego 2017 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 21 lutego 2017 przez plkpiotr

Ok, dzięki za pomoc : )
Będę jeszcze pracował nad tym i dam znać w jaki sposób sobie poradziłem ; )

Edycja I:

W pliku tekstowym jedna z drużyn miała o jednego zawodnika za mało, pisało że ich liczba wynosi 23, a było ich 22 - stąd wyjście poza zakres... Wobec tego w pętli odczytującej z pliku był jeden pusty przelot , czego nie zauważyłem gdyby piłkarzy było 23, a w deklaracji 22 to by nie przeszło.

Problem rozwiązany...

Podobne pytania

0 głosów
1 odpowiedź 177 wizyt
pytanie zadane 7 października 2019 w Java przez Szczurek431 Początkujący (330 p.)
0 głosów
1 odpowiedź 535 wizyt
pytanie zadane 22 marca 2021 w C i C++ przez Rainbow99 Początkujący (430 p.)
0 głosów
1 odpowiedź 214 wizyt
pytanie zadane 28 kwietnia 2020 w C# przez kubekszklany Gaduła (3,190 p.)

92,555 zapytań

141,402 odpowiedzi

319,538 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...