我在使用for循环将元素分配给List时遇到问题。这是我遇到问题的代码部分:
private static List<String[]> modify(List<String[]> data) {
List<String[]> data2 = new ArrayList<>();
for (int i=0; i<data.size(); i++) {
String[] block = data.get(i);
// some code here to modify the contents of block
data2.add(block);
}
return data2;
}
由于某种原因,此方法返回一个List,其所有元素完全相同。我已经尝试输出List元素以查看这种情况发生的地方,并且它似乎发生在循环之外。例如,这个:
private static List<String[]> modify(List<String[]> data) {
List<String[]> data2 = new ArrayList<>();
for (int i=0; i<data.size(); i++) {
String[] block = data.get(i);
// some code here to modify the contents of block
data2.add(block);
System.out.println(Arrays.toString(data2.get(i));
}
return data2;
}
显示不同元素的列表,而这个:
private static List<String[]> modify(List<String[]> data) {
List<String[]> data2 = new ArrayList<>();
for (int i=0; i<data.size(); i++) {
String[] block = data.get(i);
// some code here to modify the contents of block
data2.add(block);
}
for (int i=0; i<data2.size(); i++) {
System.out.println(Arrays.toString(data2.get(i)));
return data2;
}
显示仅包含相同元素的列表。在我看来,元素正在被正确地添加到for循环内的List中,但最终变得相同。为什么会这样,我该如何解决?
答案 0 :(得分:1)
您应该创建一个临时字符串来进行操作,初始化String数组,然后用数据填充它,然后将其传递给data2,如下所示:
private static List<String[]> modify(List<String> data) {
List<String[]> data2 = new ArrayList<>();
for (int i=0; i<data.size(); i++) {
String tempString = data.get(i);
String[] block = new String[255];
// some code here to modify the contents of block
// actually fill block with data
block.add("modified data");
block.add("more manipulated data");
data2.add(block);
}
return data2;
}
修改强> 这应该可以解决无编译问题!
答案 1 :(得分:0)
你设法使这个代码运行似乎很奇怪。您的代码中存在明显的语法错误:
private static List<String[]> modify(List<String> data) {
...
String[] block = data.get(i);
您的block
是一个String
数组,而data.get()
返回一个字符串。在你的片段后面,大括号是无法匹配的,所以它也不应该被编译。如果你把&#39;}&#39;在System.out.println(...);
之后创建List<String>[]
类型的参数而不是List<String>
,您的代码可以正常运行。