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

Java统计功能实现:禁用数组、限制字符串操作的解决方案咨询

实现技巧

核心思路是用单个数值变量替代数组存储所有统计结果,同时直接用Scanner原生读取能力去掉所有不必要的字符串拼接操作:

  • 存储层替换:原逻辑每周仅需存储1个0~9的最小值,共18周,刚好可以用单个long类型变量按十进制位存储所有结果。提前确定位权:第1周的结果存在1017位,第2周存在1016位,依次类推,每计算完一周的最小值,就将总结果 += 最小值 * 当前位权,后续位权每次除以10即可,完全不需要数组。
  • 去掉字符串拼接:全程依托Scanner的读取能力做格式校验,不需要自己拼接字符串做匹配:
    • 周次校验:先读取第一个token,直接用equals校验是否等于固定字符串"Week",再读取周次数字,直接比较数字是否等于当前预期的周次,无任何字符串拼接操作。
    • 数据读取:每周对应5个数字,直接循环5次读取字节值,读取过程中同步计算最小值,不需要拼接字符串做格式匹配。
  • 输出适配:18周处理完成后,初始化除数为10^17,每次取总结果除以除数得到当前周的最小值,逐段输出内容避免字符串拼接,完成输出后取余更新总结果、除数除以10即可。
符合要求的代码实现
public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    long allResult = 0;
    long weight = 100000000000000000L;
    byte validWeekCount = 0;
    byte order = -1;

    while (++order < 18) {
        byte minVal = 9;
        // 校验输入是否结束
        if (!sc.hasNext()) {
            break;
        }
        // 校验Week标签
        String weekTag = sc.next();
        if (!"Week".equals(weekTag)) {
            System.err.println("Illegal Argument");
            sc.close();
            System.exit(-1);
        }
        // 校验周次顺序
        if (!sc.hasNextByte()) {
            System.err.println("Illegal Argument");
            sc.close();
            System.exit(-1);
        }
        byte currentWeek = sc.nextByte();
        if (currentWeek != order + 1) {
            System.err.println("Illegal Argument");
            sc.close();
            System.exit(-1);
        }
        // 读取5个数字计算最小值
        for (byte i = 0; i < 5; i++) {
            if (!sc.hasNextByte()) {
                System.err.println("Illegal Argument");
                sc.close();
                System.exit(-1);
            }
            byte num = sc.nextByte();
            if (num < minVal) {
                minVal = num;
            }
        }
        allResult += minVal * weight;
        weight /= 10;
        validWeekCount++;
    }
    // 输出统计结果
    long div = 100000000000000000L;
    for (byte i = 0; i < validWeekCount; i++) {
        long currentMin = allResult / div;
        System.out.print("Week ");
        System.out.print(i + 1);
        System.out.print(" ");
        for (long j = 0; j < currentMin; j++) {
            System.out.print("=");
        }
        System.out.println(">");
        allResult %= div;
        div /= 10;
    }
    sc.close();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:07