Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环打印中的字符与值的距离太远_Java_String_Netbeans - Fatal编程技术网

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

我对java和循环非常陌生。我想把我的代码打印出来

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