Java使用字符串数组输入、词频数组统计输出单词频率的实现问题
Java单词频率统计问题修复方案
你的现有代码逻辑框架已经基本正确,只需要修复两处小问题,再新增频率数组的赋值逻辑即可满足需求:
核心问题说明
- Scanner输入残留换行问题:调用
scnr.nextInt()读取数组长度后,输入缓冲区会残留一行换行符,导致后续第一个scnr.nextLine()读取到空字符串,需要额外调用一次nextLine()吃掉残留换行。 - 频率数组逻辑补充:你已经实现了统计单个单词频率的方法,只需要新建对应长度的int数组,遍历单词数组将每个位置的单词频率存入数组即可。
修复后完整代码
import java.util.Scanner; public class LabClass { public static int getFrequencyOfWord(String[] wordsList, int listSize, String currWord) { int freq = 0; for (int i = 0; i < listSize; i++) { // 这里也可以直接用equals对比字符串,compareTo等于0效果一致 if (wordsList[i].equals(currWord)) { freq++; } } return freq; } public static void main(String[] args) { Scanner scnr = new Scanner(System.in); System.out.println("Enter list Amount"); int listSize = scnr.nextInt(); // 吃掉nextInt残留的换行符,避免后续读取到空字符串 scnr.nextLine(); String[] wordsList = new String[listSize]; // 存储字符串的数组 int[] countArray = new int[listSize]; // 存储对应频率的数组 // 读取输入存入字符串数组 for (int i = 0; i < wordsList.length; i++) { wordsList[i] = scnr.nextLine().trim(); // 加trim可以去掉输入前后的多余空格 } // 统计每个位置单词的频率,存入频率数组 for (int i = 0; i < listSize; i++) { countArray[i] = getFrequencyOfWord(wordsList, listSize, wordsList[i]); } // 并排输出两个数组的对应元素,符合你要求的输出逻辑 for (int i = 0; i < listSize; i++) { System.out.println(wordsList[i] + " " + countArray[i]); } scnr.close(); } }
验证效果
输入示例:
5 joe jim jack jim joe
输出结果和你给出的示例完全一致:
joe 2 jim 2 jack 1 jim 2 joe 2
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

