TABLICE W JAVIE
ZałóŜ nowy projekt i nazwij jego główną klasę TestTablic. Od razu wykasuj z kodu wszelkie komentarze.
Tablicę tworzy się przez dodanie pary nawiasów kwadratowych do typu zmiennej, czyli na przykład:
int[] mojWektor = null;
lub po prostu
int[] mojWektor;
Jednak w tym momencie nie moŜna dodawać elementów do tablicy. Dzieje się tak, poniewaŜ sama deklaracja
int[] mojWektor; nie rezerwuje miejsca w pamięci na tą tablicę. Takie coś jest dopiero odnośnikiem do tablicy,
czyli zawiera adres miejsca w pamięci gdzie znajdować się będą dane. To znaczy w tym momencie jeszcze nie
zawiera danych, bo został jej przypisany adres null, czyli brak adresu.
śeby tablica wskazywała na jakiś adres pamięci, trzeba uŜyć operatora new, który rezerwuje miejsce w pamięci i
zwraca jej adres. Czyli prawidłowe zarezerwowanie miejsca w pamięci na 5-elementową tablicę liczb całkowitych i
przypisanie jej do zmiennej będzie wyglądało tak:
int[] mojWektor = new int[5];
Operator new zwraca adres miejsca w pamięci, który jest przypisywany do zmiennej mojWektor. W tym
momencie moŜna juŜ normalnie korzystać z tablicy.
KaŜda tablica posiada dodatkową zmienną zawierającą ilość elementów w tej tablicy. Nazywa się ona length.
Przykład uŜycia:
for(int i=0;i<mojWektor.length; i++){
mojWektor[i] = 22+i*15;
System.out.println(mojWektor[i]);
}
Ćwiczenie: Umieść w funkcji main linijki:
int[] mojWektor = new int[5];
for(int i=0;i<mojWektor.length; i++){
mojWektor[i] = 22+i*15;
System.out.println(mojWektor[i]);
}
Jak moŜna łatwo zauwaŜyć, nie trzeba od razu podawać rozmiaru tablicy. Przypuśćmy, Ŝe chcemy najpierw
odczytać dane z pliku i dopiero, gdy juŜ będziemy wiedzieli ile tych danych jest, moŜemy podać liczbę elementów
w tablicy. Jest ot bardzo przydatne – nie trzeba juŜ uŜywać list z dowiązaniami do przechowywania nieznanej
liczby danych.
Ćwiczenie: Przerób funkcję main następująco:
public static void main(String[] args) {
int[] mojWektor;
// w tym miejscu moŜemy odczytać ile jest danych w pliku
// np. 7 danych do przechowania w tablicy
int n = 7;
mojWektor = new int[n];
for(int i=0;i<mojWektor.length; i++){
mojWektor[i] = 22+i*15;
System.out.println(mojWektor[i]);
}
}
Ale to jest tylko jeden ze sposobów tworzenia tablic. Drugi to wypełnienie tablicy od razu wartościami. Robi się to
tak:
int[] mojWektor = { 1, 2, 3, 4, 5 };
Tablica mojWektor będzie wówczas zawierała 5 elementów.
Tablice mogą być takŜe wielowymiarowe - dwu, trzy i więcej. Zmienną będącą dwuwymiarową tablicą liczb
całkowitych definiuje się tak:
int[][] dwuwymiarowa = new int[10][10];
Tak zdefiniowana tablica jest tablicą kwadratową - ma tyle samo wierszy, co kolumn. Trzeba pamiętać, Ŝe
pierwsza liczba jest ilością wierszy, a druga ilością kolumn.
Ilość wierszy uzyskuje się przez dwuwymiarowa.length a liczbę kolumn w danym wierszu uzyskuje się przez
dwuwymiarowa[numerWiersza].length.
mgr Agnieszka Patyk, Wydział FTiMS, Politechnika Gdańska, 2007
Ćwiczenie: Doklej w funkcji main linijki:
int[][] dwuwymiarowa = new int[7][6];
for(int i = 0; i < dwuwymiarowa.length ; i++){
for(int j = 0; j < dwuwymiarowa[i].length ; j++){
dwuwymiarowa[i][j] = i*j;
System.out.print(dwuwymiarowa[i][j]+" ");
}
System.out.println("");
}
Tablicę dwuwymiarową moŜna zadeklarować takŜe przez podanie wartości:
int[][] vec = {
{ 1, 2, 3},
{ 2, 3, 4},
{ 3, 4, 5},
{ 4, 5, 6}
};
Tablica wcale nie musi być kwadratem, czy prostokątem! MoŜna takŜe tworzyć teŜ tablice „szarpane”:
int[][] vec = {
{ 1, 2 },
{ 2, 3, 4, 5 },
{ 3 }
};
Takie tablice są bardzo przydatne przy stosowaniu niektórych metod numerycznych.
Tablice moŜna teŜ tworzyć dwuetapowo. Pierwszym etapem będzie stworzenie tablicy odnośników na tablice:
int[][] vec = new int[10][];
Jak widać, vec jest juŜ zdefiniowaną tablicą, ale nie jest tablicą dwuwymiarową, poniewaŜ nie został stworzony
drugi wymiar. Na razie jest to tablica 10 elementów, z których kaŜdy jest odnośnikiem do miejsca w pamięci, w
którym znajdować się będzie tablica liczb całkowitych. Teraz, mając taką tablicę odnośników moŜna kaŜdemu
elementowi przypisać tablicę:
vec[0] = new int[10];
vec[1] = new int[5];
vec[2] = new int[1];
i tak dalej… Jak widać to teŜ jest sposób na tworzenie tablic szarpanych.
Ćwiczenie: Stwórz tablicę szarpaną, w której kaŜdy wiersz będzie losowej długości:
System.out.println("");
int[][] vec = new int[10][];
for(int i = 0; i < vec.length; i++){
vec[i] = new int[
(int)(Math.random()*10)
];
for(int j = 0; j < vec [i].length ; j++){
vec [i][j] = i*j;
System.out.print(vec [i][j]+" ");
}
System.out.println("");
}
W powyŜszych przykładach wszystkie tablice są tablicami liczb całkowitych, ale mogą to być tablice dowolnych
typów, np. liczb rzeczywistych czy Stringów a takŜe własnych obiektów, np.:
Samochod[] tablicaAut = new Samochod[3];
tablicaAut[0] = new Samochod("Polonez",34234,9.0);
tablicaAut[1] = new Samochod("Maybach",4231,10.0);
tablicaAut[2] = new Samochod("Maluch",3423,0.1);
for(int i=0;i<tablicaAut.length;i++){
System.out.println(tablicaAut[i]);
}
mgr Agnieszka Patyk, Wydział FTiMS, Politechnika Gdańska, 2007