期末了,Java老师布置了实验报告,实现一个任务(见下图)
我的天,真的是自己敲代码敲得少,那错误真的是一筐一筐的,深受折磨,OMG
下面,总结以下实现该任务中遇到的一些问题
勉励以下自己
但是真正解决完这些问题之后(谢谢我的考神组长大力支持和同班同学的帮助呀)
那心情真超级超级爽,哈哈哈哈哈
想向全世界炫耀,哈哈哈哈哈,也太爽了
当然,我的方法也不是最简单简洁的,但是对于我这个小白来说,我已经很满足啦
下面,开始我的正文啦
任务需求
模拟网上银行业务
当用户登录时需判断银行卡号和银行卡密码,当输入的卡号和密码都正确时,登录成功,提示当前登录的账户名,并进入下一步选择操作类型。
操作类型包括四种(存款:1 取款:2 余额:3 修改个人密码:4 退出:0)
输入数字1、2时,将进行存取款操作,此时需要输入存取的金额,并进行正确的金额加减计算;
输入数字3时,显示当前账户的余额;输入数字4时,可修改当前账户的密码;
输入数字0时将退出整个系统。
提示:可利用HashMap集合存储模拟的账户信息,其中key值用于存储银行卡号,value值用于存储整个账户对象,再利用文件存储该HashMap对象。
问题1:
用Map集合的时候,覆盖问题,但一个key值又对应了很多属性,可以将多个对应的属性存储到一个对象中
public class Login{
public static void userLogin(){
//用Map集合的时候,覆盖问题
String id="001";
String name;
String password;
int Money;
Map<String ,String> m=new HashMap<String,String>();
m.put("001","zhangsan");
m.put("001","1234");
//map当key值相同的时候,下边会覆盖上边(可以将第一个或第二个key,value调换顺序就可以了,此处不考虑这样的情况)
//所以可以将上述属性封装成一个对象,存储到一个类中eg:Person
//即下面这种情况
Map<String,Person> m=new HashMap<String,Person>();
}
}
问题2
前提是我将map集合的这个方法抛弃了,选择了我的爱宠,xml文件来实现
java.lang.ClassCastException的错误问题:
-这个错误是由于我输入的银行卡号不存在xml文件中,虽然我进行了判断,但是他还是会报错
Scanner sc=new Scanner(System.in);
//得到银行卡号
System.out.println("请输入银行卡号:");
String idsc=sc.nextLine();
//通过id节点的属性得到id节点
Node idnod=(Node) d.selectObject ("//id[@id='"+idsc+"']");
//报错了
请输入银行卡号:
1234
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.dom4j.Node
at cn.itcast.bank.Demo.userLogin(Demo.java:37)
at cn.itcast.bank.Demo.main(Demo.java:20)
原因是应为如果用户输入的是空或者说是不存在xml中的值,那么就会导致selectObject返回值不可以由Object类型(不为空,但不可以转换)强转为Node类型,返回不了该id节点,下面在对idnod这个节点进行操作就会报错啦
解决方法:
//输入银行卡号
System.out.println("请输入您的银行卡号:");
String idinput=sc.next();
//得到相对应的数据
//1、得到id
//通过id节点的属性得到id节点,并且避免了用户输入错误或输入为空的情况
List nodes = d.selectNodes ("//id[@id='"+idinput+"']");
Node idnode=null;
if (nodes.size()==0) {
System.out.println("您的账号输入错误");
continue;//continue跳出这次循环,进行下次循环
}else {
idnode=(Node) nodes.get(0);
}
//这个时候不管用户输入的对还是不对再对idnode进行操作就可以了
//得到idnode后获取该节点的password的值
String pass=idnode.getParent().element("password").getText();
//这样就真正的解决了报错问题
请输入您的银行卡号:
123
您的账号输入错误
请输入您的银行卡号:
1323
您的账号输入错误
请输入您的银行卡号:
总结
在以后的用户登陆过程中,要解决用户的输入账号有误或为空的问题
问题3
break与return问题
package bank.fair;
import java.util.List;
import java.util.Scanner;
import org.dom4j.Document;
import org.dom4j.Node;
public class Login {
public static Node userLogin(Document d,Scanner sc) {
while(true) {
</