2011-11-30 75 views
0

我需要以8行來打印一個列表。說明如果列表是長整數,它將在第一行打印8,下一行打印2。這裏是我的代碼:打印一個8行的列表(java)

for(int i = 0; i < size; i++){ 
    System.out.println(list[i] + " "); 
} 

我怎麼能打印它的行數爲8,而不是每行打印一行?

回答

3

使用StringBuilder

StringBuilder sb = new StringBuilder(); 
sb.append(list[0]).append(" "); 
for (int i = 1 ; i < size; i++) { 
     sb.append(list[i]).append(" "); 
     if ((i + 1) % 8 == 0) { sb.append("\n"); } 
} 
System.out.print(sb.toString()); 
+2

這有一個錯誤。它在第一項之後打印一個換行符。 –

+0

謝謝,我修復了它。 –

+2

現在您正在第一行打印9個項目。 –

0
for(int i = 0; i < size; i++){ 
    System.out.println(list[i] + "\n"); 
} 

\ n是換新線。

+0

我不希望把每一個在同一行。我想在每行上打印8個 – Josh

+0

然後@MДΓΓБДLL給出了答案:) –

0
for (int nI = 0; nI < list.size(); nI++) 
{ 
    System.out.print(list[nI] + " "); 

    // new line if you hit 8th, 16th, etc. item in the list 
    if (nI > 1 && ((nI+1) % 8 == 0)) 
    System.out.print("\n"); 
} 
+0

這一個也有一個錯誤。它不會破壞正確的元素。 –

+0

你說得對,修理它。 – harbinja

1
for (int i = 0; i < size; i++) { 
    System.out.print(list[i]); 
    if (i % 8 == 7) { 
    System.out.println(); 
    } else { 
    System.out.print(" "); 
    } 
} 
if (size % 8 != 0) { 
    System.out.println(); 
} 

技術上,print("\n")println()不一定有同樣的效果,這也是爲什麼上面不只是做System.out.print((i % 8 ==7) ? "\n" : " ")

如果確保最後一行終止,即使它少於8個元素,額外的也是如此。

2

我到目前爲止看到的每個答案都有一個錯誤,它在哪裏出現問題。使用以下命令:

int[] list = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}; 

int br = 8; 
for (int i = 0; i < list.length; i++) { 
    System.out.print(list[i] + " "); 
    if (i % br == (br - 1)) 
     System.out.println(); 
} 

或者:

int br = 8; 
for (int i = 0; i < list.length; i++) { 
    if (i > 0 && i % br == 0) 
     System.out.println(); 
    System.out.print(list[i] + " "); 
} 

輸出:

1 2 3 4 5 6 7 8 
9 10 11 12 13 14 15 16 
17 18 

這裏有一些方法(從其他的答案帶到了這個問題),這不能完成。

  • Break when i % 8 == 0。這是行不通的,因爲0 % 8 == 0是真的,這意味着這將導致在第一個元素之後中斷。
  • 打印該項目,然後打破i > 0 && (i % 8 == 0)。這是行不通的,因爲數組是零索引的(例如,i不等於8,直到第9個元素。換句話說,第一行有9個項目。但是,如果在打印之前檢查中斷, 。元素
  • 打印出的第一個項目,然後在1開始循環指數這患有同樣的問題,因爲以前的答案;你仍然會永遠是一個落後指標

可以使用。 StringBuilder使這個邊緣更快,但更重要的是得到一個正確的答案比之一。

1

要使用Guava ... Lists.partition將列表分爲最大長度列表。

List<String> myList; 
for (List<String> subs : Lists.partition(myList, 8)){ 
    System.out.println(Joiner.on(" ").join(subs)); 
} 

Lists.partition

1
for (int i = 0; i < size; i++) 
{ 
    if ((i % 8 == 0) && (i > 0)) 
    { 
     System.out.println(); 
    } 
    System.out.print(list[i] + " "); 
}