在彼此下方打印金字塔图案n次

时间:2019-02-19 18:41:13

标签: java for-loop

我知道如何打印金字塔图案,但是我想将它们彼此底下打印n次。我试图用for循环解决它,但是输出不是我想要的。第一个金字塔模式是好的,但其他金字塔模式是错误的。尝试使用三角形,可以提供正确的输出。两种模式有什么区别?该程序是用Java

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int height;
        int stars =1;
        int level;
        System.out.println("Pyramid pattern.");
        System.out.print("Please give the height: ");
        height = sc.nextInt();
        System.out.print("How many times to print: ");
        level = sc.nextInt();
        int szelesseg = magassag - 1;
        if (magassag <= 0) {
            System.out.println("A magasságnak pozitívnak kell lennie.");
        }
        else
        {
            for (int h = 0; h < szintek; h++) {
            for (int i = 0; i < magassag; i++){
            for (int j = szelesseg; j>i; j-- )
            {
                System.out.print(" ");
            }
            for (int k = 0; k < stars; k++){
                System.out.print("*");
            }
            stars += 2;
            System.out.println();
            }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题似乎是for循环中打印的每一行的星数都增加了2,但是它从未重置,因此它开始的第二个三角形要比1大得多。最简单的解决方法是在最外面的for循环的开始处将其设置为1。这是我用的:

        for (int h = 0; h < level; h++) {
            stars = 1;    
            for (int i = 0; i < height; i++){
                for (int j = szelesseg; j>i; j-- ) {
                    System.out.print(" ");
                }
                for (int k = 0; k < stars; k++){
                    System.out.print("*");
                }
                stars += 2;
                System.out.println();
           }
       }

哪个输出:

  *
 ***
*****
  *
 ***
*****
  *
 ***
*****

我将一些变量名翻译成英语,因为它们似乎是用英语声明的,但用匈牙利语引用(也许只是我的浏览器试图翻译)。我也将值硬编码为3,因为我不想在在线编译器上使用扫描仪。希望这会有所帮助!

编辑:如果号码无效,则帮助停止程序/ -1

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int height;
    int stars =1;
    int level;
    System.out.println("Pyramid pattern.");
    System.out.print("Please give the height: ");
    height = sc.nextInt();
    if (height > 0) {
        System.out.print("How many times to print: ");
        level = sc.nextInt();
        int szelesseg = magassag - 1;
    //Rest of handling code goes here
    }
    else {
        System.out.println("A magasságnak pozitívnak kell lennie.");
    }

在这里,在接收到输入后立即进行-1的检查。其余逻辑放在成功的情况下,这意味着只有在输入大于0时才会发生。在其他情况下,将显示错误消息。这意味着它将在第一个输入失败或出现另一个错误时立即打印。