将 Java 中的二维矩阵加倍
Doubling a 2-dimensional matrix in Java
我目前有一个程序,当要求用户输入一个整数时,它会根据输入生成一个二维方阵(即:输入 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("");
}
}
}
双矩阵的索引错误。他们应该是:
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]
,依此类推...
如果问题与 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
的两倍,则无效。如果它总是只是 "double" 一个矩阵,它应该可以正常工作。
输出:
如果您选择尺寸 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
希望对您有所帮助 (:
我目前有一个程序,当要求用户输入一个整数时,它会根据输入生成一个二维方阵(即:输入 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("");
}
}
}
双矩阵的索引错误。他们应该是:
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]
,依此类推...
如果问题与 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
的两倍,则无效。如果它总是只是 "double" 一个矩阵,它应该可以正常工作。
输出:
如果您选择尺寸 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
希望对您有所帮助 (: