【问题标题】:printing numbers flipped in pyramid style打印以金字塔样式翻转的数字
【发布时间】:2014-06-05 07:30:20
【问题描述】:

我正在尝试使用 for 循环打印类似的内容:

    1 
   121 
  12321 
 1234321 
123454321 
int mid = 1;
System.out.println("    " + mid + "    ");
mid++;

for(int i = 1; i <=4; i++){

    //left spaces
    for(int x = 4; x > i; x--){
        System.out.print(" ");
    }

    //left diguts
    for(int z = 1; z <= i; z++){
        System.out.print(z);
    }

    //middle digit
    System.out.print(mid);
    mid++;

    //right diguts
    for(int b = 1; b <= i; b++){
        System.out.print(b);
    }

    //right spaces
    for(int y = 4; y > i; y--){
        System.out.print(" ");
    }

    System.out.println();
}

但我不断得到:

    1    
   121   
  12312  
 1234123 
123451234

【问题讨论】:

    标签: java string for-loop


    【解决方案1】:

    对于正确的数字,您必须以相反的顺序打印数字,因此请进行如下更改:

    //right diguts
        for(int b = 1; b <= i; b++){
            System.out.print(b);
        }
    

    改成

    //right diguts
        for(int b = i; b > 0; b--){
            System.out.print(b);
        }
    

    【讨论】:

      【解决方案2】:

      其实没有必要把1分开。您可以将其包含在通用逻辑中:

      public class Pyramid {
          public static void main(String[] args) {
              int mid = 1;        
      
              for (int i = 0; i <= 4; i++) {
      
                  // left spaces
                  for (int x = 4; x > i; x--) {
                      System.out.print(" ");
                  }
      
                  // left digits
                  for (int z = 1; z <= i; z++) {
                      System.out.print(z);
                  }
      
                  // middle digit
                  System.out.print(mid);
                  mid++;
      
                  // right digits
                  for(int b = i; b > 0; b--){
                      System.out.print(b);
                  }
      
                  // right spaces
                  for (int y = 4; y > i; y--) {
                      System.out.print(" ");
                  }
      
                  System.out.println();
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        这实际上是一个不错的高尔夫拼图! 我只使用了两个循环就做到了! :)

        int n = 5;
        for(int i=0; i < n; i++){
            for(int j=0; j < 2*n; j++){
               int abs = Math.abs(n-j);
               System.out.print(abs>i ? " " : i-abs+1);
            }
            System.out.println();
        }
        

        输出:

             1    
            121   
           12321  
          1234321 
         123454321
        

        【讨论】:

        • 请问为什么我们需要 Math.abs()?
        • 顺便说一句,每行前面都有一个额外的空间。
        • 要删除每行前面的多余空间,只需在第二个循环中更改 int j=1
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-21
        • 1970-01-01
        • 2015-09-17
        • 1970-01-01
        相关资源
        最近更新 更多