1. ホーム
  2. ジャワ

[解決済み] 2次元配列から行列を転置する

2022-03-03 03:18:50

質問

私は独学でJavaを勉強していますが、ランダムな値で初期化し、配列の転置を作成する2次元配列の作成に行き詰っています。

出力例は以下の通りです。

$ java Test1 22 333 44 555 6  
Enter the number of rows (1-10): 0  
ERROR: number not in specified range (1-10) !  
and so on until you enter the correct number of rows and columns.

オリジナルマトリックス

<ブロッククオート
  1  22  
333  44  
555   6

転置行列

  1  333  555`  
 22   44    6`

^ 最終的な出力になるはずです。 コードについてのヘルプをお願いします。

行や列の数が指定範囲外の場合、エラーメッセージを生成するコードを希望します。また、行列の要素をランダムに生成するのではなく、コマンドラインから読み込むようにしたいです。

import java.util.Scanner;

public class Test1 {
    /** Main method */
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the number of rows (1-10): ");
        int rows = input.nextInt();
        System.out.print("Enter the number of columns (1-10): ");
        int cols = input.nextInt();

        // Create originalMatrix as rectangular two dimensional array
        int[][] originalMatrix = new int[rows][cols];

        // Assign random values to originalMatrix
        for (int row = 0; row < originalMatrix.length; row++)
            for (int col = 0; col < originalMatrix[row].length; col++) {
                originalMatrix[row][col] = (int) (Math.random() * 1000);
            }

        // Print original matrix
        System.out.println("\nOriginal matrix:");
        printMatrix(originalMatrix);

        // Transpose matrix
        int[][] resultMatrix = transposeMatrix(originalMatrix);


        // Print transposed matrix
        System.out.println("\nTransposed matrix:");
        printMatrix(resultMatrix);
    }

    /** The method for printing the contents of a matrix */
    public static void printMatrix(int[][] matrix) {
        for (int row = 0; row < matrix.length; row++) {
            for (int col = 0; col < matrix[row].length; col++) {
                System.out.print(matrix[row][col] + "  ");
            }
            System.out.println();
        } 
    }

    /** The method for transposing a matrix */
    public static int[][] transposeMatrix(int[][] matrix) {
        // Code goes here...
    }
}

解決方法は?

転置行列をint[][]で返すだけの簡単なメソッドです。

public static int[][] transposeMatrix(int[][] matrix){
    int m = matrix.length;
    int n = matrix[0].length;

    int[][] transposedMatrix = new int[n][m];

    for(int x = 0; x < n; x++) {
        for(int y = 0; y < m; y++) {
            transposedMatrix[x][y] = matrix[y][x];
        }
    }

    return transposedMatrix;
}

2次元の行列を表示するには、次のような方法を使用します。

public static String matrixToString(int[][] a){
    int m = a.length;
    int n = a[0].length;

    String tmp = "";
    for(int y = 0; y<m; y++){
        for(int x = 0; x<n; x++){
            tmp = tmp + a[y][x] + " ";
        }
        tmp = tmp + "\n";
    }

    return tmp;
}