Java 菱形星号的高度

Height of Java Diamond Asterisk

如何让这段代码正确显示高度?因此,如果菱形星号的宽度为 3,高度为 5,则菱形将如下所示。

     *
    ***
    ***
    ***
     *

它只是在中间增加了多余的高度。到目前为止,这是我的代码。它可以很好地处理宽度。

public static void main(String[] args) {
    int width, height, heightT;
    Scanner scan = new Scanner(System.in);

    while(true) {
        System.out.println("Enter width of diamond (odd number between 0-19): ");
        width = scan.nextInt();
        if (width % 2 != 0) {
            if (0 <= width && width <= 19) {
                break;
            }
        }
    }
    while(true) {
        System.out.println("Enter height of diamond (greater than or equal to width): ");
        height = scan.nextInt();
        if(height >= width) {
            heightT = height - width;
            break;
        }
    }

    for(int i = 1; i < width + 1; i += 2) {
        for(int j = 0; j < 9 - i / 2; j++)
            System.out.print(" ");

        for(int j = 0; j < i; j++)
            System.out.print("*");

        System.out.print("\n");
    }

    for(int i = width - 2; i > 0; i -= 2) {
        for(int j = 0; j < 9 - i / 2; j++)
            System.out.print(" ");

        for(int j = 0; j < i; j++)
            System.out.print("*");

        System.out.print("\n");
    }
}

解决此类逻辑时,您必须始终关注您知道的事情永远不会改变。在这种情况下,3 事情永远不会改变:

1.第一行。 始终等于一个星号。

2。中间线。 始终等于星号中的宽度。

3。最后一行。 始终等于一个星号。

现在,将钻石从中间一排一分为二。请注意 总高度将始终是顶部(或底部)的高度乘以 2 加 1(中间行)。你得到的东西比这样少:

    for(int i = 0; ((i*2)+1) <= height; i++){
        //Print top
    }

    // Print middle row outside of loops or inside if you must.

    for(int i = 0; ((i*2)+1) <= height; i++){
        //Print bottom.
    } 

编辑: 这仅适用于高度大于或等于宽度的钻石。

编辑: 此代码解决了您的问题(给定的高度大于或等于宽度)。但是,它 无法正确处理 width = 0width = 1。我相信这对您来说已经足够简单了。

public static void main(String[] args) {
    int height = 9, width = 9;
    int spaces = (width - 1) / 2, asterisks = 1;



    for(int i = 0;((i*2)) < height; i++){
        for(int ii = 0;ii < spaces;ii++){
           System.out.print(" ");  
        }
        for(int ii = 0;ii < asterisks;ii++){
           System.out.print("*");
        }
    spaces--;
    if(asterisks < width)asterisks += 2;
    System.out.println();
    }

    spaces = 0;

    for(int i = 0; ((i*2)+1) < height; i++){
        if(width < height){
            for(int ii = 0;ii < spaces;ii++){
                System.out.print(" ");
            }
            for(int ii = 0;ii < asterisks;ii++){
               System.out.print("*");
            }
        }else{
            for(int ii = 0;ii < (spaces + 1);ii++){
                System.out.print(" ");
            }
            for(int ii = 0;ii < (asterisks - 2);ii++){
               System.out.print("*");
            }
        }
    spaces++;
    asterisks -= 2;
    System.out.println();
    }
}

您可以计算高度和宽度之间的差异,并在 while 循环中重用您的逻辑。

for(int i = 1; i < width + 1; i += 2) {
    for(int j = 0; j < 9 - i / 2; j++)

        System.out.print(" ");

    for(int j = 0; j < i; j++)
        System.out.print("*");

    System.out.print("\n");
}
int dif = height-width;
 while(dif !=0){
 for(int i = width; i < width + 1; i += 2) {
    for(int j = 0; j < 9 - i / 2; j++)

        System.out.print(" ");

    for(int j = 0; j < i; j++)
        System.out.print("*");

    System.out.print("\n");
}
 dif--;
 }
for(int i = width - 2; i > 0; i -= 2) {
    for(int j = 0; j < 9 - i / 2; j++)
        System.out.print(" ");

    for(int j = 0; j < i; j++)
        System.out.print("*");

    System.out.print("\n");
}