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

Java编程求助:如何统计指定数值区间内元素的出现频率?

问题描述

需完成实验任务:编写Java程序读取包含1000个10至59之间随机整数的文件,生成对应区间(10-19、20-29、30-39、40-49、50-59)的频率表。

RandomInt.txt文件示例内容:

50
11
55
12
20
13
53
34
19
39
58
58
24
59
28
10
52
18
55
59
28
29
54

目前已成功读取文件中的所有整数,但区间频率统计结果均为1。现需实现将每个整数归类到对应区间并统计区间内元素的总出现频率,当前统计单个整数频率的代码如下:

import java.io.*;
import java.util.*;

public class Demo3 
{
    public static void main(String[] args) throws FileNotFoundException 
    {
        File file = new File("RandomInt.txt");
        Scanner sc = new Scanner(file); 
        SequentialSearchST<String, Integer> st = new SequentialSearchST<String, Integer>();
        
        
        int dataSet = 0;
        while(sc.hasNext())
        {
            String key = sc.next();
            dataSet++;
            
            if(st.contains(key))
            {
                st.put(key, st.get(key) + 1);
            }
            else
            {
                st.put(key, 1);
            }
        }
        
        for (String s : st.keys())
        {
            System.out.println("Integer: " + s + " Frequency: " + st.get(s));
        }
        System.out.println("Data Set Size: " + dataSet);
        
    }

}
解决方案

当前代码是统计单个整数的出现次数,要实现区间统计,需做以下核心调整:

  1. 将读取的字符串转为整数:只有转为数值类型,才能进行区间范围判断。
  2. 生成区间标识作为统计Key:把每个整数映射到对应的区间字符串(如"10-19"),以此作为统计的Key。
  3. 累加区间频率:针对区间Key进行计数,逻辑和单个整数统计一致,但统计对象从单个数字变为区间。

修改后的代码如下:

import java.io.*;
import java.util.*;

public class Demo3 
{
    public static void main(String[] args) throws FileNotFoundException 
    {
        File file = new File("RandomInt.txt");
        Scanner sc = new Scanner(file); 
        SequentialSearchST<String, Integer> st = new SequentialSearchST<String, Integer>();
        
        int dataSet = 0;
        while(sc.hasNext())
        {
            // 将读取的字符串转为整数
            int num = Integer.parseInt(sc.next());
            dataSet++;
            
            // 确定当前数字所属的区间
            String intervalKey;
            if (num >= 10 && num <= 19) {
                intervalKey = "10-19";
            } else if (num >= 20 && num <= 29) {
                intervalKey = "20-29";
            } else if (num >= 30 && num <= 39) {
                intervalKey = "30-39";
            } else if (num >= 40 && num <= 49) {
                intervalKey = "40-49";
            } else if (num >= 50 && num <= 59) {
                intervalKey = "50-59";
            } else {
                // 处理超出10-59范围的异常数据
                intervalKey = "Invalid";
            }
            
            // 更新区间的频率计数
            if(st.contains(intervalKey))
            {
                st.put(intervalKey, st.get(intervalKey) + 1);
            }
            else
            {
                st.put(intervalKey, 1);
            }
        }
        
        // 输出区间频率表
        for (String s : st.keys())
        {
            System.out.println("区间: " + s + " 频率: " + st.get(s));
        }
        System.out.println("数据集大小: " + dataSet);
    }
}

简化优化方案

如果区间是固定的整十数划分,可以用数学计算简化区间判断,代码更简洁:

// 替换原区间判断逻辑
int tens = num / 10;
intervalKey = tens * 10 + "-" + (tens * 10 + 9);

内容的提问来源于stack exchange,提问作者V01D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:45:37