缩放数组(矩阵)

这个程序的目的是创建一个比原始数组放大10倍的更大字节数组。 例如,[0] [0]中的1应该是新数组中1x的10×10平方。 我提供了代码和输出,它似乎在较大数组的填充期间正常工作,但随后打印不同的值。 我目前正在试验这些行,以便限制我在测试期间处理的变量数量。 任何人都可以想到这种情况发生的原因吗?

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 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]