【问题标题】:Doubling a 2-dimensional matrix in Java [duplicate]在Java中将二维矩阵加倍[重复]
【发布时间】:2016-01-13 17:56:49
【问题描述】:

我目前有一个程序,当向用户询问整数时,它会根据输入生成一个 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("");
    }
}

}

【问题讨论】:

  • Drew,这看起来像是一个家庭作业,这并不是 StackOverflow 中的人们想要回答的那种问题。人们可能会理解您很懒惰并要求他们为您工作以获得stackoverflow积分。此外,如果这是真的,那么你对你的老师和你自己都是不道德的。

标签: java loops for-loop matrix 2d


【解决方案1】:

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

        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],等等……

【讨论】:

    【解决方案2】:

    如果这与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 的两倍,它将不起作用。如果总是只是将矩阵“加倍”,它应该可以正常工作。


    输出:
    如果您选择大小 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
    

    我希望这会有所帮助(:

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2020-08-25
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多