background image

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 

background image

 
 
Ć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