You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用字符串数组输入、词频数组统计输出单词频率的实现问题

Java单词频率统计问题修复方案

你的现有代码逻辑框架已经基本正确,只需要修复两处小问题,再新增频率数组的赋值逻辑即可满足需求:

核心问题说明

  1. Scanner输入残留换行问题:调用scnr.nextInt()读取数组长度后,输入缓冲区会残留一行换行符,导致后续第一个scnr.nextLine()读取到空字符串,需要额外调用一次nextLine()吃掉残留换行。
  2. 频率数组逻辑补充:你已经实现了统计单个单词频率的方法,只需要新建对应长度的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:15:03