方法打印表不正确

时间:2012-04-17 03:29:14

标签: java

我想知道是否有人可以帮我解决我遇到的一个小问题。

我正在尝试打印出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("");
    }
}

如果有人能帮助我确定我在哪里搞砸了,我会非常感激。

4 个答案:

答案 0 :(得分: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 :(得分:1)

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

以下是打印方式:

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

请注意,在print语句中,您现在正在使用ij索引。 另外,为了使您的行偏移正常工作,您应该在循环的每一步将i递增10。

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

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

在该设置中,以下是您打印的方式:

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

因此,在第一次设置中,i+j一起索引到一维数组。在第二个设置中,i是行,j是列,一起索引为二维数组。看起来你正在做一维数组,但另一个例子是供将来参考。

答案 2 :(得分:1)

这看起来像是家庭作业,所以不是给你答案,而是提示:

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

一旦你通过第二个for循环,我增加1,现在i = 1.再次,你将j从0增加到9,我保持在1.这是你打印第二行

重复100次,因为我从0变为99.

有两种方法可以解决这个问题:

  1. 使用一个for循环,找出何时打印行尾字符。
  2. 使用两个for循环,每个循环最多10个。通过简单的乘法和加法来计算索引。
  3. 您应该尝试并实现这两种方法。它会帮助你更好地理解循环。

答案 3 :(得分: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