有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java金字塔输出

大家好,我正在尝试创建一个金字塔程序,要求用户输入1-15之间的整数。当我进入1-9时,它会形成一个完美的金字塔。但如果我输入10-15,中间的线就会向右移动,每个数字经过10就不再形成金字塔

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.println("Enter a number between 1-15");
    int dig = input.nextInt();
    for (int i = 1; i <= dig; i++) {

        for (int j = 1; j <= dig - i; j++) {
            System.out.print("   ");
        }

        for (int k = i; k >= 1; k--) {
            System.out.print("  " + k);
        }

        for (int k = 2; k <= i; k++) {
            System.out.print("  " + k);
        }
        System.out.println();
    }
}

}

谢谢你的帮助


共 (3) 个答案

  1. # 1 楼答案

    给你:)

    你必须计算最大数字的位数,然后在开始时创建更大的空格,但当两位数出现时,开始将它们变小

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number between 1-15");
        int dig = input.nextInt();
        int length = ("" + dig).length();
        for (int i = 1; i <= dig; i++) {
    
            for (int j = 1; j <= dig - i; j++) {
                for (int f = 0; f < length; f++) {
                    System.out.print("  ");
                }
                System.out.print(" ");
            }
    
            for (int k = i; k >= 1; k ) {
                for (int j = 0; j < length; j++) {
                    System.out.print(" ");
                }
                for (int j = 0; j < length - (""+k).length() + 1; j++) {
                    System.out.print(" ");
                }
                System.out.print(k);
            }
    
            for (int k = 2; k <= i; k++) {
                for (int j = 0; j < length; j++) {
                    System.out.print(" ");
                }
                for (int j = 0; j < length - (""+k).length() + 1; j++) {
                    System.out.print(" ");
                }
                System.out.print(k);
            }
            System.out.println();
        }
    }
    

    15年的产出:

    Enter a number between 1-15
    15
                                                                              1
                                                                         2    1    2
                                                                    3    2    1    2    3
                                                               4    3    2    1    2    3    4
                                                          5    4    3    2    1    2    3    4    5
                                                     6    5    4    3    2    1    2    3    4    5    6
                                                7    6    5    4    3    2    1    2    3    4    5    6    7
                                           8    7    6    5    4    3    2    1    2    3    4    5    6    7    8
                                      9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9
                                10    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9   10
                           11   10    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9   10   11
                      12   11   10    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9   10   11   12
                 13   12   11   10    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9   10   11   12   13
            14   13   12   11   10    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9   10   11   12   13   14
       15   14   13   12   11   10    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15
    
  2. # 2 楼答案

    您仍然可以使用代码获得相同的结果,但不要使用print方法,而是使用以格式说明符作为第一个参数的printf方法

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number between 1-15");
        int dig = input.nextInt();
        for (int i = 1; i <= dig; i++) {
            for (int j = 1; j <= dig - i; j++) {
                System.out.printf("%4s", " ");
            }
            for (int k = i; k >= 1; k ) {
                System.out.printf("%4d", k);
            }
            for (int k = 2; k <= i; k++) {
                System.out.printf("%4d", k);
            }
            System.out.println();
        }
    }
    

    在这里,通过指定4个字符的固定宽度,打印出来的每个整数都会被额外的空格填充,因此可以补偿一个或两个字符长的整数

  3. # 3 楼答案

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.print("Number of rows to print Pyramid: ");
        int rows= scanner.nextInt();
        scanner.close();
        
        
        String star="*";
        
        
        System.out.println("========================================");
        
        for (int i = 0; i < rows; i++) {
            for (int j =0; j<=rows-i ; j++) {
    
                System.out.print(" ");
            }
            
            for(int k=0; k<=i; k++) {
                System.out.print(star + " ");
                
            }
            System.out.println();
        }
    }
    

    5年的产出:

        * 
       * * 
      * * * 
     * * * * 
    * * * * *