我试图让代码运行,以便输出看起来像这样,
91-100 | [][][][][][][][][] 81- 90 | [][][][][] 71- 80 | [][][][][][][][][][] 61- 70 | [][] 51- 60 | [] 41- 50 | [][] 31- 40 | 21- 30 | 11- 20 | 1- 10 | [][][]
但目前,我的输出看起来像这样,
91-100 | [][][][][][][][][]81- 90 | [][][][][]71- 80 | [][][][][][][][][][]61- 70 | [][]51- 60 | []41- 50 | [][]31- 40 | 21- 30 | 11- 20 | 1- 10 | [][][]
这是我的代码:
int[] buckets = new int[10];
while(scan.hasNextLine()){
String line = scan.nextLine();
String[] array = line.split(separator);
String grade = array[1];
int number = Integer.parseInt(grade.trim());
buckets[(number - 1)/10]++;
}
for(int i = buckets.length - 1; i >= 0; i--)// RELEVANT PARTS TO QUESTION
System.out.printf("%2d-%3d |%n", i * 10 + 1, i * 10 + 10);
for(int j = 0; j < buckets[i]; j++){
System.out.print("[]");
}
}
我似乎将[]
打印到下一行,但我似乎无法弄清楚如何将[]
放在上面的行上。我尝试使用printf(%d %d | %s%n)
,但这与我尝试的方法相比并没有太好用,只会产生更多问题。
无论如何将[]
移回一条线?
答案 0 :(得分:2)
您可以在printf
语句之前创建存储桶字符串,然后立即打印字符串,如
for (int i = buckets.length - 1; i >= 0; i--) {
String bucketsString = "";
for(int j = 0; j < buckets[i]; j++)
bucketsString = bucketsString.concat("[]");
System.out.printf("%2d-%3d | %s %n", i * 10 + 1, i * 10 + 10, bucketsString);
}
答案 1 :(得分:1)
由于printf
在您输入%n
时会打印一个新行,我建议使用类似的内容(将%n
替换为空格,在循环后添加println
):
for(int i = buckets.length - 1; i >= 0; i--) {
System.out.print("%2d-%3d | ", i * 10 + 1, i * 10 + 10);
for(int j = 0; j < buckets[i]; j++){
System.out.print("[]");
}
System.out.println("");
}
println
语句会在您想要的地方为您提供换行符。
答案 2 :(得分:0)
System.out.printf()
和System.out.println()
在最后添加一个新行。因此,只需使用System.out.print()
,并在行末使用System.out.println()
for(int i = buckets.length - 1; i >= 0; i--)// RELEVANT PARTS TO QUESTION
System.out.print("%2d-%3d |", i * 10 + 1, i * 10 + 10);
for(int j = 0; j < buckets[i]; j++){
System.out.print("[]");
}
System.out.println();
}