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

使用升序和降序数字在Java中打印居中的金字塔,java,loops,for-loop,Java,Loops,For Loop,我试着打印一个以2^n为中心的金字塔,其中2^row#是每行的中心数字,左边的数字升序为2^row#,右边的数字降序。我对Java非常陌生,花了很长时间才了解到这一点。但现在我被卡住了。最后一行是唯一正确的行。我不知道如何使它不是每行都打印64。谁能给我一个提示吗 我试过搞乱每一个参数——用第一行开始最后一个循环,最后一行,改变启动功率等等,但我就是搞不懂 谢谢你的提示 public static void main (String [] args){ int row; for

我试着打印一个以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();
    }       
  }
}
publicstaticvoidmain(字符串[]args){
int行;
对于(row=0;row=row;spaces--){//打印出左侧的空格
系统输出打印(“”);
}
int power1=0;//将2提升到的功率
对于(int i=0;i
您将常数赋值给power2,而不是依赖于行的值。你能试试这个吗


int power2=第1行

您的问题在于,您总是从金字塔的右侧2^7开始,因为您硬编码了power2=7偏差和赋值。如果改为在当前行-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();
}
publicstaticvoidmain(字符串[]args){
int行;
对于(row=0;row=row;spaces--){//打印出左侧的空格
系统输出打印(“”);
}
int power1=0;//将2提升到的功率
对于(int i=0;i
这部分不正确

        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));       
    }
intpower2=7;
对于(inti=1;i
在第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));       
    }
intpower2=power1;
对于(inti=1;i
我会把你的问题分开:首先解决数学问题,然后再进行漂亮的打印。尝试用不同的值初始化
power2
,比如
power1-1