完成如下系统的开发
记录一下我在写具有如下,功能的代码时的小问题
一、先设计登录界面,
软件启动时,首先进入登录界面进行注册和登录功能。
(是否有账号的实现):
1、用User类存储用户,包含账号名和密码
2、利用Arraylist存储用户对象,
(检查账号密码输入是否正确的方法)
1、账号长度(在3-15字符串之间,错误提示),
2、密码():(在6-22字符之间,错误提示)
(一)、用户登录
1、进入登陆界面后,用户输入账户和密码,
2、根据账户和密码去存储用户信息的地方查找,若存在用户,对比用户名和密码,不相同则输出提示!
3、用户不存在则需要去注册
4、密码不相同可以则有5次机会!(
bug:第一次错误:不管是不是同一个账号。输入密码的机会就会减少
)
解决方法:
(1.)输入密码前判断账号之前有没有输入,
(2.)需要给每一个账号存放一个记录之前在登录时输入的次数(),输入一次减一次
(3.)根据每个账号中的输入次数,如果次数为0,程序结束
(二)、用户注册
1、根据提示输入账号长度(在3-15字符串之间,错误提示),和密码:(在6-22字符之间,错误提示)
2、账号需要去查找数据中是否有相同的账号,有的话不能注册,没有可以注册
3、注册完毕后登录
以上只是我在设计该小项目时详细做的登录操作,接下来就是自己在写的过程中,自己没注意到的点。
我在这里面用数组和Arrarylist进行数据的存储,我写了一个方法,大致内容时我要通过这个方法去查找我在数组中存储的对象,找到对象里存储的用户ID。
错误情况:
当时我用下面的代码进行对我输入的ID值进行查找,然后确定这个对象在Arraylist中的索引值,也就是记录了temp。在后面的功能我可以用到这个索引值去调用我输入的这个Id对应的对象的其他属性(我经常这么干!),好接下来,我其实想让它在循环结束的时候,如果没找到对应的ID的话,抛出一个异常,然后告诉我无我输入的id号!
这下面的代码的问题就是:它没有完全遍历,如果第一遍就执行else里的代码块,
throw之后循环就不再执行了。
(这就是我的脑瘫时刻!!!)
//介绍一下,这里我用pro是我创建的Arraylist对象的引用(Arrarylist的对象名),projectID是我当时在接受键盘输入时的一个变量,是我从键盘输入的数据。
int temp = 0;
for (int i = 0; i < pro.size(); i++) {
//如果getProId == projiectID,停止这个循环,注:我查找的这个Id是唯一的并不重复
if (pro.get(i).getProId() == projectID) {
temp = i ;
break;
} else {
throw new TeamException("无该项目id,请输入正确的项目id!");
}
}
修改
我做了如下修改:
利用一个bool值来存储信息,然后判断这个bool值有没有改变,没有改变我就抛出异常。
boolean flagPID = false;
for (int i = 0; i < pro.size(); i++) {
if (pro.get(i).getProId() == projectID) {
flagPID = false;
temp = i;
break;
}
flagPID = true;
}
if (flagPID) {
throw new TeamException("无该项目id,请输入正确的项目id!");
}