The_dream1121 2024-05-12 14:18 采纳率: 88.2%
浏览 0
已结题

Java代码错误,文件读取计算上


package Student;

import java.util.Arrays;
import java.util.Scanner;
import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

public class CalculateGrade {
    public static void main(String[] args) {
        try (Scanner sc = new Scanner(new File("grade.txt"));
             BufferedWriter writer = new BufferedWriter(new FileWriter("result.txt"))) {
            int sum = 0, count = 0, max = 0, min = 100;
            String line;
            while (sc.hasNext()) {
                line = sc.nextLine();
                String[] info = line.split(" ");
                int grade;
                grade = Integer.parseInt(Arrays.toString(info));
                sum += grade;
                count++;
                if (grade > max) {
                    max = grade;
                }
                if (grade < min) {
                    min = grade;
                }
            }
            double average = (double) sum / count;
            writer.write("最高分:" + max + "\n");
            writer.write("最低分:" + min + "\n");
            writer.write("平均分:" + average + "\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

img

img

  • 写回答

5条回答 默认 最新

  • 笑面虎 2024-05-12 14:18
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是在运行Java程序时遇到的NumberFormatException异常。这个异常通常发生在尝试将一个字符串转换为数字时,但是字符串的格式并不符合数字的格式。

    【图片内容】:

    • 第一张图片显示了错误信息,指出在尝试将字符串"[张三, 01, 88]"转换为整数时出现了NumberFormatException
    • 第二张图片是grade.txt文件的内容,包含了学生的名字、编号和成绩,用空格分隔。

    【问题出现原因】:问题出现的原因是在代码中,您尝试使用Arrays.toString(info)将数组转换为字符串,然后直接将这个字符串转换为整数。但是Arrays.toString(info)生成的是一个描述数组内容的字符串,而不是数组中的某个具体元素的值。因此,当您尝试将这个字符串表示的数组内容转换为整数时,就会出现NumberFormatException

    【问题解决方案】:为了解决这个问题,您需要修改代码,使其能够正确地从数组info中获取成绩,并将其转换为整数。下面是修改后的代码:

    package Student;
    
    import java.io.*;
    import java.util.Scanner;
    
    public class CalculateGrade {
        public static void main(String[] args) {
            try (Scanner sc = new Scanner(new File("grade.txt"));
                 BufferedWriter writer = new BufferedWriter(new FileWriter("result.txt"))) {
                int sum = 0, count = 0, max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;
                while (sc.hasNext()) {
                    String[] info = sc.nextLine().split(" ");
                    // 假设成绩是第三个元素
                    int grade = Integer.parseInt(info[2]);
                    sum += grade;
                    count++;
                    if (grade > max) {
                        max = grade;
                    }
                    if (grade < min) {
                        min = grade;
                    }
                }
                double average = (double) sum / count;
                writer.write("最高分:" + max + "\n");
                writer.write("最低分:" + min + "\n");
                writer.write("平均分:" + average + "\n");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    【提供代码】:上面的代码是修改后的版本,它将正确地读取文件中的信息,并计算最高分、最低分和平均分。

    【代码运行方式】:您需要将这段代码保存为.java文件,然后使用Java编译器编译并运行。确保您的系统上安装了Java Development Kit (JDK),并且grade.txt文件位于与您的Java程序相同的目录中。

    【代码预期运行结果】:

    最高分:88
    最低分:58
    平均分:74.0
    

    这个结果是根据您提供的grade.txt文件内容计算得出的。

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月25日
  • 创建了问题 5月12日