在Java中加倍二维矩阵

时间:2016-01-13 17:56:50

标签: java loops for-loop matrix 2d

我目前有一个程序,当要求用户输入一个整数时,根据输入生成一个方形2d矩阵(即。:输入2的结果为2x2网格)。

程序然后用随机数0-9填充该矩阵,然后创建一个原始尺寸的两倍的新矩阵(2x2变为4x4,3x3到6x6等)。

但是,我无法正确复制结果。我试图让矩阵以这样的方式复制,即从这样的矩阵: 1 2 3 4 5 6 7 8 9

它会产生一个矩阵: 1 1 2 2 3 3 1 1 2 2 3 3 4 4 5 5 6 6 4 4 5 5 6 6 7 7 8 8 9 9 7 7 8 8 9 9

目前,我只是使用两个for循环来生成此矩阵,但它并没有打印出正确的结果。

public static void main(String[] args) {
    System.out.println("Enter the size of the matrix.");
    Scanner keyboard = new Scanner(System.in);
    Random random = new Random();
    int n = keyboard.nextInt();
    int[][] matrix = new int[n][n];
    for (int x=0;x<n;x++)
    {
        for (int y=0;y<n;y++)
        {
            matrix[x][y] = random.nextInt(10); 
        }
    }
    System.out.println("The matrix is");
    for (int x=0;x<matrix.length;x++)
    {
        for (int y=0;y<matrix.length;y++)
        {
            System.out.print(matrix[x][y]+" ");
        }
        System.out.println("");
    }
    int nDouble = n * 2;
    int c = 1;
    int[][] matrixDoubled = new int[nDouble][nDouble];
    for (int y=0;y<matrix.length;y++)
    {
        for (int x=0;x<matrix.length;x++)
        {
            matrixDoubled[x][y] = matrix[x][y];
            matrixDoubled[x+c][y] = matrix[x][y];
            matrixDoubled[x][y+c] = matrix[x][y];
            matrixDoubled[x+c][y+c] = matrix[x][y];
            c = c + 1;
        }
        c = 1;
    }
    System.out.println("The doubled matrix is");
    for (int x=0;x<matrixDoubled.length;x++)
    {
        for (int y=0;y<matrixDoubled.length;y++)
        {
            System.out.print(matrixDoubled[x][y]+" ");
        }
        System.out.println("");
    }
}

}

2 个答案:

答案 0 :(得分:2)

doubled矩阵的索引是错误的。他们应该是:

        matrixDoubled[2*x][2*y] = matrix[x][y];
        matrixDoubled[2*x+1][2*y] = matrix[x][y];
        matrixDoubled[2*x][2*y+1] = matrix[x][y];
        matrixDoubled[2*x+1][2*y+1] = matrix[x][y];

这种方式matrix[0][0]映射到新矩阵中的[0][0][1][0][0][1][1][1]位置,matrix[0][1]已映射到职位[0][2][1][2][0][3][1][3]等等......

答案 1 :(得分:1)

如果问题与this问题相同,应该这样做:

for (int i = 0; i < matrixDoubled.length; i++)
    for (int j = 0; j < matrixDoubled.length; j++)
        matrixDoubled[i][j] = matrix[i/size][j/size];

注意:此代码肯定不是最佳解决方案,而是快速简单的解决方案。它仅适用于两个维度相同的尺寸,如果matrixDoubled不是matrix的两倍,则它不会起作用。如果它总是只是&#34; double&#34;矩阵应该可以正常工作。

<强>输出:
如果您选择尺寸2而不是输出:

Enter the size of the matrix
2
The Matrix is
3 5 
5 2 
The matrixDoubled is
3 3 5 5 
3 3 5 5 
5 5 2 2 
5 5 2 2 

,对于大小3,它将是例如

Enter the size of the matrix
3
The Matrix is
4 4 3
5 9 4
7 4 1
The matrixDoubled is
4 4 4 4 3 3
4 4 4 4 3 3
5 5 9 9 4 4
5 5 9 9 4 4
7 7 4 4 1 1
7 7 4 4 1 1

我希望这会有所帮助(: