``` public String updateid(String id) {
String s = "";
for (int k = 0; k < Memory.userList.length; k++) {
User user = Memory.userList[k];
String id1 = Memory.userList[k].getId();
if (id.equals(id1)) {
s = "查询到相关信息为: " + Memory.userList[k];
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的个人密码");
Memory.userList[k].setPassword(sc.next());
System.out.println("请输入要修改的家庭住址");
Memory.userList[k].setAddress(sc.next());
System.out.println("请输入要修改的电话号码");
Memory.userList[k].setPhone(sc.next());
} else {
return s = "信息错误,修改失败!!";
}
System.out.println("修改成功!");
return s = "修改的个人信息为:" + Memory.userList[k];
}
return s = "修改失败!";
}
if (c == 2) {
System.out.println("请输入您的用户id:");
String s = sc.next();
System.out.println(dao.updateid(s));
}
```
你贴的代码的核心逻辑是:
第10行【if (id.equals(id1)) 】是判断传入的id和Memory.userList[k]的id是否相等,相等则进入11-23行的修改逻辑,然后执行第28-29行返回修改成功相应的信息;
如果不相等则执行24-25行,返回修改失败的信息。
所以第6行的循环只会执行一次,即k为0的那次。
改起来很简单,把25行的:【return s = "信息错误,修改失败!!";】
改为:【continue;】即可,如果不相等不应该直接返回,而是进行下一次判断
不能修改是报错吗
你的问题在于return s = "信息错误,修改失败!!";
这句话一执行你的程序就结束了。
所以不能使用return语句,改成continue;
就行了
欢迎使用用户管理系统
1.登录
2.退出
请输入操作功能
1
请输入用户名:
4
请输入密码:
4
普通用户操作功能
1.查看全部用户信息
2.按年龄查看用户信息
3.修改自己的用户信息
0.返回
请输入你的操作功能:
3
普通用户信息修改*
1.根据用户名修改信息 2.根据用户id修改信息
2
请输入您的用户id:
4
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "entity.User.getId()" because "db.Memory.userList[k]" is null
at dao.UserDAO.updateid(UserDAO.java:207)
at pages.Test.main(Test.java:198)