Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the following formatted output?

I wrote the code to get the following formatted output, but when I enter number of rows in double digits, the output format changes. Why? How can I fix this?

      1
    1 2 1
  1 2 3 2 1
1 2 3 4 3 2 1

Here is my code:

import java.util.*;
class PTri {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the no. of rows for which " +
                "triangle has to be constructed");
        int numrow = sc.nextInt();
        for (int i = 1; i <= numrow; i++) {
            for (int j = 1; j <= numrow - i; j++) {
                System.out.print("  ");
            }
            for (int k = 1; k < i * 2; k++) {
                System.out.print(Math.min(k, i * 2 - k) + " ");
            }
            System.out.println();
        }
    }
}
like image 627
Kanth Avatar asked Dec 29 '25 21:12

Kanth


2 Answers

It's because the value in double digit will change the whole architecture.The set will shift to right one place. So you can put a condition like this. I have added one extra space between numbers to improve visibility.

import java.util.*;
class PTri {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the no. of rows for which " +
                "triangle has to be constructed");
        int numrow = sc.nextInt();
        for (int i = 1; i <= numrow; i++) {
            for (int j = 1; j <= (numrow - i); j++) {
                System.out.print("    ");
            }
            for (int k = 1; k < i * 2; k++) {
                int temp = Math.min(k, i * 2 - k);

                if (temp > 9) {
                    System.out.print(temp + "  ");
                } else {
                    System.out.print(temp + "   ");
                }
            }
            System.out.println();
        }
    }
}
like image 102
Pranav Kevadiya Avatar answered Dec 31 '25 09:12

Pranav Kevadiya


In this example I counted the digits, and for every digit I add an extra space. The output of the value is formatted with leading zeros (digit-count).

public static void main(final String[] args) {
    final Scanner sc = new Scanner(System.in);
    System.out.println("Enter the no. of rows for which " +
            "triangle has to be constructed");
    final int numrow = 100;// sc.nextInt();

    final int digits = (int) Math.log10(numrow) + 1;

    for (int i = 1; i <= numrow; i++) {
        for (int j = 1; j <= numrow - i; j++) {
            System.out.print(" ");
            for (int l = 0; l < digits; l++) {
                System.out.print(" ");
            }
        }
        for (int k = 1; k < i * 2; k++) {
            final int value = Math.min(k, i * 2 - k);
            System.out.print(String.format("%0" + digits + "d ", value));
        }
        System.out.println();
    }
}
like image 25
semTex Avatar answered Dec 31 '25 10:12

semTex