如何修复Java方法统计文本文件中字母'a'数量的错误
问题修复:统计文本文件中字母'a'的出现次数
先把原代码里的问题逐个揪出来:
- 类型不匹配警告:
list.subList(x,x+1)返回的是List<String>,拿它和字符'a'用equals比较完全不对,类型根本不沾边,这就是Eclipse警告的原因。 - if语句无效:
if (xxx);后面的分号直接结束了if块,不管条件真假,counter++都会执行,这直接导致计数完全错误。 - 循环边界错误:
x < list.size()-1会跳过最后一个元素,应该写成x < list.size()才能遍历所有单词。 - 核心逻辑错误:原代码只判断整个单词是不是等于"a",但需求是统计所有字母'a'的出现次数——比如单词"apple"里的'a'也要算进去,不是只统计单独的"a"单词。
下面是修复后的完整代码:
package module4labs; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Module4Labs { public static void main(String[] args) { new Module4Labs(); } public Module4Labs() { // 这里没必要转成double,直接用int接收就行 int problemSolution = Problem9(new File("Problem9.txt")); System.out.println(problemSolution); } // Problem 9: 统计字母'a'的出现次数 public int Problem9(File file) { int counter = 0; try { Scanner input = new Scanner(file); // 不需要ArrayList存所有单词,直接边读边处理更高效 while (input.hasNext()) { String word = input.next(); // 遍历当前单词的每个字符 for (char c : word.toCharArray()) { // 判断是否为小写'a',如果需要统计大写'A'可以加|| c == 'A' if (c == 'a') { counter++; } } } input.close(); } catch (FileNotFoundException e) { System.out.println(file + " 文件未找到。"); } return counter; } }
关键修改说明:
- 移除了没必要的
ArrayList,直接读取每个单词后立即遍历字符统计,节省内存也更高效。 - 遍历每个单词的每一个字符,判断是否等于
'a',完全符合统计单个字母的需求。 - 删掉了if语句后面的分号,让计数逻辑只在条件成立时执行。
- 修正了主方法里的类型转换问题——
Problem9返回int,没必要转成double。 - 如果需要同时统计大写'A',只需把判断条件改成
if (c == 'a' || c == 'A')即可。
内容的提问来源于stack exchange,提问作者JustSomeProgrammer
相关产品推荐
相关产品推荐

