Java单词频率统计程序初始词频计算错误问题求助
问题分析
你的代码核心问题在于边读取单词边计算频率的逻辑错误:当处理第i个单词时,数组wordsList中只有前i+1个元素被赋值,后续元素都是默认的null。此时遍历整个数组统计频率,只能计算到当前单词在已读取部分的出现次数,无法包含后续还未读取的相同单词,这就是初始出现的单词频率计算错误、后续出现的单词能计算正确的原因。
修复后的代码
import java.util.Scanner; public class LabProgram { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int numberWords = scnr.nextInt(); String[] wordsList = new String[numberWords]; int[] frequency = new int[numberWords]; // 第一步:先读取所有单词到数组 for (int i = 0; i < numberWords; ++i) { wordsList[i] = scnr.next(); } // 第二步:遍历每个单词,统计其在整个数组中的出现次数 for (int i = 0; i < numberWords; ++i) { int count = 0; for (int j = 0; j < numberWords; ++j) { if (wordsList[i].equals(wordsList[j])) { count++; } } frequency[i] = count; } // 第三步:输出结果 for (int i = 0; i < numberWords; ++i) { System.out.println(wordsList[i] + " - " + frequency[i]); } } }
验证结果
使用你的测试输入:
6 pickle test rick Pickle test pickle
修复后的代码会输出你期望的结果:
pickle - 2 test - 2 rick - 1 Pickle - 1 test - 2 pickle - 2
补充说明:当前代码是大小写敏感的(pickle和Pickle被视为不同单词),如果需要忽略大小写匹配,可以将equals方法替换为equalsIgnoreCase。
内容的提问来源于stack exchange,提问作者redbull_luvr
相关产品推荐
相关产品推荐

