How to print a table of arrays?

后端 未结 3 1506
北荒
北荒 2021-01-26 01:44

I\'m here to see if anyone would be able to help out with the problem.

I\'m trying to print a table out which would look something like this

                    


        
3条回答
  •  难免孤独
    2021-01-26 02:26

    Because of the variable nature of the columns, I would calculate the "required width" of each column as well. This would be used to "pad" shorter columns to ensure that the columns line up...

    This would allow to increase the number of people and the size of there salaries without needing any additional compensation...

    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();
        }
    }
    

    Which outputs something like...

               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    
    

提交回复
热议问题