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;lt; m)
najwiekszaLiczba = m;
}
}
System.out.println("Największa liczba to "+najwiekszaLiczba);
@grzegg
Leave a Reply
You must be logged in to post a comment.