Java单词频率计算器大小写不敏感计数不一致问题求助
解决单词频率计数不一致的问题
问题原因
你当前的代码在填充单词数组的过程中就计算频率:比如处理第2个单词Hi时,数组后面的hi、mark还没被读入,此时equalsIgnoreCase只能匹配到Hi自己,计数为1;而处理hi时,前面的Hi已经存在,计数就变成了2。这种边读边算的逻辑,导致大小写变体的单词因处理顺序不同,得到的计数不一致。
解决方案
把读入所有单词和计算频率拆成两个独立步骤:先完整读取所有单词到数组中,再遍历数组逐个计算每个单词的频率。这样计算时数组已经完全填充,能匹配到所有大小写变体的单词。
修改后的代码
import java.util.Scanner; public class LabProgram { public static int getWordFrequency(String[] f, int size, String c){ int count = 0; for (int j = 0; j < f.length; j++) { if (f[j] != null && f[j].equalsIgnoreCase(c)) { count++; } } return count; } public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int size = scnr.nextInt(); String[] f = new String[size]; int[] v = new int[size]; // 第一步:完整读取所有单词到数组 for (int i = 0; i < size; i++) { f[i] = scnr.next(); } // 第二步:遍历数组计算每个单词的频率 for (int i = 0; i < size; i++) { v[i] = getWordFrequency(f, size, f[i]); } // 输出结果 for(int i = 0; i < size; i++){ System.out.println(f[i] + " " + v[i]); } } }
验证示例输入
输入5 hey Hi Mark hi mark,输出结果为:
hey 1 Hi 2 Mark 2 hi 2 mark 2
完全符合预期的大小写统一计数要求。
内容的提问来源于stack exchange,提问作者PimpShrimp
相关产品推荐
相关产品推荐

