使用升序和降序数字在Java中打印居中金字塔

时间:2012-02-26 16:54:21

标签: java loops for-loop

Link to what I want and what I have

我试图打印一个2 ^ n的居中金字塔,其中2 ^ row#是每行的居中数字,左边的数字是上升到2 ^ row#,数字是右边的数字正在下降。我对Java很陌生,我花了很长时间才得到这么多。但现在我被卡住了。最后一行是唯一正确的行。我不知道怎么做,所以64不打印在每一行。有人可以给我一个提示吗?

我已经尝试搞乱每一个参数 - 从第一行开始最后一个循环,最后一行,改变启动功率等等,我只是无法弄明白。

感谢您的任何提示!

public static void main (String [] args){

    int row;
    for (row = 0; row <= 8; row++){ // Prints each row 
        for (int spaces = 8; spaces >= row; spaces --){ // Prints out spaces to left
            System.out.print("  ");
        }

        int power1 = 0; // Power that 2 is being raised to
        for (int i = 0; i < row; i++) { // Prints left side of the pyramid 
            System.out.print(" " + (int)Math.pow(2, power1));
            power1++;
        }

        int power2 = 7;
        for (int i = 1; i < row; i++) { // Prints right side of the pyramid 
            power2--;
            System.out.print(" " + (int)Math.pow(2, power2));       
        }

        System.out.println();
    }       
  }
}

3 个答案:

答案 0 :(得分:2)

你的问题在于你总是在2 ^ 7处开始金字塔的右侧,因为你硬编码power2 = 7 decleration和赋值。如果您在当前行 - 1处启动此值,则会获得您正在寻找的行为。代码:

public static void main (String [] args){

int row;
for (row = 0; row <= 8; row++){ // Prints each row 
    for (int spaces = 8; spaces >= row; spaces --){ // Prints out spaces to left
        System.out.print("  ");
    }

    int power1 = 0; // Power that 2 is being raised to
    for (int i = 0; i < row; i++) { // Prints left side of the pyramid 
        System.out.print(" " + (int)Math.pow(2, power1));
        power1++;
    }

    int power2 = row - 1;
    for (int i = 1; i < row; i++) { // Prints right side of the pyramid 
        power2--;
        System.out.print(" " + (int)Math.pow(2, power2));       
    }

    System.out.println();
}

答案 1 :(得分:1)

这部分不对。

        int power2 = 7;
    for (int i = 1; i < row; i++) { // Prints right side of the pyramid 
        power2--;
        System.out.print(" " + (int)Math.pow(2, power2));       
    }

在第2行,你得到power2 = 6所以你显示2 ^ 6 = 64。

你应该做一些像

这样的事情
        int power2 = power1;  
    for (int i = 1; i < row; i++) { // Prints right side of the pyramid 
        power2--;
        System.out.print(" " + (int)Math.pow(2, power2));       
    }

答案 2 :(得分:0)

您正在为power2分配常量,而不是依赖于行的值。你能试试吗?

int power2 = row-1;