【问题标题】:Height of Java Diamond AsteriskJava 钻石星号的高度
【发布时间】:2016-02-03 05:05:08
【问题描述】:

我怎样才能让这段代码正确显示高度?所以如果菱形星号的宽度为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");
    }
}

【问题讨论】:

  • 直接指出问题就好了
  • 这是否意味着我做得正确,或者我应该突出显示我无法在我的代码中得到的部分? @SSH
  • 输入 3 和 5 后的输出是什么样子的?
  • @Alexander 我的输出是一个基本的菱形,高度函数还没有使用,这就是我需要帮助的地方。使其中的逻辑。
  • 好的,让我从一个关于制作钻石的任务中挖掘一些旧代码。

标签: java for-loop height width


【解决方案1】:

在解决这种类型的逻辑时,您必须始终查看您知道永远不会改变的事情。在这种情况下,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();
    }
}

【讨论】:

  • 我还是一头雾水。我在顶部、底部和中间部分填充什么
  • @Armdev 其他用于打印星号的 for 循环。这些 for 循环用于处理每一行以“跟踪”我们必须打印多少行(这是高度限制)。
  • 你能给我代码吗?我的大脑现在真的是一片空白。还是使用我的部分代码来实现?
  • @Armdev 我没有忘记你。
【解决方案2】:

您可以计算高度和宽度之间的差异,并在 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");
}

【讨论】:

    猜你喜欢
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多