我在java中有数组数组,现在我想以线性方式打印这个数组。那么如何遍历呢? 例如:
[1,[4,6],[4,9,1,[34,[56,32,45,87]],56,7],98]
答案 0 :(得分:2)
一个简单的递归就可以解决问题:
public static void main(String[] args) {
// create the array: [1, [2, 3], 4]
Object[] arr = new Object[3];
arr[0] = 1;
arr[1] = new Object[2];
arr[2] = 4;
((Object[])arr[1])[0] = 2;
((Object[])arr[1])[1] = 3;
// print
printArr(arr);
}
// print the array in order - recursively
static void printArr(Object[] arr) {
for (Object i : arr) {
if (i instanceof Integer) {
System.out.print(i + " ");
}
else {
printArr((Object[])i);
}
}
}
<强>输出强>
1 2 3 4
答案 1 :(得分:1)
快速解决方案是Arrays.deepToString(array)
。
答案 2 :(得分:1)
不是一个完美的解决方案:
您需要一个数据结构(树)来保存这些数据:
public class ArrayHolder {
private boolean isLeaf;
private int number;
private List<ArrayHolder> nodes;
public ArrayHolder(int number) {
isLeaf = true;
this.number = number;
}
public ArrayHolder() {
isLeaf = false;
nodes = new ArrayList<ArrayHolder>();
}
public boolean isLeaf() {
return isLeaf;
}
public void addNode(ArrayHolder node) {
nodes.add(node);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if (isLeaf) {
sb.append(number + ",");
} else {
sb.append("[ ");
for (ArrayHolder arrayHolder : nodes) {
sb.append(arrayHolder.toString());
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
sb.append(",");
}
return sb.toString();
}
}
测试用例:
// [1,[4,6],[4,[34],56,7],98]
ArrayHolder[] elements = new ArrayHolder[8];
elements[0] = new ArrayHolder(1);
elements[1] = new ArrayHolder(4);
elements[2] = new ArrayHolder(6);
elements[3] = new ArrayHolder(4);
elements[4] = new ArrayHolder(34);
elements[5] = new ArrayHolder(56);
elements[6] = new ArrayHolder(7);
elements[7] = new ArrayHolder(98);
ArrayHolder root = new ArrayHolder();
root.addNode(elements[0]);
ArrayHolder arr46 = new ArrayHolder();
arr46.addNode(elements[1]);
arr46.addNode(elements[2]);
root.addNode(arr46);
ArrayHolder arr434567 = new ArrayHolder();
arr434567.addNode(new ArrayHolder(4));
ArrayHolder arr34 = new ArrayHolder();
arr34.addNode(new ArrayHolder(34));
arr434567.addNode(arr34);
arr434567.addNode(new ArrayHolder(56));
arr434567.addNode(new ArrayHolder(7));
root.addNode(arr434567);
root.addNode(new ArrayHolder(98));
System.out.println(root);