Twitter: @grzegg
Kategoria: java, Tagi: - - .

Java – tablice cz. II (07)

Siódma prezentacja do kursu „Wstęp do programowania”.
Treść: Tablice cz. II – tablice wielowymiarowe, kopiowanie tablic.

Ta strona jest częścią starego kursu Javy. Nowy kurs, pt. “Programowanie w Javie z elementami bioinformatyki dla poczatkujących”, jest znacznie rozszerzony i dostosowany fo Javy 8. Jego forma jest także znacznie bardziej przystępna dla korzystających wyłącznie z treści on-line. Dostępne materiały znajdziesz tutaj.


Kopiowanie tablic

Różne sposoby kopiowania tablic. Pierwszy, wydawałoby się najbardziej oczywisty, okazuje się nieskuteczny. Kolejne pozwalają na rzeczywiste kopiowanie tablic.


package tablice;

import java.util.Arrays;

public class KopiowanieTablicy {

	/**
	 * @param args
	 */
	public static void main(String[] args) {


		int[] tablica1 = new int[10];
		int[] tablica2 = tablica1;

		// Metoda NIESKUTECZNA!
		// Wypełnianie tablicy liczbami od 0 do 9
		for (int i=0; i<tablica1.length; i++) {
			tablica1[i]=i;
		}

		// Wypisanie zawartości obu tablic 
		System.out.println("\nTablice przed zmianą zawartości ");
		System.out.print("Tablica1: ");		
		for (int i : tablica1) System.out.print(i+" ");
		System.out.println();
		System.out.print("Tablica2: ");
		for (int i : tablica2) System.out.print(i+" ");
		System.out.println();

		//Zmiana trzeciej wartości w kopii tablicy (jak mogłoby się wydawać).
		tablica2[2] = 100;

		// Po wypisaniu zawartości okazuje się, że wartość trzeciej komórki została 
		// zmieniona w OBU tablicach - tak naprawdę jest to jedna tablica, na którą
		// wkazują dwa WSKAŹNIKI.
		System.out.println("Tablice po zmianie zawartości ");
		System.out.print("Tablica1: ");		
		for (int i : tablica1) System.out.print(i+" "); 
		System.out.println();
		System.out.print("Tablica2: ");
		for (int i : tablica2) System.out.print(i+" ");

		// Metody skuteczne

		// Metoda 1 - Kopiowanie za pomocą pętli
		System.out.println("\n\n * Kopiowanie za pomocą pętli");
		// tworzymy dwie tablice
		int[] tablica3 = new int[10];
		int[] tablica4 = new int[10];
		// tablicę3 wypełniamy liczbami 0-9
		for (int i=0; i<tablica3.length; i++) tablica3[i]=i;

		// iterujemy obie tablicę, pobierając wartości z tablicy3 
		// i wpisujemy je do tablicy 4
		for (int i=0; i<tablica3.length; i++) tablica4[i]=tablica3[i];

		// zmieniamy wartość jednej komórki w tablicy4
		tablica4[2]=100;

		// wypisujemy wartości z obu tablic
		System.out.print("Tablice po zmianie zawartości");
		System.out.println();
		System.out.print("Tablica3: ");		
		for (int i : tablica3) System.out.print(i+" ");
		System.out.println();
		System.out.print("Tablica4: ");
		for (int i : tablica4) System.out.print(i+" ");

		// ___________________________________________________________
		// Inne, zapewne bardziej praktyczne sposoby kopiowania tablic

		// Metoda 2 - Kopiowanie za pomocą Arrays.copyOf();
		// Uwaga, należy dodać na górze komendę import java.util.Arrays;
		System.out.println("\n\n * Kopiowanie za pomocą Arrays.copyOf()");
		int[] tablica5 = new int[10];
		for (int i=0; i<tablica5.length; i++) tablica5[i]=i;

		// Kopiowanie tablic
		int[] tablica6 = Arrays.copyOf(tablica5, tablica5.length);

		tablica6[2]=100;
		System.out.println();
		System.out.print("Tablica5: ");		
		for (int i : tablica5) System.out.print(i+" ");
		System.out.println();
		System.out.print("Tablica6: ");
		for (int i : tablica6) System.out.print(i+" ");

		// Metoda 3 Kopiowanie za pomocą System.arraycopy()
		System.out.println("\n\n * Kopiowanie za pomocą System.arraycopy()");
		int[] tablica7 = new int[10];
		for (int i=0; i<tablica7.length; i++) tablica7[i]=i;
		int [] tablica8 = new int[tablica7.length];

		//Kopiowanie tablic
		System.arraycopy( tablica7, 0, tablica8, 0, tablica7.length );

		tablica8[2]=100;
		System.out.println();
		System.out.print("Tablica7: ");		
		for (int i : tablica7) System.out.print(i+" ");
		System.out.println();
		System.out.print("Tablica8: ");
		for (int i : tablica8) System.out.print(i+" ");

		// Metoda 4 Kopiowanie za pomocą metody .clone()
		System.out.println("\n\n * Kopiowanie za pomocą  metody .clone()");
		int[] tablica9 = new int[10];
		for (int i=0; i<tablica9.length; i++) tablica9[i]=i;

		//Kopiowanie tablic
		int[] tablica10 = (int[])tablica9.clone();

		tablica10[2]=100;
		System.out.println();
		System.out.print("Tablica9: ");		
		for (int i : tablica9) System.out.print(i+" ");
		System.out.println();
		System.out.print("Tablica10: ");
		for (int i : tablica10) System.out.print(i+" ");

	}

}


Tablice dwuwymiarowe

Tworzenie tablic dwuwymiarowych, wypełnianie ich zawartością i wypisywanie zawartości.


// Deklaracja i inicjalizacja tablicy
int[][] tablica = new int[10][10];

// Wypełnienie tablicy liczbami od 0 do 99
int wartosc = 0;
for (int i=0; i<10; i++) {
	for (int j=0; j<10; j++ ) {
		tablica[i][j] = wartosc;
		wartosc++;
	}
}

System.out.println("Wartość tablica[6][4] "+tablica[6][4]);

//Wypisanie wartości tablicy w 10 rzędach po 10
//Z zastosowaniem pętli for
System.out.println("Zawartośc tablicy (for)");
for (int i=0; i<10; i++) {
	for (int j=0; j<10; j++ ) {
		System.out.print(tablica[i][j]+" ");
	}
	System.out.println();
}

//Wypisanie wartości tablicy w 10 rzędach po 10
//Z zastosowaniem pętli foreach
System.out.println("Zawartośc tablicy (foreach)");
for (int[] t : tablica) {
	for (int l : t) {
		System.out.print(l+" ");
	}
	System.out.println();
}

Tworzenie i wypełnienie tablicy

Tworzenie i wypełnienie od razu tablicy dwuwymiarowej oraz wypisanie zawartości tabeli.


int[][] tab =  {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
for (int[] l : tab) {
	for (int m : l) System.out.print(m+" ");
	System.out.println();
}

Tablica trójwymiarowa

Tworzenie, wypełnianie zawartością i wypisanie zawartości tablicy trójwymiarowej.


//Deklaracja i inicjalizacja tablicy 3-wymiarowej
int[][][] tablica3wymiarowa = new int[5][10][10];

int licznik = 0;

// Wypełnianie zawartością tablicy

// "Trzeci wymiar"
for (int i=0; i<5; i++) {
	// "Drugi wymiar"
	for (int j=0; j<10; j++ ) {
		// "Pierwszy wymiar"
		for (int k=0; k<10; k++)
			//Wstawianie wartości
			tablica3wymiarowa[i][j][k] = licznik++;
	}
}
// Wypisanie zawartości tablicy

// "Trzeci wymiar"
for (int[][] t : tablica3wymiarowa) {
	// "Drugi wymiar"
	for (int[] u : t) {
		// "Pierwszy wymiar"
		for (int w : u)
			System.out.print(w+" ");
		System.out.println();
	}
	System.out.println("****");
}


Szukanie największej liczby w tablicy dwuwymiarowej

Rozwiązanie zadania.


int[][] tab =  {{1,2,3,4,5},
			{6,7,8,9,10},
			{11,22,13,14,15}};
int najwiekszaLiczba = 0;
for (int[] l : tab) {
	for (int m : l) {
		if (najwiekszaLiczba &amp;amp;amp;amp;amp;lt; m)
			najwiekszaLiczba = m;
	}
}

System.out.println("Największa liczba to "+najwiekszaLiczba);


Leave a Reply