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



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

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

输出如下所示:

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]);
}

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

在开头添加以下内容:

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

创建时,所有枚举均为空。

因此,starCounter[1] += "*" ->"null*">

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

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,然后进行打印。

正如创建时的其他答案中所述starCounter将其所有元素设置为 null因此每次附加*时都会有一个前导null。您可以使用的另一种解决方案是在同一行上创建和初始化变量,而不是

String[] starCounter = new String[5];用:
String[] starCounter = {"","","","",""};

相关内容

  • 没有找到相关文章