簡體   English   中英

for循環中的字符打印出來的值太遠了

[英]characters in for loop printing out too far away from values

我是java和for循環的新手。 我希望我的代碼打印出來

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

您可以使用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();
}

這里,這部分%-20s正在寫出20個字符的名字。 首先它寫入名稱,然后是空格,直到它達到20個字符。

您可以使用名稱長度的函數打印多個空格,而不是打印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(" ");

如果您使用的是Java 8,可以像這樣使用String :: join

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM