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

Czy takie deklarowanie tablicy dynamicznej w Javie jest poprawne?

Object Storage Arubacloud
+1 głos
304 wizyt
pytanie zadane 13 maja 2022 w Java przez Mavimix Dyskutant (8,390 p.)

Czy takie deklarowanie tablicy, jest poprawne?

int liczba1 = 10;
int liczba2 = 5;

int[][] nazwa_tablicy;
nazwa_tablicy = new int[liczba1][liczba2];
int[][] nazwa_tablicy2 = new int[liczba1][liczba2];

Jest może jakiś inny sposób w jaki mogę wykonać tablicę dwuwymiarową o wielkości jakiejś zmiennej, np. podanej przez użytkownika?

2 odpowiedzi

+2 głosów
odpowiedź 13 maja 2022 przez Wiciorny Ekspert (269,710 p.)
wybrane 17 maja 2022 przez Mavimix
 
Najlepsza

Jeśli to ma być "tablica-dynamiczna", nie LISTA oparta na tablicy, to deklaracja jest prawidłowa.
Nie ma jednoznacznie wskazania- jak powinno się to robić, więc generalnie, zależy od twojej struktury kodu. 
Dużo lepiej jednak jest to zrobić, bez dodatkowych PRYMITYWNYCH ZMIENNYCH na stosie Javy ( nie ma tez zasad niedeklarowania tablic statycznych)

int[][] static_tablica= new int[10][5]; // gdy znasz wartosci i ma byc statyczna
int[][] dynamic_tablica = new int[x][y]; 

w przeciwnym wypadku, tak jak piszesz jest poprawnie. Niemniej jednak  pozostawienie samej deklaracji 

int[][] nazwa_tablicy;

nie ma praktycznego zastosowania -też może powodować pewne niejasności z jaką wielkością tablic mamy doczynienia z punktu programistty.
Jeśli natomiast zależy Ci na "obiektowych wlasciwosciach" i ma to być lista, wtedy poprawnie jest : 
 

List<String> listFromArray = Arrays.asList(array); // gddzie array to tablica

dla dwóch wymiarów Iinteger to np.

List<List<String>> listOfLists = new ArrayList<List<String>>();

a jeśli sama pusta lista to 

List<String> list = new ArrayList<String>();

Należy ściśle zaznaczyć, że TYP ZMIENNEJ powinien być Interfejsem, a nie typem samego obiektu. 

1
komentarz 14 maja 2022 przez Mavimix Dyskutant (8,390 p.)

Dzięki za odpowiedź. Rozwiniesz ten temat, proszę?:

Należy ściśle zaznaczyć, że TYP ZMIENNEJ powinien być Interfejsem, a nie typem samego obiektu.

Co w przypadku gdy np. mam klasę i chcę zrobić listę obiektów tej klasy? Nie mogę po prostu zrobić:

 

class mojaKlasa
{
///kod
}

List<mojaKlasa> list = new ArrayList<mojaKlasa>();

???

komentarz 15 maja 2022 przez Wiciorny Ekspert (269,710 p.)
edycja 15 maja 2022 przez Wiciorny

To jest prawidłowe, ale zauważ, że mówimy o typie zwracanym w postaci referencji, a nie tym przypisywanym. Przypisywany typ zmiennej jest Tablicą obiektów ArrayList<Obiekt_klasy>
Natomiast REFERENCJA- to jest wskaźnik na typ powinien być typu INTERFEJSU o ile w skład tej kolekcji istnieje taki. i tutaj masz dokłądnie List< ? extends T> ... Liste w twoim przypadku obiektów mojaKlasa, ale dalej to jest INTERFEJS List. 
Czyli List jako interfejs, przyjmuje ArrayList i np. jeśli chcesz zrobić tablice linkowaną poprawnie i możliwe będzie zapisanie również jeśli np chciałbyś przypisać kiedyś lub zmieniać 

List<mojaKlasa> list = new LinkedList<mojaKlasa>();

natomiast nie powinieneś zapisywać

ArrayList<mojaKlasa> list = new ArrayList<mojaKlasa>();

dlaczego? Wyobraź sobie funkcje w programie którą piszesz i chcesz JAKO argument przekazać jej liste....  jeśli napiszesz coś takiego 

static void metodaPrzyjmujacaListe(ArrayList<mojaKlasa> mojaKlasaLista);

To do tej metody PRZEKAŻESZ TYLKO LISTE KTÓRA JEST ARRAYLIST, co jeśli miałyś przeróżne listy Linkowane, ArrayListy etc i w sumie chciał na nich niezależnie od rodzaju wyoknać operacje wtedy podanie listy LinkedList  do metody jest niemożliwe natomiast zapis 

static void metodaPrzyjmujacaListe(List<mojaKlasa> mojaKlasaLista);

pozwala Ci przekazać jako argument KAŻDY TYP LISTY, który tylko zawiera obiekty mojaKlasa, może to być LinkedList, ArrayList  RoleList, VECTOR nawet https://docs.oracle.com/javase/8/docs/api/java/util/List.html

komentarz 17 maja 2022 przez Mavimix Dyskutant (8,390 p.)
Dzięki za wyjaśnienie
0 głosów
odpowiedź 19 maja 2022 przez Czarus0 Obywatel (1,040 p.)
Cześć! Jest to jak najbardziej prawidłowe zadeklarowanie tablicy dwuwymiarowej. Wystarczy teraz, że poprosisz użytkownika o podanie wartości dla ‚liczba1’ i ‚liczba2’, wtedy będziesz miał tablice o podanych przez niego wymiarach.

Raczej nie widzę sposobu na inną deklarację. Chyba, że chcesz mieć listę dwuwymiarową a nie tablicę. Wtedy korzystasz z List<List<Integer>> = new ArrayList<>().

Pozdrawiam!
komentarz 19 maja 2022 przez Mavimix Dyskutant (8,390 p.)
dzięki

Podobne pytania

0 głosów
2 odpowiedzi 482 wizyt
pytanie zadane 2 czerwca 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)
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ź 962 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...