Java 使用嵌套的for循环生成一个加倍然后一半的棱锥体

Java 使用嵌套的for循环生成一个加倍然后一半的棱锥体,java,loops,for-loop,nested,Java,Loops,For Loop,Nested,我需要使用嵌套for循环来制作这个金字塔, 到目前为止,我只知道我需要三个for循环。 我知道for循环是如何工作的,并且对java的基础知识有很好的掌握,但是我对它是如何工作的一无所知 这应该行得通!请注意,每行总共计算2*i+1个元素,其中i是您当前的行号 1 1 2 1 1 2 4 2 1 1 2 4 8 4 2 1 1 2 4 8 16 8 4 2 1

我需要使用嵌套for循环来制作这个金字塔, 到目前为止,我只知道我需要三个for循环。
我知道for循环是如何工作的,并且对java的基础知识有很好的掌握,但是我对它是如何工作的一无所知

这应该行得通!请注意,每行总共计算2*i+1个元素,其中i是您当前的行号

                 1
               1 2 1
             1 2 4 2 1
           1 2 4 8 4 2 1
         1 2 4 8 16 8 4 2 1
      1 2 4 8 16 32 16 8 4 2 1
   1 2 4 8 16 32 64 32 16 8 4 2 1 
1 2 4 8 16 32 64 128 64 32 16 8 4 2 1 
类表意符
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
int-lim=5;
int spaceLim=lim*2;
对于(inti=0;i

工作解决方案的演示就在这里-

刚刚写了这个,没有调试,但它应该会产生这个金字塔:

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {

        int lim = 5;
        int spaceLim = lim*2;

        for (int i=0; i < lim; i++){ // Number of rows is the key here (pow 2)

            String s = "%" + spaceLim + "s";
            System.out.printf(s, "");
            if (i == 0){
                System.out.print(1);
            }
            else{
            for (int j=0; j<i; j++) {
                System.out.printf("%1.0f ",(Math.pow(2.0, (double)(j))));
            }

            for (int j=i; j>=0; j--){
                System.out.printf("%1.0f ", (Math.pow(2.0, (double)(j))));
            }

            }
            System.out.println();
            spaceLim -= 2;
        }
    }
}
int-pyramidHeight=4;
对于(int i=0;i<1;i++){
对于(int j=1;j棱锥体高度+i){
系统输出打印(“”);
}
否则{
System.out.print(i-Math.abs(pyramidHeight-j));
}
系统输出打印(“”);
}
System.out.println();

}
做中间一列应该很容易。将每行的一部分放在中间一列也是如此。一旦你做到了这一点,你只需要镜像数字就可以得到左半边,你就完成了。如果您首先在数组中内部构建每一行,并且只有在拥有所有数字的情况下才打印它,那么这可能是最简单的。使用–1或其他“不可能”值来标记空字段。请尝试一些方法,然后向我们展示!我想你实际上需要四个for循环。我的实验室合作伙伴和我尝试了类似的方法,但在复制中间数字时遇到了同样的问题。除此之外,这很好,但我似乎无法让它在每一个整数后不打印.0,也无法不打印中间数两次。@RobbieTraverseParmentier它不打印任何重复的中间数。事实上,我很喜欢moloney55的解决方案,因为他只对循环使用了1,但上面的算法有O(N)缩放,即总共需要处理N行来获得金字塔。这比你知道的要有用得多。我想知道实现一个if语句来切换操作符是否是这个程序的关键,但在与我的实验室合作伙伴交谈后,我决定不这样做。谢谢
      0       
    0 1 0    
  0 1 2 1 0  
0 1 2 3 2 1 0