我无法弄清楚如何重置循环(参见示例)

时间:2010-12-12 23:25:31

标签: java php for-loop nested-loops

我需要编写一个接受两个int作为参数的方法,一个min和一个max。在第一行,我需要打印该范围内的所有数字(包括在内)。在下一行,我从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();   
   }
}

8 个答案:

答案 0 :(得分:3)

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

   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

答案 1 :(得分:3)

这是代码..

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

答案 2 :(得分:2)

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

告诉我们您的情况。

答案 3 :(得分:1)

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

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

你应该能够从那里弄明白,而且你自己搞算算法要比从其他人那里复制算法要好得多,至少在这个发展水平上是这样。祝你好运!

答案 4 :(得分:0)

考虑一种打印缺失数字的方法。答案如下,如果您无法想出它,您可以查看它。


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

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(); 
   }  
}

答案 5 :(得分:0)

我没有运行这个,但可能会有效:

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();   
   }

}

答案 6 :(得分:0)

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

   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();
        }
    }

答案 7 :(得分:0)

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);
    }
}