CodeGym /Java Blog /ランダム /Java の行列 - 2D 配列
John Squirrels
レベル 41
San Francisco

Java の行列 - 2D 配列

ランダム グループに公開済み

Javaの行列/2D配列とは何ですか?

「行列とは、固定数の行と列に配置された数値の集合です。」 通常、これらは実数です。一般に、行列には​​複素数を含めることができますが、簡単にするために、ここでは整数のみを使用します。マトリックスがどのようなものかを見てみましょう。以下は 4 行 4 列の行列の例です。Java の行列 - 2D 配列 - 2
図 1: 単純な 4x4 マトリックス
Java でこの行列を表すには、2 次元配列を使用できます。2D 配列は 2 つの次元を取り、1 つは行用、もう 1 つは列用です。たとえば、整数配列int arr[4][4]を指定すると、行列が 4 行 4 列になることを意味します。あるいは、各行に 4 つの列があるとも言えます。行列内のセルの合計サイズ / 数は、行*列= mxn = 4x4 = 16 となります。Java の行列 - 2D 配列 - 3
図 2: Java で 2D 配列として表現された図 1 の行列 [4][4]

2D 配列の宣言と初期化

ここでは、配列のサイズを宣言するだけ、またはサイズを指定せずに配列を初期化するさまざまな方法をいくつか紹介します。

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" } };
	}
}

2D 配列トラバーサル

Java で通常の配列を走査する方法は誰もが知っています。2D 配列の場合も難しくありません。これには通常、ネストされた「for」ループを使用します。初心者の中には、これを異質な概念のように考える人もいるかもしれませんが、深く掘り下げていくと、練習すればすぐに実装できるようになります。次のスニペットを見てください。完全に理解できるように、各行に対応する列の数のみが表示されます。

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();
	   }
	}
}
出力
行 0 : 列 0 列 1 列 2 列 3 行 1 : 列 0 列 1 列 2 列 3 行 2 : 列 0 列 1 列 2 列 3 行 3 : 列 0 列 1 列 2 列 3

Java で 2D 配列を印刷するには?

2D 配列のトラバーサルに慣れたら、Java で 2D 配列を出力するいくつかの方法を見てみましょう。

ネストされた「for」ループの使用

これは、Java で行列を出力する最も基本的な方法です。

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);
	}
}
出力
3 2 1 7 9 11 5 4 6 0 13 17 7 21 14 15

「for-each」ループの使用

ここでは、「foreach ループ」を使用して Java で 2D 配列を出力する別の方法を示します。これは Java が提供する特殊なタイプのループで、int[]row は行列内の各行をループします。一方、変数「element」には、行全体の列インデックスに配置された各要素が含まれます。

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);
	}
}
出力
3 2 1 7 9 11 5 4 6 0 13 17 7 21 14 15

「Arays.toString()」メソッドの使用

Java のArrays.toString()メソッドは、渡されたすべてのパラメータを単一の配列として変換し、その組み込みメソッドを使用して出力します。試してみるためのダミーの String 2D 配列を作成しました。同じ方法は整数配列にも機能します。ぜひ練習に取り入れてみてください。

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);
	}
}
出力
[こんにちは、私はカレンです] [Java は初めてです] [水泳が大好きです] [時々キーボードを弾きます]

コードの説明

最初の反復では、String[]row は「こんにちは、私はカレンです」を配列として読み取り、それを文字列に変換して出力します。このようにしてすべての反復が行われます。ここで提供されるユーティリティは、インデックス (i, j) やネストされたループを追跡する必要がないことです。

結論

Java の 2D 配列は、多次元配列の中で最も単純です。この記事を読み終えるまでに、これらを使用することを恐れず、本格的な作業に取り組む準備ができていることを願っています。これらのサンプル コードをすべて実行したり、都合に応じて 1 行ずつデバッグしたりできます。しかし最後に、(いつものように)スキルを身につけるには、多大な練習と忍耐が必要だということをアドバイスしたいと思います。Java の 2D 配列を楽しく学習していただければ幸いです。幸運を!
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION