Java无Stream/HashMap/BufferedReader读取文本计算学生GPA问题
实现逻辑说明
第一步:文件读取方案
因为禁止使用BufferedReader,可以使用FileReader配合字符缓存逐行读取,或者使用Scanner类读取文本每一行,两类API均不在禁止范围内。
第二步:逐行分支处理逻辑
文件结构是固定分块的,逐行读取后按行特征匹配对应处理规则即可:
- 空行:直接跳过,不做处理
- 含
:的元数据行:这类行存储学生基础信息、总学分统计数据,直接按:将行拆分为两部分,后半部分去除首尾空白后,存入提前定义好的对应变量即可(比如studentName、studentId、totalAttemptedCredits等,所有字段固定无需使用HashMap) - 课程表头行:当读取到内容包含
Course Code的行时,标记后续行均为课程数据行,切换处理逻辑 - 课程数据行:行内字段均以逗号分隔,直接按逗号拆分后,每个元素去除首尾空白即可依次获得「课程代码、课程名称、学分、成绩」四个字段值
第三步:GPA计算逻辑
因为禁止使用HashMap,可通过两个索引对齐的数组实现成绩等级到绩点的映射:
// 常见4分制绩点映射规则,可根据作业要求调整对应关系 String[] gradeLevel = {"A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F"}; double[] gradePoint = {4.0, 3.7, 3.3, 3.0, 2.7, 2.3, 2.0, 1.7, 1.3, 1.0, 0.0};
拿到每门课的成绩后遍历数组匹配得到对应绩点,按如下公式计算GPA:
GPA = (每门课绩点 × 对应课程学分)的总和 ÷ 所有有效课程的学分总和
第四步:输出文件生成
使用FileWriter类,将需要输出的学生信息、计算得到的GPA等内容逐行写入目标文件即可,全程不需要用到Stream API。
内容的提问来源于stack exchange,提问作者Abdulaziz
相关产品推荐
相关产品推荐

