在尝试将额外的列添加到字符串的2D矩阵时,我遇到了重复问题。
这是我的代码:
List<String[]> rowValues; // the matrix, #of rows not
// important, #of columns is 7]
String[] columnValues = new String[8]; // would contain the old row
// data plus one extra String
// LOOP ON ROWS
for(int i = 0; i < rowValues.size(); i++) {
// LOOP ON COLUMNS
for (int j = 0; j < rowValues.get(i).length; j++) {
columnValues[j] = rowValues.get(i)[j];
}
columnValues[7] = "ENTRY" + i;
rowValues.set(i, columnValues);
System.out.println(rowValues.get(i)[0]); // last element in each iteration
}
// END LOOPS
System.out.println(rowValues.get(0)[0]); // element in 0-0 is
// the same as last row-0
我的问题是所有行都包含最后一行的数据,加上标记为的额外列: &#34; ENTRYX&#34;
例如,
[hi, im, haithem]
[this, is, hard]
[to, figure, out]
会是,
[to, figure, out, ENTRY2]
[to, figure, out, ENTRY2]
[to, figure, out, ENTRY2]
答案 0 :(得分:0)
您覆盖columnValues
变量的值。
你应该在循环中声明它。
List<String[]> rowValues; // the matrix, #of rows not
// important, #of columns is 7
//////////////////
// LOOP ON ROWS //
//////////////////
for(int i = 0; i < rowValues.size(); i++) {
final String[] columnValues = new String[8]; // would contain the old row
// data plus one extra String
/////////////////////
// LOOP ON COLUMNS //
/////////////////////
for (int j = 0; j < rowValues.get(i).length; j++) {
columnValues[j] = rowValues.get(i)[j];
}
columnValues[7] = "ENTRY" + i;
rowValues.set(i, columnValues);
System.out.println(rowValues.get(i)[0]); // last element in each iteration
}
///////////////
// END LOOPS //
///////////////
System.out.println(rowValues.get(0)[0]); // element in 0-0 is
答案 1 :(得分:0)
您永远不会将columnValues
更改为指向新的String[]
,因此实际上rowValues
包含对同一对象的多个引用。
尝试在外部columnValues
循环内移动for
的定义,以便为每次迭代创建一个新的String[]
。
答案 2 :(得分:0)
这里的数据包含String[]
。
您只能在此处创建一个此类实例:
String[] columnValues = new String[8];
因此,您将所有值都写在同一个地方,并且您看到相同数组的3倍,因为您只是将相同数组的3倍添加到列表中。
在内循环的每个转弯处,您使用新数据覆盖此单个columnValues
数组的内容,这会影响您已放入列表中的内容,因为该列表只是多次指向该单个数组你一遍又一遍地修改。
要解决您的问题,请将创建数组的行放在外部循环中,以便为每行分配一个新数组。