2012-04-17 6 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

+0

は宿題ですか? –

+0

ああ、私はそれを忘れてしまった。ちょっと待って。 – Battleroid

答えて

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インデックスを使用していません。ここで

あなたは印刷する必要があります方法です:print文では、あなたが今、両方ijインデックスを使用しているか

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

注意してください。 また、行オフセットが正しく機能するようにするには、ループの各ステップでiを10ずつインクリメントする必要があります。

また、emirpsを2次元配列として宣言します。その後printTable()のシグネチャは次のようになります。その設定で

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

、ここにあなたが印刷する方法を次のとおりです。

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

したがって、最初のセットアップ、i+j一緒インデックスでの1-へDアレイ。 2番目のセットアップでは、iが行で、jが2次元配列にインデックス付けされた列です。あなたは1次元配列をしているようですが、この他の例はあなたの将来の参考のためです。

+0

それはそれをしません。外側のループ変数は1ではなく10だけ増分する必要があります。 –

+0

良いキャッチ - 修正します。どうも。 –

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を正しい方向に誘導してください。これは、あなたが与えたものを使うのではなく、学ぶのに役立ちます。 –

+0

@KshitijMehta - これは宿題であることを示唆するものは何もありません。 –

+0

@KshitijMehtaそれは宿題でタグ付けされていないので、それは前提です。しかし、私は理解しています。私はモジュロの使い方を説明するようなもので有益にしようとしましたが、これはあまり表示されません。 –

1

これは宿題のように見えるので、代わりにあなたに答えを与える、ここでヒントです:

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

2回目のforループを終了すると、iは1ずつ増加し、i = 1になります。また、jを0から9までインクリメントして、1に留まります。これは、ライン。

私は0から99まで

を行くようにこれは、この接近する2通りの方法があり、100回を繰り返し:

  1. がループのための1つを使用し、エンドのを印刷する際に把握ライン文字。
  2. 2つのforループを使用します。それぞれのループは10になります。簡単な乗算と加算でインデックスを把握します。

両方の方法を試して実装する必要があります。ループをよりよく理解するのに役立ちます。

関連する問題