我有一个7行乘5列的2D数组。我正在尝试将2D数组转换为1D数组,但由于某种原因,它只会复制每行或最后一列的最后一个元素。
我的2D数组看起来像这样:
0 33 32 37 0
85 73 82 73 80
104 103 95 109 101
88 108 111 116 100
133 119 102 122 116
116 123 95 112 117
0 57 76 58 0
但我的1D阵列的输出是:
0.0 80.0 101.0 100.0 116.0 117.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 .....
这是我的代码:
public static void getTestImg() {
TestImg = new double[35];
double testValues;
for (int r=0; r < TestPix.length; r++) {
for (int c=0; c < TestPix[r].length; c++) {
testValues = TestPix[r][c];
TestImg[r] = testValues;
}
}
for (int r=0; r < TestImg.length; r++) {
System.out.print(TestImg[r] + " ");
}
System.out.println();
}
我一直试图解决我出错的地方,但我无法解决造成这种情况的原因。如果我打印&#34; TestPix [r] [c]&#34;在循环中它按顺序打印元素,所以我不知道问题出在哪里。有人可以帮忙吗?
答案 0 :(得分:3)
您正在复制到输出数组的错误索引(r
是源2D数组的当前行的索引)。您需要一个不同的索引变量:
int x = 0;
for (int r=0; r < TestPix.length; r++) {
for (int c=0; c < TestPix[r].length; c++) {
TestImg[x++] = TestPix[r][c];
}
}
答案 1 :(得分:0)
假设它的N * N矩阵,您可以执行以下操作:
int N = board.length*board.length;
char[] board1D = new char[N];
int k = 0;
for (int i =0; i<board.length; i++) {
for (int j =0; j<board.length; j++) {
board1D[k++] = board[i][j];
}
}
答案 2 :(得分:0)
您可以使用Eran解决方案,或者这也是常见的方法:
for (int r=0; r < TestPix.length; r++) {
for (int c=0; c < TestPix[r].length; c++) {
testValues = TestPix[r][c];
TestImg[c + r*TestPix[r].length] = testValues;
}
}
然而,只有你的数组是矩形(在大多数情况下是)时,这才有效。
如果您想要计算带有2D索引的1D数组中的索引,这也是“很有用”:
function index1D(int x, int y, int arrayColumnLength){
return x*arrayColumnLength + y;
}