java中的第N维数组

时间:2014-07-16 06:34:02

标签: java arrays

我在java中有数组数组,现在我想以线性方式打印这个数组。那么如何遍历呢? 例如:

[1,[4,6],[4,9,1,[34,[56,32,45,87]],56,7],98]

3 个答案:

答案 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);