【问题标题】:I can't figure out how to reset a loop (see example)我不知道如何重置循环(参见示例)
【发布时间】:2011-05-24 09:47:39
【问题描述】:

我需要编写一个接受两个整数作为参数的方法,一个最小值和一个最大值。在第一行,我需要打印该范围内的所有数字(包括)。在下一行,我从 min+1 开始,打印直到最大值的所有数字,然后返回范围的前面并打印 min。下一行我从 min+2 开始,依此类推,直到我从范围内的每个数字开始重复。很难解释,这里有两个例子:假设我传递 1 和 5 作为 min 和 max 参数。我想要打印这个的方法:

12345
23451
34512
45123
51234

或者如果通过了 3 和 9,我希望这样:

3456789
4567893
5678934
6789345
7893456
8934567
9345678

我已经尝试了各种方法,我确信有一种我没有意识到的简单方法可以做到这一点。我应该在没有数组或数组列表的情况下执行此操作。我认为我有一个很好的合作基础,但我就是不知道从这里去哪里。我的基本代码打印了这个:

12345
2345
345
45
5

还有这个:

3456789
456789
56789
6789
789
89
9

我被难住了。这是我的代码:

public void printSquare(int min, int max){
   for (int i=min; i<=max; i++){
      for (int j=i; j<=max; j++){
         System.out.print(j);         
      }
   System.out.println();   
   }
}

【问题讨论】:

  • 听起来可能是递归的。
  • 这不是家庭作业,它来自我一直在阅读的网站上的一些 java 示例问题。我不在学校,我只是为自己学习 java =) 我要去想想彼得和拉斯科尔尼科夫的回答,看看我自己能不能得出结论。

标签: java php for-loop nested-loops


【解决方案1】:

您应该考虑每行需要多少个值,然后确定这些值应该是什么。如果不给你解决方案,很难让它更清晰。

让我们知道你的进展。

【讨论】:

  • 更准确地说:我们如何确定这些值是什么,就当时循环计数器的值而言?
  • 这是一个非常简单的表达式,所以我认为您可能能够解决它。但是,如果您不能,您可以查看@taxman 的解决方案。
【解决方案2】:

想办法打印缺失的数字。答案在下面,如果你想不出来,你可以检查一下。


这也应该打印缺失的部分:

public void printSquare(int min, int max){  
   for (int i=min; i<=max; i++){  
      for (int j=i; j<=max; j++){  
         System.out.print(j);         
      }  
      for (int k=0; k<i-min; k++){  
         System.out.print(min+k);         
      }  
      System.out.println(); 
   }  
}

【讨论】:

    【解决方案3】:

    我没有运行这个,但它可能会起作用:

    public void printSquare(int min, int max){
    
       int dif = max - min;
       for (int i=min; i<=max; i++){
    
          for (int j=i; j <= i+dif ; j++){
             int temp = j;
             if ( temp > max ) temp = temp  - max;
             System.out.print(temp);         
          }
    
       System.out.println();   
       }
    
    }
    

    【讨论】:

      【解决方案4】:

      试着像这样移动一个数组:

         static void Main(string[] args)
          {
              // this will work equally well with numbers letters or other types of characters
              int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
              String a = "hello";
              for (int i = 0; i < nums.Length; i++)
              {
                  int j = 5;
                  int num = i;
                  while (j-- > 0)
                  {
                      if (num >= nums.Length)
                      {
                          num = 0;
                      }
      
                      // shift the loop
                      Console.Write(nums[num++]);
                  }
                  Console.WriteLine();
              }
          }
      

      【讨论】:

        【解决方案5】:

        彼得是对的,IMO 正在以正确的方式回答家庭作业问题。您知道每行需要多少元素,因此您需要一个外部循环来为您提供这么多元素,这将阻止您获得现在看到的级联行为。

        此时您需要考虑您的内部循环,您可能会发现使用模运算符 (%) 最简单。这将允许您在不超过目标的情况下进行迭代。

        您应该能够从那里找出它,而且您自己找出算法比从别人那里复制它要好得多,至少在这个开发水平上。祝你好运!

        【讨论】:

          【解决方案6】:
          public class Test1{
              public void printSquare(int min, int max){
                  for (int i=min; i<=max; i++){
                      for (int j=i; j<=max; j++){
                          System.out.print(j);       
                      }
                      for(int k= min; k<i; k++){
                          System.out.print(k);     
                      }
                      //System.out.print(i-1);
                      System.out.println();   
                  }
              }
              public static void main(String[] args){
                  Test1 t = new Test1();
                  t.printSquare(1,5);
              }
          }
          

          【讨论】:

          • 尝试为您的答案添加解释。
          【解决方案7】:

          这是一个非常简单的实现。希望这会有所帮助!

             int n = max-min+1;
             for (int i=0 ; i<n; i++){
              for (int j=0; j<n; j++)
               cout<<min + (i+j)%n;
                cout<<"\n";
             }
          

          输出:

          min = 3 | max = 9 
          
              3456789
              4567893
              5678934
              6789345
              7893456
              8934567
              9345678
          

          【讨论】:

            【解决方案8】:

            这是代码..

             for i = 0 to max-min
             for j = 0 to max-min
             print min + (i+j)%n
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-06-05
              • 1970-01-01
              • 2016-03-24
              • 1970-01-01
              • 1970-01-01
              • 2019-07-05
              • 1970-01-01
              • 2022-01-12
              相关资源
              最近更新 更多