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

如果有人能帮我查明我犯错的地方,我将不胜感激。

4

4 回答 4

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();
        }
    }
}
于 2012-04-17T03:33:17.587 回答
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列,一起索引到二维数组中。看起来您正在做一个一维数组,但另一个示例供您将来参考。

于 2012-04-17T03:33:09.640 回答
1

这看起来像家庭作业,所以这里没有给你答案,而是给你一个提示:

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

一旦你完成了第二个 for 循环,i 增加 1 到,现在 i = 1。同样,你将 j 从 0 增加到 9,并且 i 保持在 1。这是你打印第二行的时候。

这会重复 100 次,因为 i 从 0 变为 99。

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

  1. 使用一个 for 循环,并确定何时打印行尾字符。
  2. 使用两个 for 循环,每个循环最多 10 个。通过简单的乘法和加法计算您的索引。

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

于 2012-04-17T03:37:19.793 回答
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 
于 2012-04-17T03:36:17.573 回答