CodeGym /Blog Java /Poland /Macierze w Javie - tablice 2D
Autor
Oleksandr Miadelets
Head of Developers Team at CodeGym

Macierze w Javie - tablice 2D

Opublikowano w grupie Poland

Czym jest macierz / tablica 2D w Javie?

„Macierz to zbiór liczb ułożonych w ustaloną liczbę wierszy i kolumn”. Zazwyczaj są to liczby rzeczywiste. Ogólnie rzecz biorąc, macierze mogą zawierać tylko liczby (zespolone) złożone i dla uproszczenia użyjemy tutaj tylko liczb całkowitych. Przyjrzyjmy się, jak wygląda macierz. Oto przykład macierzy o 4 wierszach i 4 kolumnach. Macierze w Javie - tablice 2D - 2

Ryc 1: Prosta macierz 4x4

Aby przedstawić tę macierz w Javie, możemy użyć tablicy 2-wymiarowej. Tablica 2D przyjmuje 2 wymiary, jeden dla wiersza i jeden dla kolumny. Na przykład, jeśli określisz tablicę liczb całkowitych int arr[4][4] oznacza to, że macierz będzie miała 4 wiersze i 4 kolumny. Można też powiedzieć, że dla każdego wiersza będzie teraz czwórka kolumn. Całkowity rozmiar/liczba komórek w macierzy to wiersze*kolumny = mxn = 4x4 = 16. Macierze w Javie - tablice 2D - 3

Ryc 2: Macierz[4][4] na ryc. 1 reprezentowana jako tablica 2D w Javie

Deklarowanie i inicjowanie tablicy 2D

Oto kilka różnych sposobów, aby albo zadeklarować tylko rozmiar tablicy, albo zainicjować ją bez podawania rozmiaru.

public class Matrices {

	public static void main(String[] args) {

		// declare & initialize 2D arrays for int and string
		int[][] matrix1 = new int[2][2];
		int matrix2[][] = new int[2][3];
           
           //the size of matrix3 will be 4x4
		int[][] matrix3 = { { 3, 2, 1, 7 }, 
					   { 9, 11, 5, 4 }, 
					   { 6, 0, 13, 17 }, 
					   { 7, 21, 14, 15 } };

		String[][] matrix4 = new String[2][2];

           //the size of matrix5 will be 2x3 
           // 3 cols because at max there are 3 columns
		String[][] matrix5 = { { "a", "lion", "meo" },  
				            { "jaguar", "hunt" } };
	}
}

Przemierzanie tablic 2D

Wszyscy wiemy, jak przemierzać w Javie standardowe tablice. W przypadku tablic 2D również nie jest to trudne. Powszechnie używamy do tego zagnieżdżonych pętli „for”. Niektórzy początkujący mogą zareagować na powyższy koncept zdziwieniem, ale jak tylko zagłębisz się w temat, będziesz w stanie to wdrożyć przy odrobinie praktyki. Spójrz na ten kawałek kodu. Wyświetla tylko liczbę kolumn odpowiadającą każdemu wierszowi, aby ułatwić ci dobre zrozumienie zagadnienia.

public class MatrixTraversal {
	public static void main(String[] args) {

	    int[][] matrix = new int[4][4];
	    for (int i = 0; i < matrix.length; i++) 
	    {   
		 // length returns number of rows
		 System.out.print("row " + i + " : ");		
		 for (int j = 0; j < matrix[i].length; j++) 
		 { 
		    // here length returns # of columns corresponding to current row
		    System.out.print("col " + j + "  ");
		 }
	    System.out.println();
	   }
	}
}
Wyświetlone zostanie:
wiersz 0 : kol 0 kol 1 kol 2 kol 3 wiersz 1 : kol 0 kol 1 kol 2 kol 3 wiersz 2 : kol 0 kol 1 kol 2 kol 3 wiersz 3 : kol 0 kol 1 kol 2 kol 3
Macierze w Javie - tablice 2D - 3

Jak wydrukować tablicę 2D w Javie?

Po zapoznaniu się z przemierzaniem tablic 2D przyjrzyjmy się kilku sposobom drukowania tablic 2D w Javie.

Korzystając z zagnieżdżonej pętli „for”

Jest to najbardziej podstawowy sposób drukowania macierzy w Javie.

public class MatrixTraversal {

    public static void printMatrix(int matrix[][])
    {
        for (int i = 0; i < matrix.length; i++) 
	  {   
	    // length returns number of rows		
	    for (int j = 0; j < matrix[i].length; j++) 
	    { 
	      // here length returns number of columns corresponding to current row
		// using tabs for equal spaces, looks better aligned
		// matrix[i][j] will return each element placed at row ‘i',column 'j'
		System.out.print( matrix[i][j]  + "\t"); 
	     }
	     System.out.println();
	   }
	}
	
	public static void main(String[] args) {

		int[][] matrix = { { 3, 2, 1, 7 }, 
					 { 9, 11, 5, 4 }, 
					 { 6, 0, 13, 17 }, 
					 { 7, 21, 14, 15 } };
		printMatrix(matrix);
	}
}
Wyświetlone zostanie:
3 2 1 7 9 11 5 4 6 0 13 17 7 21 14 15

Korzystanie z pętli „for-each”

Oto inny sposób drukowania tablic 2D w Javie za pomocą „pętli foreach”. Jest to specjalny typ pętli w Javie, w którym int[]row zapętli każdy wiersz w macierzy. Natomiast zmienna „element” będzie zawierała każdy element umieszczony na indeksie kolumny poprzez wiersz.

public class MatrixTraversal {

	public static void printMatrix(int matrix[][]){
		for (int [] row : matrix) 
		{   
			// traverses through number of rows		
			for (int element : row) 
			{ 
				// 'element' has current element of row index
				System.out.print( element  + "\t"); 
			}
			System.out.println();
		}
	}
	
	public static void main(String[] args) {

		int[][] matrix = {  { 3, 2, 1, 7 }, 
					  { 9, 11, 5, 4 }, 
					  { 6, 0, 13, 17 }, 
					  { 7, 21, 14, 15 } };
		printMatrix(matrix);
	}
}
Wyświetlone zostanie:
3 2 1 7 9 11 5 4 6 0 13 17 7 21 14 15

Korzystanie z metody „Arays.toString()”

Metoda Arrays.toString() w Javie konwertuje każdy przekazany do niej parametr jako pojedynczą tablicę i używa wbudowanej metody do jej wydrukowania. Stworzyliśmy fikcyjną tablicę String 2D do zabawy. Ta sama metoda działa również w przypadku tablic liczb całkowitych. Zachęcamy do przećwiczenia tego zagadnienia.

import java.util.Arrays;
public class MatrixTraversal {
	public static void printMatrix(String matrix[][]){
	
		for (String[] row : matrix) {
			// convert each row to a String before printing
			System.out.println(Arrays.toString(row));
		}
	}
	
	public static void main(String[] args) {

		String [][] matrix = {  { "Hi, I am Karen" }, 
						{ "I'm new to Java"}, 
						{ "I love swimming" }, 
						{ "sometimes I play keyboard"} };
		printMatrix(matrix);
	}
}
Wyświetlone zostanie:
[Cześć, jestem Karen] [Jestem nowa w Javie] [Uwielbiam pływać] [czasami gram na klawiszach]

Objaśnienie kodu

W pierwszej iteracji String[]row odczyta „Cześć, jestem Karen” jako tablicę, przekonwertuje ją na ciąg, a następnie wydrukuje. W ten sposób będą się odbywały wszystkie iteracje. Podane tutaj narzędzie polega na tym, że nie musisz śledzić żadnych indeksów (i, j) ani zagnieżdżonych pętli.

Wniosek

Tablice 2D w Javie są najprostszymi z tablic wielowymiarowych. Mamy nadzieję, że pod koniec tego artykułu nie będziesz bać się ich używać, a raczej jesteś w gotowości zakasać rękawy i na poważnie wziąć się do pracy. Możesz uruchomić wszystkie te przykładowe kody lub debugować wiersz po wierszu w zależności od tego, co jest wygodniejsze. Lecz na koniec chcielibyśmy przypomnieć (jak zawsze), że umiejętności przychodzą z długą praktyką i cierpliwością. Mamy nadzieję, że nauka z tablicami 2D w Javie będzie przyjemna. Powodzenia!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION