我有以下列表:
[10, 20, [44, 55], [[777, 888]]]
我想像下面这样打印(Index.Value):
0.10
1.20
2.0.44
2.1.55
3.0.0.777
3.0.1.888
public static void main(String a[]) {
List<Object> list1 = new ArrayList<>();
list1.add(10);
list1.add(20);
List<Object> list2 = new ArrayList<>();
list2.add(44);
list2.add(55);
List<Object> list3 = new ArrayList<>();
List<Object> list4 = new ArrayList<>();
list4.add(777);
list4.add(888);
list3.add(list4);
list1.add(list2);
list1.add(list3);
System.out.println(list1);
print(list1, "");
}
static void print(List<Object> list, String s) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) instanceof Integer) {
System.out.println(s + i + "." + list.get(i));
} else {
s = s + i + ".";
print((List<Object>)list.get(i),s);
}
}
}
上面的代码打印如下:
0.10
1.20
2.0.44
2.1.55
2.3.0.0.777
2.3.0.1.888
我知道我的代码有问题。我们还有其他方法来处理这个问题吗? 谁能帮帮我吗?
最佳答案
当您处理外部列表的第三个元素时,您将附加“2”。到 s
并将结果分配给 s
。
然后,当您处理外部列表的第四个元素时,您将附加“3”。到 s
并将结果分配给 s
,所以现在 s
包含“2.3”。而不是所需的“3”。应传递给递归调用。
如果您不向 s
分配任何内容,而是将 s + i + "."
传递给递归调用,则可以避免这种情况。
改变
s = s + i + ".";
print((List<Object>)list.get(i),s);
至
print((List<Object>)list.get(i),s + i + ".");
现在输出将是:
0.10
1.20
2.0.44
2.1.55
3.0.0.777
3.0.1.888
完整的更正方法:
static void print(List<Object> list, String s) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) instanceof Integer) {
System.out.println(s + i + "." + list.get(i));
} else {
print((List<Object>)list.get(i),s + i + ".");
}
}
}
关于java - java中列表打印列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59966979/