Java读取文件统计冰淇淋口味总数及草莓次数,计数器异常求助
解决冰淇淋口味统计的计数器问题
Hey there! Let's fix that stubborn counter issue—this is such a common mistake when you're starting out, so no worries, we'll get it sorted quickly.
为什么计数器一直停在1?
最可能的原因是你把计数器变量放在了循环内部。比如每次循环都会重新初始化totalCount或者strawberryCount,导致每次循环都从零开始加1,最后结果永远是1。举个例子,错误的写法大概是这样:
while (TextIO.hasNextLine()) { // 这里每次循环都会重置计数器! int totalCount = 0; totalCount++; }
正确的实现代码
下面是完整的可运行代码,我用你提到的TextIO类来实现,同时处理了可能的空格问题(比如文本里的口味前后有空格),还加了忽略大小写的匹配(避免因为大小写不匹配漏统计):
public class IceCream { public static void main(String[] args) { // 把计数器放在循环外面!初始化一次就够了 int totalFlavors = 0; int strawberryCount = 0; // 先打开目标文件(替换成你的文件路径) TextIO.readFile("ice_cream_flavors.txt"); // 逐行读取文件内容 while (TextIO.hasNextLine()) { // 读取一行并去掉前后空格,避免匹配出错 String currentFlavor = TextIO.getLine().trim(); // 总数量累加 totalFlavors++; // 检查是否是Strawberry,忽略大小写更灵活 if (currentFlavor.equalsIgnoreCase("Strawberry")) { strawberryCount++; } } // 打印最终结果 System.out.println("口味总数量: " + totalFlavors); System.out.println("Strawberry口味出现次数: " + strawberryCount); } }
关键注意点
- 计数器的位置:必须把
totalFlavors和strawberryCount定义在while循环外面,这样它们的值才会在每次循环中持续累加,而不是被重置。 - 处理空格:用
trim()去掉每行文本前后的空格,避免比如" Strawberry "这种带空格的文本无法被匹配到。 - 大小写兼容:用
equalsIgnoreCase()代替equals(),这样不管文本里是strawberry、STRAWBERRY还是Strawberry都能被统计到。
如果运行时还是有问题,可以把你完整的代码贴出来,我们再一起排查细节~
内容的提问来源于stack exchange,提问作者Martineli
相关产品推荐
相关产品推荐

