使用System.out.printf在输出中获取空值

时间:2018-04-15 21:37:41

标签: java null

我有方法,它执行以下操作:

  • 计算小写元音的数量
  • 为每个元音的字符串数组添加一个星号
  • 打印元音和星星的数量

输出如下:

Sentence: There is a wolf in the woods
There were: 
1 A's null* 
3 E's null*** 
2 I's null** 
3 O's null*** 
0 U's null

问题在于我不知道为什么会出现那些空关键字。

你能解释一下他们是如何到达那里以及如何摆脱它们的吗?

    public void printStars (String inputString) {
    int[] vowelCounter = new int[5];
    String[] starCounter = new String[5];

    for (int i = 0; i < inputString.length(); i++) {
        if (inputString.charAt(i) == 'a') {
            vowelCounter[0]++;
            starCounter[0] += "*";
        }
        else if (inputString.charAt(i) == 'e') {
            vowelCounter[1]++;
            starCounter[1] += "*";
        }
        else if (inputString.charAt(i) == 'i') {
            vowelCounter[2]++;
            starCounter[2] += "*";
        }
        else if (inputString.charAt(i) == 'o') {
            vowelCounter[3]++;
            starCounter[3] += "*";
        }
        else if (inputString.charAt(i) == 'u') {
            vowelCounter[4]++;
            starCounter[4] += "*";
        }
    }
    System.out.println(inputString);
    System.out.println("There were: ");
    System.out.printf("%d A's %s %n", vowelCounter[0], starCounter[0]);
    System.out.printf("%d E's %s %n", vowelCounter[1], starCounter[1]);
    System.out.printf("%d I's %s %n", vowelCounter[2], starCounter[2]);
    System.out.printf("%d O's %s %n", vowelCounter[3], starCounter[3]);
    System.out.printf("%d U's %s %n", vowelCounter[4], starCounter[4]);
}

3 个答案:

答案 0 :(得分:2)

您没有初始化starCounter的值,因此默认情况下所有值都为空。

在开头添加:

for (int i = 0; i < starCounter.length(); i++) {
   starCounter[i] = "";
}

答案 1 :(得分:0)

String[] starCounter = new String[5];

创建时,所有元素都为空。

因此,starCounter[1] += "*" - &gt; “空*”

例如,您可以执行更新方法:

public static void updateStartCounter(String[] starCounter, int index, String addedValue){
    if (starCounter[index] == null){
        starCounter[index] = addedValue;
    } else {
        starCounter[index] += addedValue;
    }
}

而不是:starCounter[0] += "*";,您可以执行:updateStartCounter(starCounter, 0, "*");

我的方法对非元音无用。

你可以创建List<String> starCounter = new ArrayList<>(5);并在那里做同样的技巧。在打印区域之前,只需检查starCounter的大小是否大于0,然后进行打印。

答案 2 :(得分:0)

正如其他答案中所述,创建时starCounter的所有元素都设置为null,因此每次追加*时都会有一个前导null。您可以使用的另一个解决方案是在同一行创建和初始化变量,而不是
String[] starCounter = new String[5];
用途:
String[] starCounter = {"","","","",""};