学生成绩管理系统小结(txt文件流版)

1.1 关于 Scanner的使用,输入流不够的问题

问题

1.多次实例化Scanner可能会导致输入流不够;

2.在每次使用一个函数后,当每一个函数后面有一个Scanner.close()时,在同时调用其他函数时可能会导致其他函数使用Scanner对象时,输入流关闭,可能会导致跳过当前输入部分,直接执行下一条语句;

解决

所以我们可以在定义函数时每次实例化一个不同的Scanner对象,并且在函数结束时用Scanner.close()将他关闭

或者,我们可以在main函数里实例化Scanner对象,然后将他作为参数传给需要使用的函数

1.2 怎样匹配一个字符串里的数字

for (Map.Entry<String, String> entry : use.entrySet()) {
                //先从Hashmap中取出value将他赋值给count_grade,然后调用Pattern和Matcher去匹配count_geade里面的数字,然后求和
                String count_grade = entry.getValue();
                Pattern pattern=Pattern.compile("\\d+");
                Matcher matcher=pattern.matcher(count_grade);
                //定义一个grade_group来放匹配好的各科成绩
                int []grade_group=new int[5];
                int i=0;
                //匹配到一个就放入数组
                while(matcher.find())
                {
                    String num=matcher.group();
                    grade_group[i]= Integer.parseInt(num);
                    i++;
                }
                //求和
                int count=0;
                for(int j=0;j<grade_group.length;j++)
                {
                    count+=grade_group[j];
                }
                System.out.println(entry.getKey()+":"+count);
            }

使用Pattern和Matcher去匹配,然后调用matcher.find()函数,当匹配到就可以将他放到一个我们定义好的数组中去

1.3 关于HashMap超出数组索引异常的问题

在使用HashMap时,一般将其分为key和value然后将他们存储在一个定义好的字符串数组中,为了区分key和value通常将其分开放在数组的【0】和【1】中,这个时候需要去判断这个数组,以防出现key或者value为空或者为null的情况,这个时候就会出现超出数组索引异常的问题

 try {
            FileReader fileReader = new FileReader("E:\\txt\\Student_grade.txt");
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line;
            while ((line = bufferedReader.readLine()) != null) { // 逐行读取文件内容
                String[] keyValue = line.split(":"); // 将每行按冒号分割成key和value
                if (keyValue.length == 2) { // 如果分割后长度为2,说明是有效的key:value对,
            不然就会出现超出数组索引的错误,md折磨死我了
                    users.put(keyValue[0], keyValue[1]); // 将key:value对存储到HashMap中
                }
            }
            bufferedReader.close(); // 关闭BufferedReader对象
            // 遍历HashMap,根据需要打印出相应的value
            for (Map.Entry<String, String> entry : users.entrySet()) {
                if (entry.getKey().equals(key)) {
                    System.out.println(entry.getKey()+":"+entry.getValue()); // 打印找到的value
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

1.4 自定义异常 

MyException类

public class MyException extends Exception
{
    public MyException()
    {
        super();
    }

    public  MyException(String message)
    {
       super(message);
    }

}
//判断账号密码是否正确,正确则跳转Student_function,错误则抛出错误,您的账号或密码错误!!!
        while (true) {
            if ((users.containsKey(Student_number)) && (users.get(Student_number).equals(Student_password)))
            {
                student.Student_function();
                break;
            } else {
                try {
                    //不正确就抛出错误
                    throw new MyException("您输入的账号或密码错误!!!");
                } catch (MyException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值