piasecki,podstawy programowania, Tablice w Javie

Tablice w Javie.



  1. tablice jednowymiarowe


definicja zmiennej tablicowej :

int[] tab; // nie tworzy tablicy, a tylko zmienną referencyjną (tablica jest traktowana jako obiekt, tylko nie ma określonej nazwy klasy).


tworzenie tablicy o liczbie elementów "n" :

tab = new int[n];


lub int[] tab = new int[n];

lub int [] tab= {1,2,3,4,5};


odwołanie do elementu tablicy :

tab[i] // wyrażenie indeksowe musi mieć wartość od 0 do liczba elementów-1

Uwaga : jeśli tablica nie jest wykorzystana w pełni musimy pamiętać liczbę zapisanych elementów, w przypadku pełnej tablicy możemy wykorzystać atrybut length ( tab.length).


Przetwarzanie tablic :

- typowa pętla przechodząca przez wszystkie elementy tablicy na przykładzie obliczania sumy wartości elementów tablicy :

int sumaElementów()

{ int suma=0;

for(int i=0; i<n; i++)

suma+=tab[i];

return suma; }


- wyszukiwanie elementu w tablicy ( przykład pętli która może się kończyć wcześniej )

boolean jest( int szukany)

{ int i=0;

while ( i<n && a[i]!=szzukany) // ważna kolejność warunków

i++;

return i<n; // nie a[i]==szukany

}


Uwaga: ta porządna strukturalna wersja wcale nie jest bardziej złożona od wersji niestrukturalnej ( czytaj nieporządnej ) - niestety często spotykanej w książkach :


boolean jest( int szukany)

{ for(int i=0; i<n ;i++)

if(a[i]== szukany ) return true;

return false;

}


- sprawdzanie różnowartościowości tablicy ( przykład na to, że nie zawsze wystarczy pojedyncza pętla do przetworzenia tablicy jednowymiarowej) :

boolean roznowartosciowa( )

{ boolean jest = true; // jest różnowartościowa

for( int i =0 && jest ; i< n; i++)

for( int j=i+1; j < n && jest ; j++)

jest=a[i] != a[j];

return jest;

}



załóżmy, że mamy klasę : class Osoba { String nazwisko; ...........};


definicja zmiennej tablicowej :

Osoba [ ] tab;


definicja tablicy n- elementowej :

Osoba [ ] tab = new Osoba[n] ; // tworzy tylko tablicę pustych ( null) referencji


tworzenie n elementowej tablicy wypełnionej pustymi obiektami :

Osoba [ ] tab = new Osoba[n] ;

for(int i =0; i < n ; i++)

tab[i]=new Osoba();

przetwarzanie tablicy :

a. jeśli elementy są dopisywane kolejno ( bez żadnych dziur ) - np. osoby zapisane na wycieczkę :

int ileOsob( )

{ int i=0;

while( tab[i++]!= null ) ; // typowy skrócony zapis to : while(tab[i++]);

return i;

}


b. jeśli elementy są dopisywane na wybrane pozycje ( mogą być przerwy ) - np. kino z numerowanymi miejscami, ale bez wyróżnionych rzędów :

int ileOsob( )

{ ile=0;

for(int i=0; i< tab.length; i++)

if(tab[i]!=null) ile++;

return ile;

}






B. tablice dwuwymiarowe

definicja zmiennej tablicowej :

int [ ] [ ] mac;


definicja macierzy o m wierszach i n kolumnach :

int [ ] [ ] mac= new [ m] [n] ;


odwołania :

mac - cała macierz

mac[i] - i-ty wiersz macierzy

mac[i][j] - j-ty element i-tego wiersza , czyli element ai,j


przykład przetwarzania ( typowa podwójna pętla ) :

int suma Elementow( )

{ int suma=0;

for( int i=0; i<m; i++ )

for( int j=0; j<n; j++ )

suma+=mac[i][j];

return suma;

}


Żeby się przekonąć, że nie zawsze wystarczy podwójna pętla wystarczy spróbować zapisać metodę sprawdzającą różnowartościowość macierzy.



tworzenie tablicy na przykładzie szkoły w której każda klasa ma inny limit uczniów (zapisany w tablicy klasa) :


int[ ] klasa ={ .......};

Osoba [ ][ ] szkola = new Osoba[klasa.length][ ] ;

for( int i=0; i< klasa.length; i++ )

szkola[i]=new Osoba[klasa[i]];





Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron