Как правильно выровнять печать треугольника Флойда силой 2 - PullRequest
3 голосов
/ 04 ноября 2019

Как мне сместиться влево в последних 2 рядах моего выходного треугольника Флойда? Вот мой вывод:

      1 
     21 
    421 
   8421 
  168421 
 32168421 

Ожидаемый вывод:

         1 
        21 
       421 
      8421 
    168421 
  32168421 

Вот мой код:

 for(int i=0; i<=5; ++i) {

         //total of space
        int n=6-i;

         //print space
         while(n>0) {
             System.out.print(" ");
             n--;
         }

         //print number
         for(int j=i; j>=0; j--) {
             System.out.print((int)Math.pow(2, j));
         }

         System.out.println(" ");

     }

Спасибо

Ответы [ 2 ]

1 голос
/ 04 ноября 2019
    int lineLength = 8;

    for (int i = 0; i <= 5; ++i) {

        //print number
        StringBuilder sb = new StringBuilder();
        for (int j = i; j >= 0; j--) {
            sb.append((int) Math.pow(2, j));
        }

        //print space
        for (int spaces = lineLength - sb.length(); spaces > 0; spaces--) {
            System.out.print(" ");
        }
        System.out.println(sb.toString());
    }

И более общий пример:

public static void main(String[] args) {

    int numbersToCompute = 10;
    int lineLength = floydsNumber(numbersToCompute).length();
    for (int i = 0; i <= numbersToCompute; ++i) {
        String floydsNumber = floydsNumber(i);
        for (int spaces = lineLength - floydsNumber.length(); spaces > 0; spaces--) {
            System.out.print(" ");
        }
        System.out.println(floydsNumber.toString());
    }
}

private static String floydsNumber(int i) {
    StringBuilder sb = new StringBuilder();
    for (int j = i; j >= 0; j--) {
        sb.append((int) Math.pow(2, j));
    }
    return sb.toString();
}
0 голосов
/ 04 ноября 2019
        List<String> result = new ArrayList<>();

        for(int i=0; i<=5; ++i) {
            StringBuilder sb = new StringBuilder();
            for(int j=i; j>=0; j--) {
                sb.append((int)Math.pow(2, j));
            }
            result.add(sb.toString());
        }

        // You need to find out the longgest string for the padding left calculation
        int length = result.get(result.size() - 1).length();

        result.forEach((str -> System.out.println(padLeft(str, length))));

Добавить метод до для заполнения:

public String padLeft(String inputString, int length) {
        if (inputString.length() >= length) {
            return inputString;
        }
        StringBuilder sb = new StringBuilder();
        while (sb.length() < length - inputString.length()) {
            sb.append(' ');
        }
        sb.append(inputString);

        return sb.toString();
    }
...