【问题标题】:For Loop pattern from 654321,54321.. to 1For 循环模式从 654321,54321.. 到 1
【发布时间】:2017-07-05 21:56:21
【问题描述】:

使用 Java,

我正在尝试使用嵌套的 for 循环来制作一个将 654321 打印为 1 的图表,

例子,

654321

54321

4321

321

21

1

下面的代码打印出一个足够接近的例子,但不是从前面递减,而是从后面递减,

654321

65432

6543

654

65

6

这有点像我想要的不完全一样,你会如何让它从头开始倒计时?

public class test_for_loops{

   public static void main (String [] args){
      int lines = 6;
      for (int i = 1; i <= lines; i++){
       for (int j = lines; j >= i; j--){
         System.out.print (j + " ");
         }   
      System.out.println();
    }
   }
}

【问题讨论】:

  • 您的内部循环正在打印j,它始终从设置为6lines 开始。所以你的结果是预期的。如果您想从不同的值开始打印,那么您需要找出将计算该值的表达式。第一行应该是 6,第二行应该是 5,第三行应该是 4……你看到模式了吗?
  • 人们不应该真正给出答案,这对 OP 来说适得其反,他们只需要稍微调试代码,直到最终弄清楚当前逻辑的缺陷在哪里
  • 感谢 Pshemo,这更有意义,我没有考虑从 6 开始,instean 只知道它必须有 6 个字符

标签: java for-loop nested nested-loops counting


【解决方案1】:

1.) 只需从0 开始i 并设置j=lines-i

2.) 遍历j 直到1

    int lines = 6;
      for (int i = 0; i < lines; i++){
       for (int j = lines-i; j >= 1; j--){
         System.out.print (j + " ");
         }   
      System.out.println();
    }

输出:

6 5 4 3 2 1 
5 4 3 2 1 
4 3 2 1 
3 2 1 
2 1 
1 

工作

 i   = 0 
     j (6 - 0 => 6)    6 , 5 , 4 , 3 , 2 , 1 

 i   = 1 
     j (6 - 1 => 5)  5 , 4 , 3 , 2 , 1 

 i   = 2 
     j (6 - 2 => 4)  4 , 3 , 2 , 1 
  .
  .  
 i   = 5 
     j (6 - 5 => 1)  1

【讨论】:

    【解决方案2】:

    我不太确定为什么要在 for 循环中执行此操作,但我能想到的最好方法是创建一个整数数组,然后按索引打印出数组中的值。随着循环的每次迭代,我们开始打印出数组中少 1 个位置的部分(即,我们首先打印数组中的所有 6 位数字 (6-0=6),然后我们打印前 5 位数组(6-1=5),然后是前 4 个(6-2=4)等等。)...唯一的问题是当你到达打印位置时。循环永远不会达到零,因为当你达到零时它会跳出,或者如果你不这样做,你会得到一个数组越界异常。所以我能想出的最佳解决方案如下 - 我必须打印出最后一个数字:

    public class test_for_loops{
        public static void main (String [] args){\
        int lines = 6; 
        int digits[] = {1,2,3,4,5,6}; 
        for (int i = 1; i < lines; i++){
            for (int j = lines; j >= i; j--){
                System.out.print (digits[j-i]);
            }
            System.out.println("\n");    
        }
        System.out.println(1);
    }
    

    这将产生以下输出:

    654321
    54321
    4321
    321
    21
    1
    

    【讨论】:

      【解决方案3】:

      你离得太近了,我们只需要在两个地方进行更改,即

      1.) 外循环 使 i=0 并让它运行到

      2.) 内循环 使 j = lines-i 并让它运行到 > 0

      public class test_for_loops{
         public static void main (String [] args){
           int lines = 6;
           for (int i = 0; i < lines; i++){
             for (int j = lines-i; j > 0; j--){
               System.out.print (j + " ");
             }   
             System.out.println();
          }
       }
      }
      

      【讨论】:

        【解决方案4】:
        int n = 6;
        for (int i = n; i > 0; i--) {
            for (int j = i; j > 0; j--) {
                System.out.print(j);
            }
            System.out.println();
        }
        

        说明:使用外循环控制每行的长度(最大数)。使用内部循环使用该长度打印每行的元素。我希望它很清楚

        【讨论】:

          【解决方案5】:

          我只是改变了for循环的顺序

          public class test_for_loops{
          
             public static void main (String [] args){
                int lines = 6;
                for (int cLine = lines; i > 0 ; i--){
                 for (int j = cLine; j > 0; j--){
                   System.out.print(j + " ");
                   }   
                System.out.println();
              }
             }
          }
          

          【讨论】:

            【解决方案6】:

            试试这个:

            int lines = 6;
            
            for (int i = 1; i <= lines; i++){
            
                for (int j = lines - i + 1; j >= 1; j--){
            
                    System.out.print (j + " ");
                }
            
                System.out.println();
            }
            

            输出:

            6 5 4 3 2 1 
            5 4 3 2 1 
            4 3 2 1 
            3 2 1 
            2 1 
            1 
            

            【讨论】:

              【解决方案7】:

              您不会减少行数,因此 j 在内部循环开始时始终设置为 6。试试这个:

              public static void main (String [] args){
                int lines = 6;
                int jcounter = lines;
                for (int i = 1; i <= lines; i++){
                 for (int j = jcounter ; j >= 1; j--){
                   System.out.print (j + " ");
                   }
                jcounter--;   
                System.out.println();
              }
              

              } }

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-09-05
                相关资源
                最近更新 更多