慧咕咕 2023-05-05 20:05 采纳率: 87%
浏览 29
已结题

Java编程问题,代码没报错,运行结果有错误提示,求解错误原因和改正方法


package System;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class StudentManagementSystem {
    private static List<Student> students = new ArrayList<>();
    private static int undergraduateCount = 0;
    private static int graduateCount = 0;

    public static void main(String[] args) {
             while (true) {
                    System.out.println("请选择操作:");
                    System.out.println("1. 增加学生信息");
                    System.out.println("2. 修改学生信息");
                    System.out.println("3. 删除学生信息");
                    System.out.println("4. 浏览学生信息");
                    System.out.println("5. 查询学生信息");
                    System.out.println("6. 排序学生信息");
                    System.out.println("7. 统计学生人数");
                    System.out.println("0. 退出系统");
                    try (Scanner scanner = new Scanner(System.in)){
                    int chosen = scanner.nextInt();
                    switch (chosen) {
                        case 1:
                            addStudent();
                            break;
                        case 2:
                            modifyStudent();
                            break;
                        case 3:
                            deleteStudent();
                            break;
                        case 4:
                            browseStudents();
                            break;
                        case 5:
                            queryStudents();
                            break;
                        case 6:
                            sortStudents();
                            break;
                        case 7:
                            countStudents();
                            break;
                        case 0:
                            System.out.println("谢谢使用!");
                            return;
                        default:
                            System.out.println("输入有误,请重新输入!");
                            break;
                    }
                }
            catch (NumberFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
             }
        }

    private static void addStudent() {
        Scanner scanner = new Scanner(System.in);
        try {
            System.out.println("请选择学生类型:");
            System.out.println("1. 本科生");
            System.out.println("2. 研究生");
            int choice = scanner.nextInt();
            System.out.println("请输入学号:");
            String id = scanner.next();
            System.out.println("请输入姓名:");
            String name = scanner.next();
            System.out.println("请输入年龄:");
            int age = scanner.nextInt();
            System.out.println("请输入班级:");
            String className = scanner.next();
            System.out.println("请输入省份:");
            String province = scanner.next();
            System.out.println("请输入城市:");
            String city = scanner.next();
            System.out.println("请输入街道:");
            String street = scanner.next();
            System.out.println("请输入门牌号:");
            String houseNumber = scanner.next();
            Address address = new Address(province, city, street, houseNumber);
            System.out.println("请输入各科成绩(用逗号分隔):");
            String[] scoreStrings = scanner.next().split(",");
            double[] scores = new double[scoreStrings.length];
            for (int i = 0; i < scoreStrings.length; i++) {
                scores[i] = Double.parseDouble(scoreStrings[i]);
            }
            if (choice == 1) {
                System.out.println("请输入专业:");
                String major = scanner.next();
                Undergraduate undergraduate = new Undergraduate(id, name, age, className, address, scores, major);
                students.add(undergraduate);
                undergraduateCount++;
            } else {
                System.out.println("请输入导师:");
                String supervisor = scanner.next();
                System.out.println("请输入研究方向:");
                String researchArea = scanner.next();
                Graduate graduate = new Graduate(id, name, age, className, address, scores, supervisor, researchArea);
                students.add(graduate);
                graduateCount++;
            }
            scanner.close(); 
        } catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("添加成功!");
    }

    private static void modifyStudent() {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("请输入学号:");
            String id = scanner.nextLine();
            for (Student student : students) {
                if (student.getId().equals(id)) {
                    System.out.println("请选择要修改的信息:");
                    System.out.println("1. 姓名");
                    System.out.println("2. 年龄");
                    System.out.println("3. 班级");
                    System.out.println("4. 地址");
                    System.out.println("5. 各科成绩");
                    int choice = scanner.nextInt();
                    scanner.nextLine();
                    switch (choice) {
                        case 1:
                            System.out.println("请输入新的姓名:");
                            String name = scanner.nextLine();
                            student.setName(name);
                            System.out.println("修改成功!");
                            break;
                        case 2:
                            System.out.println("请输入新的年龄:");
                            int age = scanner.nextInt();
                            student.setAge(age);
                            System.out.println("修改成功!");
                            break;
                        case 3:
                            System.out.println("请输入新的班级:");
                            String className = scanner.nextLine();
                            student.setClassName(className);
                            System.out.println("修改成功!");
                            break;
                        case 4:
                            System.out.println("请输入新的省份:");
                            String province = scanner.nextLine();
                            System.out.println("请输入新的城市:");
                            String city = scanner.nextLine();
                            System.out.println("请输入新的街道:");
                            String street = scanner.nextLine();
                            System.out.println("请输入新的门牌号:");
                            String houseNumber = scanner.nextLine();
                            Address address = new Address(province, city, street, houseNumber);
                            student.setAddress(address);
                            System.out.println("修改成功!");
                            break;
                        case 5:
                            System.out.println("请输入新的各科成绩(用逗号隔开):");
                            String[] scores = scanner.nextLine().split(",");
                            for (int i = 0; i < scores.length; i++) {
                                student.getScores()[i] = Double.parseDouble(scores[i]);
                            }
                            System.out.println("修改成功!");
                            break;
                        default:
                            System.out.println("输入有误,请重新选择!");
                            break;
                    }
                    return;
                }
            }
        } catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("未找到该学生!");
    }

    private static void deleteStudent() {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("请输入学号:");
            String id = scanner.nextLine();
            for (int i = 0; i < students.size(); i++) {
                if (students.get(i).getId().equals(id)) {
                    students.remove(i);
                    System.out.println("删除成功!");
                    return;
                }
            }
        } 
        System.out.println("未找到该学生!");
    }

    private static void browseStudents() {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("请选择要浏览的学生类型:");
            System.out.println("1. 本科生");
            System.out.println("2. 研究生");
            int choice = scanner.nextInt();
            scanner.nextLine();
            switch (choice) {
                case 1:
                    System.out.println("本科生信息如下:");
                    for (Student student : students) {
                        if (student instanceof Undergraduate) {
                            System.out.println(student);
                        }
                    }
                    break;
                case 2:
                    System.out.println("研究生信息如下:");
                    for (Student student : students) {
                        if (student instanceof Graduate) {
                            System.out.println(student);
                        }
                    }
                    break;
                default:
                    System.out.println("输入有误,请重新选择!");
                    break;
            }
        }
    }

    private static void queryStudents() {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("请选择要查询的方式:");
            System.out.println("1. 学号");
            System.out.println("2. 姓名");
            System.out.println("3. 班级");
            int choice = scanner.nextInt();
            scanner.nextLine();
            switch (choice) {
                case 1:
                    System.out.println("请输入学号:");
                    String id = scanner.nextLine();
                    for (Student student : students) {
                        if (student.getId().equals(id)) {
                            System.out.println(student);
                            return;
                        }
                    }
                    System.out.println("未找到该学生!");
                    break;
                case 2:
                    System.out.println("请输入姓名:");
                    String name = scanner.nextLine();
                    for (Student student : students) {
                        if (student.getName().equals(name)) {
                            System.out.println(student);
                        }
                    }
                    break;
                case 3:
                    System.out.println("请输入班级:");
                    String className = scanner.nextLine();
                    for (Student student : students) {
                        if (student.getClassName().equals(className)) {
                            System.out.println(student);
                        }
                    }
                    break;
                default:
                    System.out.println("输入有误,请重新选择!");
                    break;
            }
        }
    }

    private static void sortStudents() {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("请选择要排序的方式:");
            System.out.println("1. 各科成绩");
            System.out.println("2. 总成绩");
            System.out.println("3. 学号");
            int choice = scanner.nextInt();
            scanner.nextLine();
            switch (choice) {
                case 1:
                    Collections.sort(students, new Comparator<Student>() {
                        @Override
                        public int compare(Student o1, Student o2) {
                            double sum1 = 0, sum2 = 0;
                            for (double score : o1.getScores()) {
                                sum1 += score;
                            }
                            for (double score : o2.getScores()) {
                                sum2 += score;
                            }
                            return Double.compare(sum2, sum1);
                        }
                    });
                    break;
                case 2:
                    Collections.sort(students, new Comparator<Student>() {
                        @Override
                        public int compare(Student o1, Student o2) {
                            double sum1 = 0, sum2 = 0;
                            for (double score : o1.getScores()) {
                                sum1 += score;
                            }
                            for (double score : o2.getScores()) {
                                sum2 += score;
                            }
                            return Double.compare(sum2, sum1);
                        }
                    });
                    break;
                case 3:
                    Collections.sort(students, new Comparator<Student>() {
                        @Override
                        public int compare(Student o1, Student o2) {
                            return o1.getId().compareTo(o2.getId());
                        }
                    });
                    break;
                default:
                    System.out.println("输入有误,请重新选择!");
                    break;
            }
        }
        System.out.println("排序结果如下:");
        for (Student student : students) {
            System.out.println(student);
        }
    }

    private static void countStudents() {
        int undergraduateCount = 0;
        int graduateCount = 0;
        for (Student student : students) {
            if (student instanceof Undergraduate) {
                undergraduateCount++;
            } else if (student instanceof Graduate) {
                graduateCount++;
            }
        }
        System.out.println("本科生人数:" + undergraduateCount);
        System.out.println("研究生人数:" + graduateCount);
        System.out.println("总人数:" + students.size());
    }

    public static int getUndergraduateCount() {
        return undergraduateCount;
    }

    public static void setUndergraduateCount(int undergraduateCount) {
        StudentManagementSystem.undergraduateCount = undergraduateCount;
    }

    public static int getGraduateCount() {
        return graduateCount;
    }

    public static void setGraduateCount(int graduateCount) {
        StudentManagementSystem.graduateCount = graduateCount;
    }
}

这是一个Java学生管理系统,代码没报错,但运行结果有问题,具体输入数据和输出提示信息如下。求解错误原因和具体改正方法

img

img

  • 写回答

2条回答 默认 最新

  • pzzhao 2023-05-06 08:52
    关注

    你这种try with resourse 的写法,会自动关闭流,但是Scanner这个流没必要关闭,程序结束会自动释放流。

    并且你关闭之后,它会连带着将system.in这个流也关闭,会导致本次程序运行中都无法再次使用它。

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

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵