2012-04-17 27 views
0

我想知道是否有人可以帮我解决我遇到的一个小问题。方法错误地打印表

我想打印出100个项目的数组,每行需要10个项目,之后它开始一个新的行。我已成功完成此操作,但每列中的每一行都显示相同的编号。例如。我的输出是:

1 1 1 1 1 1 1 1 1 1 
2 2 2 2 2 2 2 2 2 2 

当应显示为沿着线的东西:

1 2 3 4 5 6 7 8 9 10 
11 12 13 14 15 16 17 18 19 20 

这里是下面的方法,我用打印的表格:

public static void printTable(int[] emirps) { 
    for (int i = 0; i < 100; i++) { 
     for (int j = 0; j < 10; j++) { 
      // After 10 go to a new line 
      System.out.printf("%d\t", emirps[i]); 
     } 
     System.out.println(""); 
    } 
} 

如果任何人都可以帮助我确定自己的愚蠢行为,我将不胜感激。

+0

调试器没有帮助? – Tom 2012-04-17 03:31:25

+0

它是功课吗? – 2012-04-17 03:31:51

+0

啊,我忘了试一下。给我一点时间。 – Battleroid 2012-04-17 03:31:53

回答

4

您每次通过内循环都打印相同的emirps[i]。有几种方法可以解决这个问题。这里有一个:

public static void printTable(int[] emirps) { 
    for (int i = 0; i < 100; i += 10) { 
     for (int j = 0; j < 10; j++) { 
      // After 10 go to a new line 
      System.out.printf("%d\t", emirps[i + j]); 
     } 
     System.out.println(); 
    } 
} 

这里的另一个(不是很优雅):

public static void printTable(int[] emirps) { 
    for (int i = 0; i < 100; ++i) { 
     System.out.printf("%d\t", emirps[i]); 
     if (i % 10 == 9) { 
      System.out.println(); 
     } 
    } 
} 
1

您未在此代码中的任何位置使用j索引。

这里是你如何打印:

System.out.printf("%d\t", emirps[i+j]);

请注意,在打印语句你现在同时使用ij指数。 另外,为了让你的行偏移正常工作,你应该在循环的每一步递增i 10。

或者,将emirps声明为2维数组。随后的printTable()签名是:

public static void printTable(int[][] emirps)

在这种设置中,这里是你如何将打印:

System.out.printf("%d\t", emirps[i][j]);

所以在第一次设置,i+j一起指数为1 D阵列。在第二个设置中,i是行,j是列,一起索引到2-D数组中。看起来你正在做一维数组,但这个例子是供你将来参考的。

+0

这并不完全。外循环变量需要增加10,而不是1. – 2012-04-17 03:38:04

+0

良好的捕获 - 我会解决它。谢谢。 – 2012-04-17 03:39:26

0

使用模运算符。每次你的号码可以被10除以余数,你可以制作一个新的线,因为你已经填满了这一行。您使用“模运算符”(即%(百分号)符号)获得余数。它可以像/一样使用,除了结果是商而不是结果,除法运算的其余部分就是结果。

public static void main(String[] args) 
{ 
    StringBuilder builder = new StringBuilder(); 
    for (int i = 0; i < 100; i++) 
    { 
     if (i != 0 && i % 10 == 0) 
     { 
      builder.append('\n'); 
     } 
     builder.append(i + " "); 
    } 
    System.out.println(builder.toString()); 
} 

打印出:

0 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 18 19 
20 21 22 23 24 25 26 27 28 29 
30 31 32 33 34 35 36 37 38 39 
40 41 42 43 44 45 46 47 48 49 
50 51 52 53 54 55 56 57 58 59 
60 61 62 63 64 65 66 67 68 69 
70 71 72 73 74 75 76 77 78 79 
80 81 82 83 84 85 86 87 88 89 
90 91 92 93 94 95 96 97 98 99 
+0

对于作业题目,尽量不要给出实际答案。相反,指导OP在正确的方向。这有助于他们学习而不是仅仅使用你给他们的东西。 – 2012-04-17 03:38:41

+0

@KshitijMehta - 没有什么可以表明这是作业。 – 2012-04-17 03:41:22

+0

@KshitijMehta它没有标记作业,所以这是一个假设。但是我明白。我试图通过解释模数的使用来提供信息,这种模数并没有显示出那么多。 – 2012-04-17 03:41:49

1

这看起来像功课,这样反而给你答案,这里有一个提示:

对于第一循环的第一次迭代,I = 0当这种情况发生时,你将j从0递增到9.请注意,我始终保持相同。这是您打印第一行时的情况。

一旦你完成了第二个for循环,我增加了1,现在我= 1.同样,你从j增加j到9,我停留在1.这是当你打印第二个线。

这种重复100次,因为我从0到99

有2种方式接近这一点:

  1. 使用一个for循环,并找出何时打印结束线字符。
  2. 使用两个循环,每个循环最多10.通过简单的乘法和加法找出您的索引。

您应该尝试并实施这两种方法。它会帮助你更好地理解循环。