显示颠倒的金字塔

时间:2017-12-25 09:40:05

标签: java increment decrement

我希望有这样的输出

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

如何在左侧留出空间?

public class Exercise4_17 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the number of lines: ");
        int num = input.nextInt();
        Exercise4_17 exe = new Exercise4_17();
        exe.displayPyramid(num);
    }

    private void displayPyramid(int num) {

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

            for (int j = 2; j <= num; j++) {
                System.out.print(j + " ");
            }
            System.out.println();
            num--;
        }
    }
}

我的输出

Enter the number of lines: 5
5 4 3 2 1 2 3 4 5 
4 3 2 1 2 3 4 
3 2 1 2 3 
2 1 2 
1 

2 个答案:

答案 0 :(得分:2)

您的代码非常接近。首先,作为一种风格,我会为第二个循环使用相同的变量名称(j是jarring,只需使用k)。其次,真正的问题是,您正在修改循环中的num 。在循环之前保存初始值并将其用于空间计算。像,

final int initial = num; // <-- add this
for (int i = num; i >= 1; i--) {
    for (int space = 1; space <= initial - i; ++space) { // <-- use initial instead of num
        System.out.print("  ");
    }
    for (int k = num; k >= 1; k--) {
        System.out.print(k + " ");
    }
    for (int k = 2; k <= num; k++) { // <-- j should still work of course...
        System.out.print(k + " ");
    }
    System.out.println();
    num--;
}

答案 1 :(得分:1)

希望这有帮助。

import java.util.Scanner;
public class MainClass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //Taking noOfRows value from the user
        System.out.println("How Many Rows You Want In Your Pyramid?");
        int noOfRows = sc.nextInt();
        //Initializing rowCount with noOfRows
        int rowCount = noOfRows;
        System.out.println("Here Is Your Pyramid");
        //Implementing the logic
        for (int i = 0; i < noOfRows; i++) {
            //Printing i*2 spaces at the beginning of each row
            for (int j = 1; j <= i*2; j++) {
                System.out.print(" ");
            }
            //Printing j where j value will be from 1 to rowCount
            for (int j = rowCount; j >= 1; j--) {
                 System.out.print(j+" ");
             }
             //Printing j where j value will be from rowCount-1 to 1
             for (int j = 2; j <= rowCount; j++) {
                    System.out.print(j+" ");
            }
            System.out.println();
            //Decrementing the rowCount
            rowCount--;
        }
    }
}

ref link

输出: 你想要金字塔中有多少行? 五 这是你的金字塔

 5 4 3 2 1 2 3 4 5

    4 3 2 1 2 3 4 

     3 2 1 2 3 

       2 1 2 

         1