如何打印数组表格?

问题描述:

我在这里看看是否有人能够帮助解决这个问题。如何打印数组表格?

我想打印表出来这将是这个样子

   Month #1  Month #2 
    Person 1 $1293   $128 
    Person 2 $122   $1233 

我已经做了获取编号的所有其他步骤,等我只是停留在我的最后一步以表格形式获取正确的输出。

int[][] table = new int[people][month]; 

    // Load the table with values 
    for (int i=0; i < table.length; i++){  
      for (int j=0; j < table[i].length; j++){ 
      table[i][j] = r.nextInt(20000-1000) + 1000; 
      } 
     } 

     // Print the table 
     System.out.println("\n\nSummer Internship Salary Information:"); 
     for (int i=0; i < table.length; i++) { 
      for (int j=0; j < table[i].length; j++)      
      System.out.print ("Person #" + (i+1) + "$" + table[i][j] + "\t"); 
     System.out.println();  

     } 

该数组的初始大小由用户决定。和第一部分加载表的值。这可以忽略。

im有实际麻烦的部分是从表格打印出来。从我现在有代码,它给人的

 person#1 $12312 person #1 $12312 
    person#2 $12312 person #2 $12312 

的输出(注意数字是不正确的号码,它只是一个例子)

我怎样才能使之具有输出看起来像:

   Month#1 Month#2 
    Person#1 $12312 $12312 
    Person#2 $12312 $12312 

而且我不允许在本练习中使用调用方法或JCF。

+1

只是一个小提示:在未来,指定编程语言中的问题的标签之一。这个问题中没有什么特别提到Java,所以认识Java的人可能会简单地跳过它。 – Anorov 2013-03-04 02:50:48

+0

哦,好的!谢谢 ! – 2013-03-04 02:53:27

假设所有的人都有同样的月数:

System.out.println("\n\nSummer Internship Salary Information:"); 
for (int j=0; j < table[0].length; j++) { 
    System.out.print("\tMonth #" + (j+1)); 
} 
for (int i=0; i < table.length; i++) { 
    System.out.print("\nPerson #" + (i+1)); 
    for (int j=0; j < table[i].length; j++) { 
     System.out.print("\t$" + table[i][j]); 
    } 
} 
System.out.println(); 

注意人身#取出内循环,而列标题首先打印。

还要注意,如果任何数字太宽(比tabstop更宽),它会打破布局。你必须要聪明,以解决这个问题(首先找到最大宽度为每列或截断值)

(编辑就摆在更好的地方制表符和换行符;更少的字符串,并没有尾随选项卡)

+0

OH!我现在明白了。非常感谢。 – 2013-03-04 03:09:30

+0

没问题。如果这回答您的问题,您应该将其标记为答案,以便将其从“未答复”选项卡中移除。不要说谎;它也让我分! – Dave 2013-03-04 03:14:40

由于列的变量性质,我会计算每列的“所需宽度”。这将被用于“垫”短列,以确保列排队......

这将允许增加的人数,有工资,而无需任何额外补偿的大小...

public class SalaryColumns { 

    public static void main(String[] args) { 

     int people = 20; 
     int month = 12; 

     String monthLabel = "Month #"; 
     String personLabel = "Person #"; 

     Random r = new Random(System.currentTimeMillis()); 
     int[][] table = new int[people][month]; 

     int[] columWidths = new int[month + 1]; 
     columWidths[0] = personLabel.length() + Integer.toString(people).length() + 1; 
     // Load the table with values 
     for (int i = 0; i < table.length; i++) { 
      for (int j = 0; j < table[i].length; j++) { 
       table[i][j] = r.nextInt(20000 - 1000) + 1000; 
       columWidths[j + 1] = Math.max(
         columWidths[j + 1], 
         Math.max(
          monthLabel.length() + Integer.toString(month).length() + 1, 
          Integer.toString(table[i][j]).length() + 2)); 
      } 
     } 


     // Print the table 
     System.out.println("\n\nSummer Internship Salary Information:"); 
     System.out.print(pad("", columWidths[0])); 
     for (int i = 0; i < month; i++) { 
      String value = monthLabel + String.format("%d", i); 
      value += pad(value, columWidths[i + 1]); 
      System.out.print(value); 
     } 
     System.out.println(); 

     for (int i = 0; i < table.length; i++) { 
      String value = personLabel + String.format("%d", i); 
      value += pad(value, columWidths[0]); 
      System.out.print(value); 
      for (int j = 0; j < table[i].length; j++) { 
       value = String.format("$%d", table[i][j]); 
       value += pad(value, columWidths[j + 1]); 
       System.out.print(value); 
      } 
      System.out.println(); 

     } 
    } 

    public static String pad(String value, int length) { 
     StringBuilder sb = new StringBuilder(length); 
     while ((value.length() + sb.length()) < length) { 
      sb.append(" "); 
     } 
     return sb.toString(); 
    } 
} 

,其输出类似...

  Month #0 Month #1 Month #2 Month #3 Month #4 Month #5 Month #6 Month #7 Month #8 Month #9 Month #10 Month #11 
Person #0 $19428 $6333  $19057 $9502  $3265  $3731  $13855 $10254 $2997  $11370 $3264  $13038  
Person #1 $11988 $2313  $7722  $13457 $1100  $10589 $5453  $5996  $12301 $11490 $12283 $4407  
Person #2 $15179 $13993 $19421 $12370 $12090 $18623 $13716 $13215 $7308  $8446  $6657  $7861  
Person #3 $19673 $2956  $10505 $11141 $2020  $1025  $6833  $8821  $4366  $4127  $8938  $16353  
Person #4 $17210 $9442  $7960  $3178  $19924 $17406 $9637  $11655 $13862 $9136  $17205 $10832  
Person #5 $1609  $16141 $17245 $5073  $5716  $17390 $11861 $10235 $12540 $6037  $5199  $1782  
Person #6 $10721 $2257  $16660 $6635  $17384 $9606  $17578 $16799 $4066  $1960  $9563  $4705  
Person #7 $13224 $17277 $5932  $8532  $17321 $12650 $9672  $12527 $2251  $2702  $9033  $10322  
Person #8 $11625 $14107 $1171  $19300 $18455 $13178 $15637 $19687 $12751 $8870  $9412  $6501  
Person #9 $18550 $17017 $6902  $16676 $1057  $12067 $17656 $9220  $15494 $18450 $17341 $10378  
Person #10 $18408 $1907  $1203  $17781 $17106 $4861  $19259 $16245 $12223 $16278 $4429  $18283  
Person #11 $17548 $6160  $18262 $9116  $15075 $16619 $19431 $3463  $15789 $17814 $2059  $16414  
Person #12 $3882  $14816 $6580  $14257 $2192  $11033 $1387  $12269 $14246 $18406 $14794 $9036  
Person #13 $14124 $10216 $11960 $7462  $18001 $6254  $12928 $18118 $14161 $10585 $8102  $7295  
Person #14 $9849  $4085  $7184  $16173 $6847  $10288 $1796  $17384 $11323 $10811 $2636  $9946  
Person #15 $13500 $15157 $7618  $1810  $9368  $3295  $12586 $17489 $16092 $10978 $15227 $5506  
Person #16 $19668 $8540  $16249 $1039  $13672 $14082 $8978  $2710  $17092 $11280 $8090  $10266  
Person #17 $18138 $7467  $18246 $7110  $16501 $6583  $14026 $14204 $10877 $18628 $14575 $4836  
Person #18 $15090 $1579  $15613 $8480  $15854 $15687 $10024 $17004 $15452 $16351 $13714 $19755  
Person #19 $11015 $1152  $11733 $7620  $18217 $8518  $7243  $11819 $10313 $4339  $13532 $13700