2016-01-13 93 views
-4

我目前有一个程序,当用户询问一个整数时,根据输入生成一个2d矩阵(即2:2格子中的2个结果的输入) 。Java中的二维矩阵加倍

然后程序用随机数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

目前,我只是用两个用于循环来生成这个矩阵,但它不打印出正确的结果。

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

德鲁,这看起来像一个家庭主妇k任务,这不完全是StackOverflow中的人员想回答的问题。人们可能会理解你很懒惰,并要求他们为你工作以获取计算器点数。而且,如果这是真的,那么对于老师和你自己来说你是不道德的。 – Leo

+1

同一问题:http://stackoverflow.com/questions/34756346/doubling-a-matrix – scsere

回答

2

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

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

0

如果这就是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 

我希望这有助于(: