【问题标题】:Multidimensional array to indented list多维数组到缩进列表
【发布时间】:2020-10-17 04:47:06
【问题描述】:

我的任务是编写一个递归打印示例数组内容的方法。我设法做到了,并在技术上完成了它。

但我想知道是否可以将代码打印得更“漂亮”?

public class multirecursion {
    static String[][][] example = {
        {
            {"1", "2", "3", "4"},
            {"A", "B", "C"},
            {"5", "6", "7", "8"}
        },
        {
            {"01", "02", "03", "04"},
            {"11", "12", "14"}
        }
    };

    static void printRecursive(Object[] objs) {
        for (Object obj : objs) {
            if (obj.getClass().isArray()) {
                printRecursive((Object[]) obj);
            } else {
                System.out.println(obj.toString().trim());
            }
        }
    }

    static void printIndented(Object[] objs, String indent) {
    }

    public static void main(String[] args) {
        printRecursive(example);
    }
}

我知道我的 printIndented 方法可能需要另一个参数,但我不知道如何从那里开始。我很感激任何建议。

好的,我解决了。以下是其他感兴趣的人:

static void printInXml(Object[] objs, String indent) {
    for (Object obj : objs) {
        if (obj.getClass().isArray()) {
            System.out.println(indent + "<container>");
            printInXml((Object[]) obj, indent + "   ");
            System.out.println(indent + "</container>");
        } else {
            System.out.println(indent + "<string>"
                    + obj.toString().trim() + "</string>");
        }
    }
}

public static void main(String[] args) {
    printInXml(example, "");
}

这就是它的样子:

<container>
    <container>
        <string>1</string>
        <string>2</string>
        <string>3</string>
        <string>4</string>
    </container>
    <container>
        <string>A</string>
        <string>B</string>
        <string>C</string>
    </container>
    <container>
        <string>5</string>
        <string>6</string>
        <string>7</string>
        <string>8</string>
    </container>
</container>
<container>
    <container>
        <string>01</string>
        <string>02</string>
        <string>03</string>
        <string>04</string>
    </container>
    <container>
        <string>11</string>
        <string>12</string>
        <string>14</string>
    </container>
</container>

【问题讨论】:

  • edit 您的问题并发布您希望输出的外观。
  • 在 Eclipse 中,格式化默认代码的命令是通过“CTRL + SHIFT + F”。但是您的代码包含许多错误,例如未完成类和函数,并且逗号过多会导致编译和格式化代码出现问题。
  • 我没有意识到它切断了最后几行。谢谢!
  • 您应该回答自己的问题,而不是编辑您的问题并将答案合并到其中。请参阅Can I answer my own question?。顺便说一句,如果您在最初的问题中提到您希望输出为 XML 字符串,那将为我(我相信很多其他人)提供足够的信息,以便为您提供相关答案。参考How do I ask a good question?

标签: java eclipse multidimensional-array indentation


【解决方案1】:

既然你说这是一个任务,我不会去为你解决它,我只是给你一个建议printIndentedRecursive(Object[] objs, String indent,Integer RecursionLevel)

从这里应该很明显了。

【讨论】:

  • 这对我来说并不是很明显。我不明白需要第二个参数缩进(我之前提到过),但不需要第三个。
  • 第三个需要知道你想要缩进多少取决于嵌套的深度。
【解决方案2】:

你可以按如下方式处理这个数组:

String[][][] arr3d = {
        {{"1", "2", "3", "4"},
                {"A", "B", "C"},
                {"5", "6", "7", "8"}},
        {{"01", "02", "03", "04"},
                {"11", "12", "14"}}};
String result = Arrays.stream(arr3d)
        .map(arr2d -> Arrays.stream(arr2d)
                .map(arr1d -> Arrays.stream(arr1d)
                        .collect(Collectors.joining(
                                "</string>\n\t\t<string>",
                                "\t\t<string>",
                                "</string>")))
                .collect(Collectors.joining(
                        "\n\t</container>\n\t<container>\n",
                        "\t<container>\n",
                        "\n\t</container>")))
        .collect(Collectors.joining(
                "\n</container>\n<container>\n",
                "<container>\n",
                "\n</container>"));
// output
System.out.println(result);
<container>
    <container>
        <string>1</string>
        <string>2</string>
        <string>3</string>
        <string>4</string>
    </container>
    <container>
        <string>A</string>
        <string>B</string>
        <string>C</string>
    </container>
    <container>
        <string>5</string>
        <string>6</string>
        <string>7</string>
        <string>8</string>
    </container>
</container>
<container>
    <container>
        <string>01</string>
        <string>02</string>
        <string>03</string>
        <string>04</string>
    </container>
    <container>
        <string>11</string>
        <string>12</string>
        <string>14</string>
    </container>
</container>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2013-05-17
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多