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

文本文件数据读取异常导致睡眠质量平均分始终输出0的问题求助

文本文件数据读取异常导致睡眠质量平均分始终输出0的问题求助

看起来你遇到了一个数据解析的小bug,导致睡眠质量的平均分一直输出0,我来帮你梳理下问题出在哪以及怎么修复:

核心问题分析

你在计算睡眠质量平均分(av2)的代码块里犯了一个关键的解析错误:

  • 你的数据格式是 睡眠时间 // 睡眠质量 // 改进建议,但你在读取时,错误地把睡眠时间的字符串(比如7.2)去转成int类型,而不是去读取分割后的第二个部分(也就是睡眠质量的数值)。
  • 因为睡眠时间是带小数的double字符串,转int会抛出NumberFormatException,而你在catch块里直接忽略了这个异常,没有做任何处理,导致存储睡眠质量的列表一直是空的,av2始终是0,最后输出0/7也就是0。

具体修复步骤

  1. 修正睡眠质量的解析逻辑
    把计算av2的代码块里,从解析parts[0]改成解析parts[1],同时优化分割和异常提示逻辑,避免空行或格式错误的行影响结果:

    try {
        File file = new File("data.txt");
        Scanner scanner = new Scanner(file);
        ArrayList<Integer> sleepQualityList = new ArrayList<>(); // 重命名变量让语义更清晰
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine().trim();
            if (line.isEmpty()) continue; // 跳过空行
            String[] parts = line.split(" // "); // 用完整的分隔符分割,避免多余空格干扰
            if (parts.length < 2) continue; // 跳过格式错误的行
            String qualityStr = parts[1].trim();
            try {
                int quality = Integer.parseInt(qualityStr);
                sleepQualityList.add(quality);
            } catch (NumberFormatException ex) {
                System.out.println("解析睡眠质量失败,跳过该行:" + line);
            }
        }
        int startIndex = Math.max(0, sleepQualityList.size() - 7);
        for (int w = startIndex; w < sleepQualityList.size(); w++) {
            av2 += sleepQualityList.get(w);
        }
        scanner.close();
    } catch (FileNotFoundException e) {
        System.out.println("File not found.");
        e.printStackTrace();
    }
    
  2. 其他可以优化的小细节

    • 不需要创建两个Scanner对象读取输入,一个Scanner就足够,避免出现输入读取的异常:
      Scanner in = new Scanner(System.in);
      // 移除多余的Scanner inpart2 = new Scanner(System.in);
      
    • 读取改进建议前,要先处理之前nextInt()留下的换行符,避免直接读取到空字符串:
      // 在读取改进建议前,先消费掉换行符
      in.nextLine();
      System.out.println("What could be improved?");
      ip = in.nextLine();
      
    • 把睡眠质量的输入验证改成循环,直到用户输入合法值,而不是只提示一次:
      System.out.println("Sleep quality 1-10");
      do {
          while (!in.hasNextInt()) {
              System.out.println("请输入整数类型的有效评分(1-10)");
              in.next();
          }
          q = in.nextInt();
          if(q>10||q<1){
              System.out.println("Invalid input,请输入1-10之间的数值");
          }
      } while(q>10||q<1);
      

测试验证

修复后,用你提供的样本数据测试的话,睡眠质量分别是4、8、9、8、10、3、2,总和是44,整数除法下输出6/10 quality,如果你想要小数结果,可以把av2改成double类型,计算时用(double)av2/7。

备注:内容来源于stack exchange,提问作者Almost A Mammal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:33:00