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

+1 głos
37 wizyt
pytanie zadane 6 dni temu w Java przez Mavimix Dyskutant (8,230 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?

1 odpowiedź

+1 głos
odpowiedź 5 dni temu przez Wiciorny Ekspert (218,990 p.)
wybrane 2 dni temu 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 5 dni temu przez Mavimix Dyskutant (8,230 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 4 dni temu przez Wiciorny Ekspert (218,990 p.)
edycja 4 dni temu 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 2 dni temu przez Mavimix Dyskutant (8,230 p.)
Dzięki za wyjaśnienie

Podobne pytania

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

87,940 zapytań

136,518 odpowiedzi

304,382 komentarzy

58,305 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.

...