2011-11-30 124 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] + " "); 
}