Java 数字金字塔

Java Number Pyramid

我想创建一个这样的数字金字塔,

      7
    5 6 5
  3 4 5 4 3 
1 2 3 4 3 2 1

但我无法创建它。我粘贴了我的代码,它的输出是这样的,

            7
        5 6 7 6 5
    3 4 5 6 7 6 5 4 3
1 2 3 4 5 6 7 6 5 4 3 2 1

我应该怎么做才能解决这个问题?我的代码是完全错误还是稍作改动就足够了?

import java.util.Scanner;
public class App {
    public static void main(String[] args){

        Scanner myScan = new Scanner(System.in);
        System.out.print("Enter mountain width: ");
        int width = myScan.nextInt();
        System.out.println("Here is your mountain ");
        myScan.close();
        System.out.println();

        for (int i = width; i >= 1; i=i-2)
        {
            for (int j = 1; j <= i*2; j++)
            {
                System.out.print(" ");
            }
 
            for (int j = i; j <= width; j++)          
            {
                System.out.print(j+" ");
            }
 
            for (int j = width-1; j >= i; j--)
            {               
                System.out.print(j+" ");            
            }

            System.out.println();
        }

    }
}

你可以计算行索引,然后很容易得到数字范围

for (int i = width; i >= 1; i -= 2) {
    int row_idx = (width - i) / 2;
    for (int j = 1; j <= i; j++) {
        System.out.print(" ");
    }
    for (int j = i; j <= i + row_idx; j++) {
        System.out.print(j + " ");
    }
    for (int j = i - 1 + row_idx; j >= i; j--) {
        System.out.print(j + " ");
    }
    System.out.println();
}

你只要算一下等级就可以了。您可以通过添加额外的计数变量来做到这一点。让我们举个例子:

  1. 在第 0 级,您只需打印 7 并且计数为 0。
  2. 在级别 1 上计数为 1。因此您只需要打印 i 的当前值 + 左右计数的数量。但是因为我们在左边多了 1 个,所以右边的值会少一些。

………… 代码会这样继续下去。

查看代码以获得更好的解释:

public static void main( String[] args ) {

        Scanner myScan = new Scanner(System.in);

        System.out.print("Enter mountain width: ");

        int width = myScan.nextInt();

        System.out.println("Here is your mountain ");

        myScan.close();

        System.out.println();

        int counter = 0;

        for (int i = width; i >= 1; i = i - 2) {

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

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

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

            System.out.println();

            counter++;
        }
    }

我只是对您的代码做了一点改动,使其能够正常工作。伙计,干杯!