新来的关于学生管理系统的一个问题

7i 2018-08-07 11:25:36
自学阶段求大神解答
public static void UpdateStudent(ArrayList<Student> arr) {
System.out.println("输入你要修改的学生学号");
Scanner sc=new Scanner(System.in);
String id = sc.nextLine();
for(int x=0;x<arr.size();x++) {
Student s=arr.get(x);
if(s.getId().equals(id)) {
System.out.println("请输入姓名:");
String name=sc.nextLine();
System.out.println("请输入年龄:");
String age=sc.nextLine();
System.out.println("请输入居住地:");
String address=sc.nextLine();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
arr.set(x, s);
}
else {
System.out.println("学号不存在");
}
}


}
为什么无论键盘输入什么都是显示无学号?明明前面已经在系统中创建了几个学生。
而下面的程序只是在在外部加了一层判断,而且是在全部遍历完之后才修改,上面我自己写的想法是遍历过程中只要遇到学号一样直接修改属性,属性修改完成之后直接跳出循环不继续遍历,这样比全部遍历效率要高一些,但是水平所限写不出来。
我想知道的是为什么加了判断以后就可以完美运行?
如果按我的想法,上面的程序该如何修改?
谢谢解答。
public static void UpdateStudent(ArrayList<Student> arr) {
System.out.println("输入你要修改的学生学号");
Scanner sc=new Scanner(System.in);
String id = sc.nextLine();
int index = -1;
for(int x=0;x<arr.size();x++) {
Student s=arr.get(x);
if(s.getId().equals(id)) {
index = x;
break;

}
}
if(index==-1) {
System.out.println("学号不存在");

}else{
System.out.println("请输入姓名:");
String name=sc.nextLine();
System.out.println("请输入年龄:");
String age=sc.nextLine();
System.out.println("请输入居住地:");
String address=sc.nextLine();
Student s=new Student();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
arr.set(index, s);
}


}
...全文
149 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
7i 2018-08-08
  • 打赏
  • 举报
回复
引用 2 楼 IRainReally 的回复:
[quote=引用 1 楼 IRainReally 的回复:]
你输入什么都是显示无学号是因为你的if判断写在for循环里面了,所以你每次循环都会走这个if判断,所以比如你的arr里面有5个student,那么你输入的学号假设跟你arr里面的第3个学生学号是一样的,那你前面两个判断同样会走,前面就会出现两个无学号,然后循环也没跳出来,所以匹配到学号后,后面还会继续跳无学号,但是你修改还是可以修改的,下面这个是判断写在循环外面了,然后通过index来判断匹配,这样if只会走一次,所以不会有上面的情况
如果你实在要用你上面那种写法,你可以在if中加个return,然后把else里面的东西写在外面
public static void UpdateStudent(ArrayList<Student> arr) {
System.out.println("输入你要修改的学生学号");
Scanner sc = new Scanner(System.in);
String id = sc.nextLine();
for (int x = 0; x < arr.size(); x++) {
Student s = arr.get(x);
if (s.getId().equals(id)) {
System.out.println("请输入姓名:");
String name = sc.nextLine();
System.out.println("请输入年龄:");
String age = sc.nextLine();
System.out.println("请输入居住地:");
String address = sc.nextLine();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
arr.set(x, s);
return;
}
}
System.out.println("学号不存在");
}
[/quote] 感谢,看了你说的之后知道逻辑错误在哪里了。太感谢了
Vilen7 2018-08-07
  • 打赏
  • 举报
回复
引用 1 楼 IRainReally 的回复:
你输入什么都是显示无学号是因为你的if判断写在for循环里面了,所以你每次循环都会走这个if判断,所以比如你的arr里面有5个student,那么你输入的学号假设跟你arr里面的第3个学生学号是一样的,那你前面两个判断同样会走,前面就会出现两个无学号,然后循环也没跳出来,所以匹配到学号后,后面还会继续跳无学号,但是你修改还是可以修改的,下面这个是判断写在循环外面了,然后通过index来判断匹配,这样if只会走一次,所以不会有上面的情况
如果你实在要用你上面那种写法,你可以在if中加个return,然后把else里面的东西写在外面
public static void UpdateStudent(ArrayList<Student> arr) {
System.out.println("输入你要修改的学生学号");
Scanner sc = new Scanner(System.in);
String id = sc.nextLine();
for (int x = 0; x < arr.size(); x++) {
Student s = arr.get(x);
if (s.getId().equals(id)) {
System.out.println("请输入姓名:");
String name = sc.nextLine();
System.out.println("请输入年龄:");
String age = sc.nextLine();
System.out.println("请输入居住地:");
String address = sc.nextLine();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
arr.set(x, s);
return;
}
}
System.out.println("学号不存在");
}
Vilen7 2018-08-07
  • 打赏
  • 举报
回复
你输入什么都是显示无学号是因为你的if判断写在for循环里面了,所以你每次循环都会走这个if判断,所以比如你的arr里面有5个student,那么你输入的学号假设跟你arr里面的第3个学生学号是一样的,那你前面两个判断同样会走,前面就会出现两个无学号,然后循环也没跳出来,所以匹配到学号后,后面还会继续跳无学号,但是你修改还是可以修改的,下面这个是判断写在循环外面了,然后通过index来判断匹配,这样if只会走一次,所以不会有上面的情况

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧