该程序的目的是创建一个更大的字节数组,该数组是原始数组的 10 倍。例如,[0][0] 中的 1 应该是新数组中由 1 组成的 10x10 正方形。我提供了代码和输出,它们在填充较大数组期间似乎可以正常工作,但随后会打印不同的值。我目前正在尝试仅使用行,以限制我在测试期间处理的变量数量。谁能想到发生这种情况的原因吗?
public class Test
{
static byte[][] byteArray =
{{1, 0},
{0, 1}};
public static void main(String[] args)
{
byte newarray[][] = converter();
for(int i = 0; i < 20; i++)
{
System.out.println(newarray[i][0]);
}
}
private static byte[][] converter()
{
byte[][] b = new byte[20][20];
for(int r = 0; r < 2; r++)
{
for(int i = 0; i < 10; i++)
{
b[r+i][0] = byteArray[r][0];
System.out.println(byteArray[r][0]);
System.out.println(b[r+i][0]);
}
}
return b;
}
}
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
最佳答案
为什么不直接使用截断整数除法来发挥你的优势:
static void printMat(byte[][] mat)
// just a utility function to print a matrix
{
for(byte[] row : mat)
{
System.out.println(Arrays.toString(row));
}
}
private static byte[][] stretch(byte[][] bytes, int rfactor, int cfactor)
// stretch the matrix in 'bytes'
//stretch the rows by 'rfactor' and the columns by 'cfactor'
{
// create an empty matrix:
int rows = bytes.length*rfactor; // rows in the new matrix
int cols = bytes[0].length*cfactor; // columns in the new matrix
byte[][] out = new byte[rows][cols]; // our new, stretched matrix
// loop through the rows and columns of the *new* matrix:
for(int r = 0; r < rows; r++)
{
for(int c = 0; c < cols; c++)
{
// Divide the row and column indices by the
// appropriate factors to find the correct value
// in the original matrix.
// Integer division just drops any remainder,
// which is what we want.
out[r][c] = bytes[r/rfactor][c/cfactor];
}
}
return out;
}
public static void main(String[] args) throws Exception
{
// your example:
byte[][] byteArray =
{{1, 0},
{0, 1}};
byte[][] newarray = stretch(byteArray, 10, 10);
printMat(newarray);
System.out.println();
// can stretch any matrix by any dimensions:
byte[][] byteArray2 =
{{1, 2, 3},
{4, 5, 6}};
byte[][] newarray2 = stretch(byteArray2, 3, 2);
printMat(newarray2);
}
输出:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 2, 2, 3, 3]
[1, 1, 2, 2, 3, 3]
[1, 1, 2, 2, 3, 3]
[4, 4, 5, 5, 6, 6]
[4, 4, 5, 5, 6, 6]
[4, 4, 5, 5, 6, 6]
关于java - 缩放数组(矩阵),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16556328/