我有方法,它执行以下操作:
- 计算小写元音的数量
- 为每个元音的字符串数组添加一个星号
- 打印元音和星号的数量
输出如下所示:
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 = {"","","","",""};