2010-12-12 59 views
2

我需要编写一个接受两个int作为参数,分钟和最大值的方法。在第一行,我需要打印该范围内的所有数字(包括)。在下一行中,我以min + 1开头,将所有数字打印到最大值,然后返回到范围的前部并打印最小值。下一行我以min + 2开头,依此类推,直到我用范围中的每个数字开始重复这个开始。很难解释,这里有两个例子:假设我将1和5作为最小和最大参数传递。我想的方法来打印:我不知道如何重置循环(请参阅示例)

12345 
23451 
34512 
45123 
51234 

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

3456789 
4567893 
5678934 
6789345 
7893456 
8934567 
9345678 

我已经试过各种事情,我敢肯定有一个简单的方法来做到这一点,我没有意识到。我应该这样做没有数组或arrayLists。我认为我有一个很好的工作基础,但我无法弄清楚从哪里出发。我的基本代码打印此:

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

听起来这可能是递归的。 – Falmarri 2010-12-12 23:30:35

+0

这不是家庭作业,它来自我一直在阅读的网站上的一些java示例问题。我不在学校,我只是为自己学习java =)我会考虑Peter和Raskolnikov的答案,看看我能否自己得出结论。 – Bots 2010-12-13 00:32:41

回答

2

您应该考虑每行需要多少值,然后确定这些值应该是多少。没有给你解决方案,它很难做得更清楚。

让我们知道你是如何去。

+0

更确切地说:就那个点的循环计数器的值而言,我们如何确定这些值? – 2010-12-13 00:15:39

+0

这是一个非常简单的表达,所以我原以为你可能能够解决它。但是,如果你不能看看@ taxman的解决方案。 – 2010-12-13 10:03:13

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

你可以重新格式化,使可读性? – Milhous 2010-12-12 23:37:56

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

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

彼得是对的,国际海事组织是以正确的方式回答作业问题。你知道每行有多少个元素,所以你需要一个外部循环给你许多元素,这会阻止你获得你现在看到的级联行为。

此时,您需要考虑内部循环,您可能会使用模数运算符(%)找到最简单的方法。这将允许你迭代而不会超越你的目标。

你应该能够从那里弄清楚,而且你自己从自己的算法中找出算法要好得多,而不是从别人那里复制它,至少在这个级别的开发中。祝你好运!

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

尝试为您的答案添加解释。 – 2012-10-26 08:48:16

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 
3

下面的代码..

for i = 0 to max-min 
for j = 0 to max-min 
print min + (i+j)%n 
相关问题