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
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