Java 循环打印中的字符与值的距离太远
我对java和循环非常陌生。我想把我的代码打印出来Java 循环打印中的字符与值的距离太远,java,string,netbeans,Java,String,Netbeans,我对java和循环非常陌生。我想把我的代码打印出来 Andy ** Kristy ********** Amy ***** ` 但是我的朋友,我得到了这个 Andy ** Kristy ********** Amy ***** 我如何更改for循环以阻止名称之间的间距如此?多谢各位 public static void drawChart(String name, int age) { System.o
Andy **
Kristy **********
Amy ***** `
但是我的朋友,我得到了这个
Andy **
Kristy **********
Amy *****
我如何更改for循环以阻止名称之间的间距如此?多谢各位
public static void drawChart(String name, int age) {
System.out.print(name);
for(int j = 1; j <= 10; j++) {
System.out.print(" ");
}
for (int i=0; i<age; i++) {
System.out.print("*");
}
System.out.println(" ");
}
publicstaticvoiddrawchart(字符串名,int-age){
系统输出打印(名称);
对于(int j=1;j而言,您可以打印多个空格,而不是打印10个空格,因为它是名称长度的函数:
System.out.print(name);
for(int j = 1; j <= 20 - name.length(); j++) { // the value 20 should be
// higher than the longest name
System.out.print(" ");
}
for (int i=0; i<age; i++) {
System.out.print("*");
}
System.out.println(" ");
System.out.print(名称);
对于(int j=1;j您可以使用String.format()
实用程序以一定的宽度写入名称。如果名称小于该宽度,它将用空格填充其余部分。类似的情况
public static void drawChart(String name, int age){
String nameWithPadding = String.format("%-20s", name);
System.out.print(nameWithPadding);
for (int i = 0; i < age; i++)
System.out.print('*');
System.out.println();
}
publicstaticvoiddrawchart(字符串名,int-age){
字符串名称WithPadding=String.format(“%-20s”,名称);
系统输出打印(带填充的名称);
for(int i=0;i
在这里,这部分%-20s
用20个字符来写名称。首先写名称,然后是空格,直到达到20个字符。如果您使用的是Java 8,您可以这样使用:
public static void drawChart(String name, int age) {
String spaces = String.join("", Collections.nCopies(20 - name.length(), " "));
String stars = String.join("", Collections.nCopies(age, "*"));
System.out.println(name + spaces + stars);
}
<>上述答案是好的,但是他们不考虑调用最长名称的函数时的情况,然后用下一个最长的名称再次调用函数。在这种情况下,间隔会不同。
以下是针对该问题的解决方案:
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import java.util.Map;
import java.util.Set;
public class Search {
public static void drawChart(Multimap<String, Integer> persons){
//we use Multimap because we may have more than one person with the same name
Set<String> names = persons.keySet();
int maxLength = 0;
for (String name : names) {
if (name.length() > maxLength) {
maxLength = name.length(); //define the longest name
}
}
for (Map.Entry<String, Integer> entry : persons.entries()) {
String name = entry.getKey();
System.out.print(name);
if (name.length() < maxLength) {
//adjusting the number of spaces required to be on the same level
//with the longest name
int diff = maxLength - name.length();
for (int i = 0; i < diff; i++) {
System.out.print(" ");
}
}
Integer age = entry.getValue();
for (int i = 0; i < age; i++) {
System.out.print("*");
}
System.out.println();
}
}
public static void main(String[] args) {
Multimap<String, Integer> map = ArrayListMultimap.create();
map.put("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 2);
map.put("ffffffffffffffffffffffffffffffffffffffffffffffffff" +
"fffffffffffffffffffffffff", 3);
map.put("zz", 3);
map.put("zz", 6);
map.put("ffff", 9);
drawChart(map);
}
}
有什么想法吗?名字的长度呢?在所需的输出中有一个未使用的字符作为打字错误:“`”,但我们不能编辑它,因为它只有一个字符
zz ***
zz ******
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ***
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa**
ffff *********