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