2012-04-17 39 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.通過簡單的乘法和加法找出您的索引。

您應該嘗試並實施這兩種方法。它會幫助你更好地理解循環。