思路
在主函数中创建学生集合,创建学生对象,在学生类中写增删改查方法
1. 测试类
2. 学生类
细节
1. 测试类
-
主函数
包含创建集合对象,实例化本类调用方法
-
学生管理方法
注意点:
-
需要把创建集合写在主函数中,学生管理方法以集合为参数,这样每次调方法的时候使用的是同一个集合,否则每次重新调方法都会新创建一个集合存放一名学生
-
终止程序System.exit(0),关闭JVM虚拟机
2. 学生类
-
四个私有属性
有参无参构造器,get()、set()方法,可用快捷键Alt+Insert生成
-
add()
注意点:
-
复制的时候注意scanner对象1、2、3改没改,set什么属性改没改
-
年龄的数据类型
-
delete()
注意点:
-
我最开始写的是for (int i = 0; i <= students.size(); i++),然后如果i==students.size(),就说没有该学生,这样写报错,经过debug之后找到原因,虽然是0~ students.size()-1,本意是再轮一次就报没学生,但是i==students.size()仍然要做if判断,就是做students.get(i)的操作,索引下标越界,所以我把这个操作改成了,如果找到了就退出for循环,如果没找到,就说明所有的集合元素都没走if判断没退出for循环,就接着走,输出没有该学生再退出循环(这个时候break已经没用了,因为已经是最后一个i,咋的也得退出来)
-
还有,最开始我写的判断语句是if (students.get(i).getName().==sname),报错,经过debug发现一直把他判断为false,改成if (students.get(i).getName().equals(sname))就可以了,个人分析原因应该是获取的名字是在对象中,指向的内存不一样,equals方法比较的是字符串内容(个人理解,如果有异议请指点)
-
update()
键盘分别输入需要修改对象的姓名与需要修改的属性
如果for循环遍历集合中存在该学生,则用switch-case做相应的修改操作
否则为不存在该学生并退出循环
-
select()
这个不足在于控制不好字符串长度导致数据对不齐,以后学到更骚的操作之后再回来改
测试
改bug的时候已经输了无数遍了知道好使了就行了
标准答案
-
答案在主函数中用死循环控制,我用的是主函数外的方法递归
-
只需要一个new一个Scanner对象就可以一直输入
-
答案里在显示信息的函数里加了个if判断,如果还没添加信息就提示一句话,但是为了不执行剩下的内容,可以用一句return;不再执行剩下的内容,如果是我写的话我可能会把剩下的内容用else括起来
-
答案里添加学生信息的方法中加了一个方法判断学生学号是否重复,确保唯一性,用if判断即可(草率了,太麻烦)
这其中有个isUsed(array,sid)方法,来判断集合对象array中是否使用过sid,返回布尔值