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]あなたは内側のループを通して毎回同じものを印刷しています。これを回避する方法はいくつかあります。これが1つです:

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

もう1つ(あまりエレガントではありません):

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

i印刷ステートメントで、とjインデックスの両方を使用していることに注目してください。また、行オフセットを正しく機能させるにiは、ループの各ステップで10ずつインクリメントする必要があります。

emirpsまたは、 2次元配列として宣言します。次に、の署名は次のprintTable()ようになります。

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

その設定では、次のように印刷します。

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

したがって、最初のセットアップでは、i+j一緒に1次元配列にインデックスを付けます。2番目の設定でiは、は行と列でありj、2次元配列にインデックスを付けます。1次元配列を実行しているように見えますが、この他の例は将来の参照用です。

于 2012-04-17T03:33:09.640 に答える
1

これは宿題のように見えるので、答えを出す代わりに、ここにヒントがあります。

最初のループの最初の反復では、i = 0です。この場合、jを0から9にインクリメントします。iは全体を通して同じままであることに注意してください。これは、最初の行を印刷するときです。

2番目のforループが完了すると、iは1から増加し、i = 1になります。ここでも、jを0から9にインクリメントし、iは1のままです。これは2行目を印刷するときです。

私が0から99になると、これは100回繰り返されます。

これにアプローチする2つの方法があります:

  1. 1つのforループを使用して、行末文字をいつ印刷するかを判断します。
  2. 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 に答える