1
/tablice
Tablice
• elementy tablicy: typ pierwotny lub referencyjny
int[] i;
deklaracja jednowymiarowej tablicy liczb int
int[6] i;
tak nie mo na
Button[] b;
deklaracja jednowymiarowej tablicy przycisków
double[][] d;
deklaracja dwuwymiarowej tablicy liczb double
• tworzenie tablic:
int[] tab={1,2,3,4,5}; deklaracja wraz z inicjalizacj int[] tab; tab=new int[5]; ==
int[] tab=new int[5];
• rozmiar tablicy mo e by ustalony dynamicznie
int n;
n=12;
int[] t=new int[n];
//== int[12]
• ustalony rozmiar tablicy nie mo e by zmieniony!
tablica w Javie jest obiektem dla potrzeb maszyny wirtualnej w trakcie kompilacji jest tworzona dla tablicy niejawnie definicja klasy int[] tab=new int[4];
tworzona jest klasa o nazwie I4
(dla int: „Ix”, x-liczba elementów tablicy)
• length jest polem niejawnie utworzonej klasy opisuj cej tablic – pole to daje info o rozmiarze tablicy pozwala pisa uniwersalne metody działaj ce na tablicach o dowolnych rozmiarach
for (i=0; i<tab.length; i++) System.out.println(tab[i]);
• do poszczególnych elementów mo na si odwoływa przez indeksy, które mog by dowolnymi wyra eniami, których wyliczenie daje int (równie byte, char, short, ale nie: long)
• gdy nie zgadza si indeks pada wyj tek ArrayIndexOutOfBoundsException
2
/tablice
• nazwa tablicy to nazwa zmiennej b d cej referencj do obiektu-tablicy
• zmiennej tablicowej jak ka dej referencyjnej mo na przypisa null
• zmiennej tablicowej mo na przypisa referencj do innej tablicy (je li s tego samego typu) ró ne rozmiary tablic nie s przeszkod i pozostaj bez zmian, bo przypisanie dotyczy referencji, a nie tablic byte[] b1 = {1, 2, 3 };
byte[] b2 = {1, 2, 3, 5, 5 };
byte[] b = b2;
b2 = b1;
// teraz b2 oznacza {1, 2, 3}
b2[0] = 77; // a teraz b2={77, 2, 3}
b[0] = 99;
// b1 i b2 wskazuj na t sam tablic : 77 2 3
//
b: 99 2 3 5 5
działanie metody na tablic
public class Test
{
Test() {
int[] a = {1, 2, 3, 4 };
int[] wynik = dblVal(a);
for (int i=0; i<wynik.length; i++)
System.out.print(" " + wynik[i]);
}
//zwraca referencj do nowo utworzonej tablicy
int[] dblVal(int[] tab) {
int[] w = new int[tab.length];
//utworzenie tablicy na wynik, jej rozmiary
//musz by równe rozmiarom tablicy-argumentu
for (int i=0; i<w.length; i++) w[i] = tab[i]*2;
return w;
}
public static void main(String[] args) { new Test(); }
}
• zmiennej tablicowej (=referencji do tablicy) w metodzie nie jeste my w stanie zmieni (bo w Javie argumenty s przekazywane do metod przez warto
), ale elementy przekazanej tablicy mo na zmieni
public class Test3 {
public static void main(String[] args) {
new Test3();
}
Test3() {
int[] tab = {2,5,7};
3
/tablice
chgTab1(tab);
// 3,6,8
showTab("Po wywołaniu chgTab1 tab= ", tab);
// 2,5,7
chgTab2(tab);
showTab("Po wywołaniu chgTab2 tab= ", tab);
// 4,7,9
}
void chgTab1(int[] tab)
{
int[] nowa = {3,6,8};
tab = nowa;
showTab("W metodzie chgTab1 tab= ", tab);
}
void chgTab2(int[] tab)
{
for (int i=0; i<tab.length; i++) tab[i]+=2;
}
void showTab(String s, int[] tab) {
System.out.println(s);
for (int i=0; i<tab.length; i++) System.out.print(" " + tab[i]); System.out.print('\n'); }
}
tablica obiektów
class Para {
int a;
int b;
Para(int x, int y) {
a = x ;
b = y;
}
Para(int x) {
a = b = x; }
void set(Para p) {
a = p.a;
b = p.b;
}
Para add(Para p) { // metoda dodawania dwóch par Para wynik = new Para(a, b);
wynik.a += p.a;
wynik.b += p.b;
return wynik; }
void show(String s) { // metoda pokazuj ca par System.out.println(s + " ( " + a + " , " + b + " )" );
}
}
public class TabPar
{
public static void main(String[] args) {
Para[] tabPar = new Para[10];
for (int i=0; i<tabPar.length; i++) tabPar[i] = new Para(i+1, i+2);
4
/tablice
for (int i=0; i<tabPar.length; i++) tabPar[i].show("Para " + (i+1));
}
//Para 1 ( 1 , 2 )
}
//Para 2 ( 2 , 3 )
//...
//Para 10 ( 10 , 11 )
• inny sposób utworzenia obiektów w tablicy
Jbutton[] b={new Jbutton(„A”), newJButton(„B”)};
tablica wielowymiarowa
• elementami s referencj do innych tablic
int[][] m1={{1,2,3},{4,5,6}};
inicjalizacja
int[][] m2=new int[n][m];
utworzenie dynamiczne
public class MultiArr
{
public static void main(String[] arg)
{
int w[] = {2,3,4};
int n = 3;
int[][] m3 = new int[n][];
// rozmiary wierszy
for(int i=0; i<m3.length; i++) { // b d zmienne dynamicznie m3[i] = new int[w[i]];
for (int j = 0; j < m3[i].length; j++) m3[i][j] = i + j;
}
for (int i=0; i<m3.length; i++) {
System.out.println("Rozmiar " + i + "-go wiersza= " + m3[i].length); String out = " ";
for(int j=0; j<m3[i].length; j++)
// Rozmiar 0 wiersza= 2
out += " " + m3[i][j];
// 0 1
System.out.println(out); }
// Rozmiar 1 wiersza= 3
}
// 1 2 3
}
// Rozmiar 2 wiersza= 4
// 2 3 4 5