Tablice jednowymiarowe
Tablica jest pojemnikiem przechowującym ustaloną liczbę wartości
określonego typu.
Rozmiar tablicy ustalany jest podczas jej tworzenia i nie może być
zmieniany w trakcie działania programu.
0
1
2
3
4
5
6
7
8
9
Każda „komórka” w tablicy nazywana jest elementem. Elementy tablicy
są ponumerowane - numer elementu w tablicy to jego indeks.
Wartość indeksu jest typu int. (nie może przekroczyć maksymalnej
wartości typu int, czyli 2147483647.
Indeks pierwszego elementu w tablicy ma wartość 0. Indeks ostatniego
elementu w tablicy ma wartość N-1, gdzie N to liczba elementów w tablicy.
Podstawy programowania
Materiały do użytku wewnętrznego
5.1
Deklaracja
Deklaracja tablicy jednowymiarowej (zmiennej tablicowej) wygląda jak
poniżej:
typ_elementu [] zmienna_tablicowa;
lub
typ_elementu zmienna_tablicowa [];
Przykład 1
int [] punkty;
float oceny [];
Deklaracja zmiennej tablicowej nie przydziela pamięci operacyjnej
komputera potrzebnej do składowania elementów tablicy!
Podstawy programowania
Materiały do użytku wewnętrznego
5.2
Tworzenie tablicy (1/3)
Deklaracja tablicy tworzy zmienną tablicową, która przechowuje adres
(referencję) do obszaru pamięci RAM komputera, w którym składowane
są elementy tablicy.
Tworzenie tablicy polega na przydzieleniu obszaru w pamięci RAM i
przypisaniu jego adresu do zmiennej tablicowej. Wielkość przydzielanego
obszaru zależy od typu elementów tablicy oraz ich liczby.
Próba odwołania się do elementów tablicy przed jej utworzeniem
powoduje błąd wykonania programu.
Podstawy programowania
Materiały do użytku wewnętrznego
5.3
Tworzenie tablicy (2/3)
Jednym ze sposobów utworzenia tablicy jest wykorzystanie operatora
new.
typ_elementu [] zmienna_tablicowa;
zmienna_tablicowa = new typ_elementu[ liczba_elementów ];
lub
typ_elementu [] zmienna_tablicowa = new typ_elementu[ liczba_elementów ];
Przykład 1
int [] punkty;
punkty = new int[ 10 ];
float oceny [] = new float[ 10 ];
Wartościami domyślnymi elementów tablicy są wartości 0 (dla typów
numerycznych) oraz false (dla typu boolean). Dla typu char jest to znak
'\u0000'.
Podstawy programowania
Materiały do użytku wewnętrznego
5.4
Tworzenie tablicy (3/3)
Drugim sposobem utworzenia tablicy jest wykorzystanie skróconej notacji
połączonej z zainicjowaniem wartości elementów tablicy.
typ_elementu [] zmienna_tablicowa = { wartość1, wartość2, ... wartośćN };
Przykład 1
int [] punkty = { 1, 4, 7, 9, 12, 23, 45, 56, 67, 76 };
Rozmiar tablicy określany jest na podstawie liczby elementów (wartości),
znajdujących się między nawiasami { }.
Podstawy programowania
Materiały do użytku wewnętrznego
5.5
Elementy tablicy
Dostęp do elementów tablicy uzyskujemy za pomocą operatora
indeksowania [ ] oraz indeksu elementu.
zmienna_tablicowa [ indeks_elementu ]
Typem wyrażenia utworzonego za pomocą operatora indeksowania jest
typ elementu tablicy.
Wyrażenie postaci: zmienna_tablicowa[ indeks_elementu ] udostępnia
element tablicy zarówno do odczytu jak i do modyfikacji.
Wartość indeksu musi należeć do przedziału domkniętego < 0, N-1 >,
gdzie N jest liczbą elementów tablicy.
Przykład 1.
int [] punkty = new int[ 10 ];
punkty[ 5 ] = 12;
System. out.println( punkty[ 5 ] );
Podstawy programowania
Materiały do użytku wewnętrznego
5.6
Przetwarzanie (1/7)
Przykład 1 – inicjowanie elementów tablicy liczbami losowymi.
int [] punkty = new int[ 10 ];
for( int k = 0; k < punkty.length; k++ )
punkty[ k ] = (int)( Math. random() * 100 );
for( int k = 0; k < punkty.length; k++ )
System. out.print(punkty[ k ] + " " );
Przykład 2 – wyszukanie w tablicy wartości minimalnej.
int [] punkty = { 70, 43, 74, 2, 29, 10, 82, 92, 2, 17 };
int min = punkty[ 0 ];
for( int k = 1; k < punkty.length; k++ )
if ( min > punkty[ k ] ) min = punkty[ k ];
System. out.println( "Wartość minimalna: " + min ); // 2
Podstawy programowania
Materiały do użytku wewnętrznego
5.7
Przetwarzanie (2/7)
Przykład 3 – wyszukanie w tablicy indeksu wartości minimalnej.
int [] punkty = { 70, 43, 74, 2, 29, 10, 82, 92, 2, 17 };
int min = 0;
for( int k = 1; k < punkty.length; k++ )
if ( punkty[ min ] > punkty[ k ] ) min = k;
System. out.println( "Indeks wartości minimalnej: " + min ); // 3
Przykład 4 – suma wartości elementów tablicy.
int [] punkty = { 70, 43, 74, 2, 29, 10, 82, 92, 2, 17 };
int suma = 0;
for( int k = 0; k < punkty.length; k++ ) suma += punkty[ k ];
System. out.println( "Suma: " + suma ); // 421
Podstawy programowania
Materiały do użytku wewnętrznego
5.8
Przetwarzanie (3/7)
Przykład 5 – obliczenie liczby elementów o wartości parzystej.
int [] punkty = { 70, 43, 74, 2, 29, 10, 82, 92, 2, 17 }; int ile = 0;
for( int k = 0; k < punkty.length; k++ )
if ( punkty[ k ] % 2 == 0 ) ile++;
System. out.println( "Liczba parzystych: " + ile ); // 7
Podstawy programowania
Materiały do użytku wewnętrznego
5.9
Przetwarzanie (4/7)
Przykład 6 – sortowanie elementów tablicy metodą prostego wybierania
int [] punkty = { 70, 43, 74, 2, 29, 10, 82, 92, 2, 17 };
for( int k = 0; k < punkty.length-1; k++ )
{
int minIdx = k;
for( int m = k+1; m < punkty.length; m++ )
if ( punkty[ minIdx ] > punkty[ m ] ) minIdx = m;
int tmp = punkty[k];
punkty[k] = punkty[ minIdx ];
punkty[ minIdx ] = tmp;
}
for( int k = 0; k < punkty.length; k++ )
System. out.print( punkty[ k ] + " " );
// 2 2 10 17 29 43 70 74 82 92
Podstawy programowania
Materiały do użytku wewnętrznego
5.10
Przetwarzanie (5/7)
Przykład 7 – kopiowanie tablicy – wersja 1
int [] punktyA = { 70, 43, 74, 2, 29, 10, 82, 92, 2, 17 };
int [] punktyB = new int[ punktyA.length ];
for( int k = 0; k < punktyA.length; k++ )
punktyB[ k ] = punktyA[ k ];
for( int k = 0; k < punktyA.length; k++ )
System. out.print( punktyA[ k ] + " " );
//70 43 74 2 29 10 82 92 2 17
System. out.println();
for( int k = 0; k < punktyB.length; k++ )
System. out.print( punktyB[ k ] + " " );
//70 43 74 2 29 10 82 92 2 17
Podstawy programowania
Materiały do użytku wewnętrznego
5.11
Przetwarzanie (6/7)
Przykład 8 – kopiowanie tablicy – wersja 2
int [] punktyA = { 70, 43, 74, 2, 29, 10, 82, 92, 2, 17 };
int [] punktyB = new int[ punktyA.length ];
System. arraycopy( punktyA, 2, punktyB, 4, 5 );
for( int k = 0; k < punktyA.length; k++ )
System. out.print( punktyA[ k ] + " " );
//70 43 74 2 29 10 82 92 2 17
System. out.println();
for( int k = 0; k < punktyB.length; k++ )
System. out.print( punktyB[ k ] + " " );
// 0 0 0 0 74 2 29 10 82 0
Podstawy programowania
Materiały do użytku wewnętrznego
5.12
Przetwarzanie (7/7)
Przykład 9 – ???kopiowanie??? tablicy – wersja 3
int [] punktyA = { 70, 43, 74, 2, 29, 10, 82, 92, 2, 17 };
int [] punktyB = new int[ punktyA.length ];
punktyB = punktyA;
for( int k = 0; k < punktyA.length; k++ )
System. out.print( punktyA[ k ] + " " );
System. out.println(); //70 43 74 2 29 10 82 92 2 17
for( int k = 0; k < punktyB.length; k++ )
System. out.print( punktyB[ k ] + " " );
System. out.println(); //70 43 74 2 29 10 82 92 2 17
punktyA[ 3 ] = punktyA[ 5 ] = 300;
for( int k = 0; k < punktyA.length; k++ )
System. out.print( punktyA[ k ] + " " );
System. out.println(); //70 43 74 300 29 300 82 92 2 17
for( int k = 0; k < punktyB.length; k++ )
System. out.print( punktyB[ k ] + " " );
//70 43 74 300 29 300 82 92 2 17
Podstawy programowania
Materiały do użytku wewnętrznego
5.13
Tablice wielowymiarowe
Tablica wielowymiarowa to tablica, której elementami są tablice. Na
przykład, tablica dwuwymiarowa to tablica, której elementami są tablice
jednowymiarowe.
Przykład 1 – tablica jednowymiarowa o 5 elementach, każdy z nich jest
tablicą jednowymiarową o 10 elementach.
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
Podstawy programowania
Materiały do użytku wewnętrznego
5.14
Tablice wielowymiarowe
Przykład 2 – tablica jednowymiarowa o 5 elementach, każdy z nich jest
tablicą jednowymiarową o innej liczbie elementów.
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
W przypadku tablicy dwuwymiarowej mówimy o wierszach ( np. 5 ) oraz
kolumnach (np. 10).
Podstawy programowania
Materiały do użytku wewnętrznego
5.15
Tablice wielowymiarowe
Deklarowanie, tworzenie oraz odwoływanie się do elementów tablic
wielowymiarowych odbywa się podobnie jak w przypadku tablic
jednowymiarowych.
Przykład 1 – deklarowanie i tworzenie tablicy symetrycznej
int [][] punkty;
punkty = new int[ 5 ][ 10 ];
float oceny [][] = new float[ 5 ][ 10 ];
Przykład 2 – deklarowanie i tworzenie tablicy niesymetrycznej
int [][] punkty = new int[ 5 ][ ];
punkty[ 0 ] = new int [ 6 ];
punkty[ 1 ] = new int [ 10 ];
punkty[ 2 ] = new int [ 7 ];
punkty[ 3 ] = new int [ 4 ];
punkty[ 4 ] = new int [ 6 ];
Podstawy programowania
Materiały do użytku wewnętrznego
5.16
Tablice wielowymiarowe
Przykład 3 – deklarowanie i tworzenie tablicy symetrycznej
int [][] punkty = { { 36, 90, 10, 29, 93, 59, 6, 33, 79, 93 },
{ 23, 16, 18, 5, 71, 92, 60, 21, 86, 36 },
{ 14, 88, 69, 85, 66, 31, 13, 16, 40, 75 },
{ 28, 74, 25, 16, 64, 59, 46, 77, 68, 42 },
{ 61, 43, 39, 75, 80, 11, 49, 18, 78, 93 }
};
Przykład 4 – deklarowanie i tworzenie tablicy niesymetrycznej
int [][] punkty = { { 36, 90, 10, 29, 93, 59 },
{ 23, 16, 18, 5, 71, 92, 60, 21, 86, 36 },
{ 14, 88, 69, 85, 66, 31, 13 },
{ 28, 74, 25, 16 },
{ 61, 43, 39, 75, 80, 11 }
};
Podstawy programowania
Materiały do użytku wewnętrznego
5.17
Przetwarzanie (1/8)
Przykład 1 – inicjowanie tablicy symetrycznej wartościami losowymi
int [][] punkty = new int[ 5 ][ 10 ];
for( int k = 0; k < punkty.length; k++ )
for( int m = 0; m < punkty[ k ].length; m++ )
punkty[ k ][ m ] = (int)( Math. random() * 100 );
for( int k = 0; k < punkty.length; k++ )
{
for( int m = 0; m < punkty[ k ].length; m++ )
System. out.print( punkty[ k ][ m ] + " " );
System. out.println();
}
Podstawy programowania
Materiały do użytku wewnętrznego
5.18
Przetwarzanie (2/8)
Przykład 2 – inicjowanie tablicy niesymetrycznej wartościami losowymi
int [][] punkty = new int[ 5 ][ ];
punkty[ 0 ] = new int [ 6 ];
punkty[ 1 ] = new int [ 10 ];
punkty[ 2 ] = new int [ 7 ];
punkty[ 3 ] = new int [ 4 ];
punkty[ 4 ] = new int [ 6 ];
for( int k = 0; k < punkty.length; k++ )
for( int m = 0; m < punkty[ k ].length; m++ )
punkty[ k ][ m ] = (int)( Math. random() * 100 );
for( int k = 0; k < punkty.length; k++ )
{
for( int m = 0; m < punkty[ k ].length; m++ )
System. out.print( punkty[ k ][ m ] + " " );
System. out.println();
}
Podstawy programowania
Materiały do użytku wewnętrznego
5.19
Przetwarzanie (3/8)
Przykład 3 – wyszukanie w tablicy wartości minimalnej
int [][] punkty = { { 36, 90, 10, 29, 93, 59, 6, 33, 79, 93 },
{ 23, 16, 18, 5, 71, 92, 60, 21, 86, 36 },
{ 14, 88, 69, 85, 66, 31, 13, 16, 40, 75 },
{ 28, 74, 25, 16, 64, 59, 46, 77, 68, 42 },
{ 61, 43, 39, 75, 80, 11, 49, 18, 78, 93 }
};
int min = punkty[ 0 ][ 0 ];
for( int k = 0; k < punkty.length; k++ )
for( int m = 0; m < punkty[ k ].length; m++ )
if ( min > punkty[ k ][ m ] ) min = punkty[ k ][ m ];
System. out.println( "Wartość minimalna: " + min ); // 5
Podstawy programowania
Materiały do użytku wewnętrznego
5.20
Przetwarzanie (4/8)
Przykład 4 – wyszukanie w tablicy indeksów wartości minimalnej
int [][] punkty = { { 36, 90, 10, 29, 93, 59, 6, 33, 79, 93 },
{ 23, 16, 18, 5, 71, 92, 60, 21, 86, 36 },
{ 14, 88, 69, 85, 66, 31, 13, 16, 40, 75 },
{ 28, 74, 25, 16, 64, 59, 46, 77, 68, 42 },
{ 61, 43, 39, 75, 80, 11, 49, 18, 78, 93 }
};
int minW = 0;
int minK = 0;
for( int k = 0; k < punkty.length; k++ )
for( int m = 0; m < punkty[ k ].length; m++ )
if ( punkty[ minW ][ minK ] > punkty[ k ][ m ] )
{
minW = k;
minK = m;
}
System. out.println( "Indeksy wartości minimalnej: " + minW +
" " + minK ); //1 3
Podstawy programowania
Materiały do użytku wewnętrznego
5.21
Przetwarzanie (5/8)
Przykład 5 – suma wartości elementów tablicy
int [][] punkty = { { 36, 90, 10, 29, 93, 59, 6, 33, 79, 93 },
{ 23, 16, 18, 5, 71, 92, 60, 21, 86, 36 },
{ 14, 88, 69, 85, 66, 31, 13, 16, 40, 75 },
{ 28, 74, 25, 16, 64, 59, 46, 77, 68, 42 },
{ 61, 43, 39, 75, 80, 11, 49, 18, 78, 93 }
};
int suma = 0;
for( int k = 0; k < punkty.length; k++ )
for( int m = 0; m < punkty[ k ].length; m++ )
suma += punkty[ k ][ m ];
System. out.println( "Suma: " + suma ); //2499
Podstawy programowania
Materiały do użytku wewnętrznego
5.22
Przetwarzanie (6/8)
Przykład 6 – obliczenie liczby elementów o wartości parzystej
int [][] punkty = { { 36, 90, 10, 29, 93, 59, 6, 33, 79, 93 },
{ 23, 16, 18, 5, 71, 92, 60, 21, 86, 36 },
{ 14, 88, 69, 85, 66, 31, 13, 16, 40, 75 },
{ 28, 74, 25, 16, 64, 59, 46, 77, 68, 42 },
{ 61, 43, 39, 75, 80, 11, 49, 18, 78, 93 }
};
int ile = 0;
for( int k = 0; k < punkty.length; k++ )
for( int m = 0; m < punkty[ k ].length; m++ )
if ( punkty[ k ][ m ] % 2 == 0 ) ile++;
System. out.println( "Liczba parzystych: " + ile ); //25
Podstawy programowania
Materiały do użytku wewnętrznego
5.23
Przetwarzanie (7/8)
Przykład 7 – sortowanie elementów tablicy symetrycznej
int [][] punkty = { { 36, 90, 10, 29, 93, 59, 6, 33, 79, 93 },
{ 23, 16, 18, 5, 71, 92, 60, 21, 86, 36 },
{ 14, 88, 69, 85, 66, 31, 13, 16, 40, 75 },
{ 28, 74, 25, 16, 64, 59, 46, 77, 68, 42 },
{ 61, 43, 39, 75, 80, 11, 49, 18, 78, 93 } };
for( int e = 0; e < punkty.length*punkty[0].length; e++ )
{
int minE = e;
for( int s = e + 1; s < punkty.length*punkty[0].length; s++ )
if (punkty[minE / 10][minE % 10] > punkty[s / 10][s % 10]) minE=s;
int tmp = punkty[ e / 10 ][ e % 10 ];
punkty[ e / 10 ][ e % 10 ] = punkty[ minE / 10 ][ minE % 10 ];
punkty[ minE / 10 ][ minE % 10 ] = tmp;
}
for( int w = 0; w < punkty.length; w++ )
{
for( int k = 0; k < punkty[ w ].length; k++ )
System. out.print( punkty[ w ][ k ] + " " );
System. out.println();
}
Podstawy programowania
Materiały do użytku wewnętrznego
5.24
Przetwarzanie (8/8)
Przykład 8 – kopiowanie tablicy
int [][] punktyA = { { 36, 90, 10, 29, 93, 59, 6, 33, 79, 93 },
{ 23, 16, 18, 5, 71, 92, 60, 21, 86, 36 },
{ 14, 88, 69, 85, 66, 31, 13, 16, 40, 75 },
{ 28, 74, 25, 16, 64, 59, 46, 77, 68, 42 },
{ 61, 43, 39, 75, 80, 11, 49, 18, 78, 93 } };
int [][] punktyB = new int [ punktyA.length ][ punktyA[ 0 ].length ];
for( int k = 0; k < punktyA.length; k++ )
for( int m = 0; m < punktyA[ k ].length; m++ )
punktyB[ k ][ m ] = punktyA[ k ][ m ];
for( int w = 0; w < punktyB.length; w++ )
{
for( int k = 0; k < punktyB[ w ].length; k++ )
System. out.print( punktyB[ w ][ k ] + " " );
System. out.println();
}
Podstawy programowania
Materiały do użytku wewnętrznego
5.25