• 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?

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
+1 głos
149 wizyt
pytanie zadane 13 maja 2022 w Java przez Mavimix Dyskutant (8,410 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 (256,490 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,410 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 (256,490 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,410 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,410 p.)
dzięki

Podobne pytania

0 głosów
2 odpowiedzi 169 wizyt
pytanie zadane 2 czerwca 2021 w C i C++ przez Mavimix Dyskutant (8,410 p.)
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 7 października 2019 w Java przez Szczurek431 Początkujący (330 p.)
0 głosów
1 odpowiedź 657 wizyt

91,286 zapytań

139,951 odpowiedzi

315,179 komentarzy

60,736 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...