【问题标题】:Java - Printing a maze using a formatted StringbuilderJava - 使用格式化的 Stringbuilder 打印迷宫
【发布时间】:2019-11-20 08:16:08
【问题描述】:

我想创建一个带有 StringBuilder 的迷宫,它必须具有特定的格式才能匹配特定的输出。我正在使用以下代码来执行此操作,但它会削减输出的第一行。 给定的示例是一个如下所示的单个字符串:

final String EXAMPLE01 = "##############           ## ############ # #       ## # # ##### ## #   #   # ## ### # # # ##   # # # # #### # # # # ##   #     # #### ####### ##           ##############";

这是格式化字符串的代码:

private void init(Maze z) {
    /**
     * initializes de.uniwue.gdp.labyrinth.Explorer
     */
    maze = z; //set maze
    pov = POV.SOUTH; //set default point of view to South
    idx = maze.width() + 1; //set default index to (1,1) || starting index

    str = new StringBuilder(); //init empty StringBuilder
    for (int i = 0; i < maze.width() * maze.height(); ++i) {

        if  (str.length() != 0 && (str.length() % maze.width() == 0)){ //use modulo to find linebreaks
            str.append("\n");
        }
        str.append('#'); //set all fields to not explored or wall

    }
    str.setCharAt(idx, ' '); //set starting field to explored
    updateDirections(); //init numMarks & validDirections

}

输出如下所示:

但应该是这样的:

非常感谢您!

【问题讨论】:

    标签: printing format stringbuilder modulo maze


    【解决方案1】:

    在这一行:

    for (int i = 0; i

    尝试 i++ 而不是 ++i。

    'i' 之前的'++' 在评估之前增加它 '++' after 'i' 在评估之后增加它。在这种情况下,循环可能从 1 而不是 0 开始。

    【讨论】:

    • 这个循环中没有使用增量表达式的返回值,所以将++i改为i++对逻辑没有影响。在这两种情况下,循环都从 0 开始。
    • 是的,我认为问题与模运算有关。看起来它正在添加新行两次。我确实让它从字符串长度 >0 的地方开始。但这也不起作用。
    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多