老师要求写一个图书管理系统,在管理员注册时要求输入id,姓名,性别,年龄,家庭住址等信息,在输入姓名时要求不能为空,输入空则提示重新输入,输入字符则继续输入其他信息。
我觉得逻辑很简单,但是自己就卡在这里了,百度了几个方法都没有成功,所以来求教各位大牛,拜托!
这里设置了管理员属性,一个空构造和含参构造,其中还有各个属性的set、get、toString方法,这里省略了。
public class Administrator {
public static void main(String[] args) {
List<String> l = new ArrayList<String>();
Administrator a = new Administrator();
String str = a.toString();
l.add(str);
System.out.println(l);
System.out.println(str);
}
private int adminId; //ID
private String adminRealName; //姓名
private String adminSex; //性别
private int adminAge; //年龄
private String adminAddress; //家庭住址
private int adminPhoneNumber; //电话号码
private String adminLoginName; //登录名
private String adminLonginPassword; //登录密码
private int adminState; //状态1/2/3
public Administrator() {
}
public Administrator(int adminId, String adminRealName, String adminSex, int adminAge, String adminAddress,
int adminPhoneNumber, String adminLoginName, String adminLonginPassword, int adminState) {
super();
this.adminId = adminId;
this.adminRealName = adminRealName;
this.adminSex = adminSex;
this.adminAge = adminAge;
this.adminAddress = adminAddress;
this.adminPhoneNumber = adminPhoneNumber;
this.adminLoginName = adminLoginName;
this.adminLonginPassword = adminLonginPassword;
this.adminState = adminState;
}
}
注册时输入各项信息,姓名设置不能为空
public class Register {
public static void main(String[] args) {
}
public static void register(){
Administrator a = new Administrator(); //空构造
System.out.println("Please register now..."); //提示:开始注册
Scanner s = new Scanner(System.in); //新建扫描器
//Id:用户输入,但是不能有相同,而且只能是数字
System.out.println("setAdminId:"); //设置管理员ID
a.setAdminId(s.nextInt());
//姓名:不能为空
for (int i = 0; i < 1; ) {
while (true) {
System.out.println("setAdminRealName:");
String AdminRealName = s.next();
if (AdminRealName.length() < 1) {
System.out.println("不能为空!");
i--;
break;
}
}
break;
}
//性别:必填,只能是男或女
System.out.println("setAdminSex:");
a.setAdminSex(s.next());
System.out.println("registed!");
System.out.println(a.toString());
s.close();
}
}
首先你for循环里是一个死循环 而你名字的输入是在控制台 而控制台的空格和空回车不会接收到输入流里 直到你有真输入再回车输入流才会接收 所以你永远进入不了if里。
一般我们会在前端页面做表单效验来控制或者在后端controller里判断不为字符串空字符串" " if(AdminRealName!=null AdminRealName.length>0){}
private 只能本类中才能访问,Java中可以继承私有属性吗?你看看
没有用到继承,是设置了get、set方法,通过方法是可以的吧
主要目的是实现输入格式不对的时候提示,然后重新输入,正确以后执行下一步
public int getAdminId() {
return adminId;
}
public void setAdminId(int adminId) {
this.adminId = adminId;
}
public String getAdminRealName() {
return adminRealName;
}
public void setAdminRealName(String adminRealName) {
this.adminRealName = adminRealName;
}
..........
@Hello拾忆: 你要判断输入的方法可以写在set方法里啊
@RockyLiang: 我之前也这么想过,但是提示一直不显示,一直回车光标一直往下走,不显示提示是怎么回事
public void setAdminRealName(String adminRealName) {
if(adminRealName.equals(null)) {
System.out.println("again!");
setAdminRealName(adminRealName);
}else {
this.adminRealName = adminRealName;
}
}
//调用
System.out.println("setAdminRealName:");
a.setAdminRealName(s.next());
@Hello拾忆:eclipse有调试器吗,你逐语句调试看有没有运行到你的输出语句呗
realName:
System.out.println("setAdminRealName:");
a.setAdminRealName(s.next());
if (a.getAdminRealName == null || a.getAdminRealName.length() < 1) {
System.out.println("不能为空!");
goto realName;
}