如何在Java中输出缩进字符串?

How to output indenting strings in Java?

我正在做河内塔,我想输出所有移动 (2^n-1),并增加前导 spaces。 例如

Moving top disk from....
    Moving top disk from....
        Moving top disk from....
            Moving top disk from....

...等等。

我试图创建一个单独的“space”方法,但我不确定如何将其实现到程序中

现在这是我代码的一部分。

public static void towersOfHanoi(int disk, int source, int dest){
        int temp;
        if (disk == 1) {
            moveDisk(source,dest);
        }
        else {
            temp = 6 - source - dest;
            towersOfHanoi(disk-1,source,temp);
            moveDisk(source,dest);
            towersOfHanoi(disk-1,temp,dest);
        }
    }
    
    private static void moveDisk(int source, int dest) {
        System.out.println("Moving top disk from " + source + " to " + dest);
    }

您可以 import org.apache.commons.lang3.StringUtils 通过 Apache Commons Framework.

然后使用:

StringUtils.leftPad("123456", tab_length * 2) 
//or however you want to format the left space

这是最方便的方法,否则,您可以使用 StringBuilder 或类似的东西编写自定义 leftPad 方法。

我使用了字符串生成器来实现缩进。缩进数由 class“缩进”的静态变量定义,每次调用 moveDisk 方法时都会使用 for 循环。

public class Test {

    static Integer indents = -2;
    static String indent = "   ";
    public static void towersOfHanoi(int disk, int source, int dest){
        int temp;
        if (disk == 1) {
            moveDisk(source,dest);
        }
        else {
            temp = 6 - source - dest;
            towersOfHanoi(disk-1,source,temp);
            moveDisk(source,dest);
            towersOfHanoi(disk-1,temp,dest);
        }
    }

    private static void moveDisk(int source, int dest) {

        indents = indents + 1;

        StringBuilder sb = new StringBuilder();

        for(int i = 0; i<=indents; i++){
            sb.append(indent);
        }
        sb.append("Moving top disk from ");
        sb.append(source);
        sb.append( " to ");
        sb.append( dest);

        System.out.println(sb.toString());
    }

    public static void main(String[] args) {

        moveDisk(10, 10);
        moveDisk(1, 10);
        moveDisk(20, 10);

    }
}

结果:

Moving top disk from 10 to 10
   Moving top disk from 1 to 10
      Moving top disk from 20 to 10