当前位置: 代码迷 >> java >> 在Java中打印*的金字塔
  详细解决方案

在Java中打印*的金字塔

热度:76   发布时间:2023-07-26 14:03:08.0

我想知道你是否可以帮助我。 我正在尝试在java中编写一个嵌套的for循环,它显示一个看起来像的金字塔三角形

___________*#
__________*_*#
_________*___*#
________*_____*#
_______*_______*#
______*_________*#
_____*___________*#
____*_____________*#
___*_______________*#
__*_________________*#
_*___________________*#
***********************#

这是我到目前为止:

class Triagle {
    public static void printTriagle(int n) {
        for (int i = 0; i < n; i++) {
            for (int j = n - i; j > 1; j--) {
                System.out.print(" ");
            }

            for (int j = 0; j <= i; j++) {
                // printing stars
                System.out.print("* ");
            }

            System.out.println();
        }
    }

    public static void main(String[] args) {
        printTriagle(12);//I want to set the triangle to be height of 12
    }
 }

我的结果不等于预期的输出:

___________*#
__________*_*#
_________*_*_*#
________*_*_*_*#
_______*_*_*_*_*#
______*_*_*_*_*_*#
_____*_*_*_*_*_*_*#
____*_*_*_*_*_*_*_*#
___*_*_*_*_*_*_*_*_*#
__*_*_*_*_*_*_*_*_*_*#
_*_*_*_*_*_*_*_*_*_*_*#
*_*_*_*_*_*_*_*_*_*_*_*#

我已更新您的代码并添加了注释,以便您可以理解。 请参阅以下代码:

public static void printTriagle(int n) {
    for (int i = 0; i < n; i++) {

        for (int j = n - i; j > 1; j--) {
            System.out.print("_");
        }
        String s = "_";
        if (i + 1 >= n) // check if it is the last line
            s = "*"; // change to print * instead of _

        for (int j = 0; j <= i; j++) {
            // printing stars
            if (j == i)
                System.out.print("*#"); // check if the last print of the line
            else if (j == 0)
                System.out.print("*" + s); // check if the first print of the line
            else
                System.out.print(s + s);
        }

        System.out.println();
    }
}

结果:

___________*#
__________*_*#
_________*___*#
________*_____*#
_______*_______*#
______*_________*#
_____*___________*#
____*_____________*#
___*_______________*#
__*_________________*#
_*___________________*#
***********************#

你的问题在这里:

for (int j=0; j<=i; j++){
     // printing stars
     System.out.print("* ");
}

在这里,它为0和i之间的每个数字打印一个星形,但是如果它正好是0或i,它只应该打印一个星形。

尝试这样的事情:

for (int j=0; j<=i; j++){
     if ( i == n ) {
       System.out.print("* ");
     } else {
       System.out.print(j == 0 || j == i ? "* " : "  ");
     }
}

编辑:您可能仍需要调整代码以正确打印底线,以防该行必须是全明星

试试这个

public static void printTriagle(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = n - i; j > 1; j--) {
            System.out.print(" ");
        }

        for (int j = 0; j <= i; j++) {
            // printing stars
            if(i == (n-1)){
                System.out.print("**");
            }
            else{
                System.out.print((j == 0 || j == i) ? "* " : " ");
            }

        }
        System.out.println();
    }
}

这是你需要做的:

public static void printTriagle(int n) {
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < 2*n; j++) {
            if(i == n-1) {
                System.out.print((j != 2*n-1) ? "*" : "#");
            }
            else {
                if(i+j == n-1) {
                    if(i == 0) {
                        System.out.print("*#");
                        break;
                    }
                    else {
                        System.out.print("*");
                    }
                }
                else if(j-i == n-1) {
                    System.out.print("*#"); break;
                }
                else {
                    System.out.print("_");
                }
            }
        }
        System.out.println();
    }
  相关解决方案