会西的卡卡 2021-09-08 21:24 采纳率: 100%
浏览 42
已结题

Java se基础学的差不多了,就给自己安排了一个小项目,结果啪啪打脸

#关于一个购物的项目:
1、用户模块
> 注册多个账号,用数组实现
> 账号里包含密码、余额、用户名
由于现在只做到这,白天得上班,晚上没事就找点项目做或者去b站看教学视频

报错的页面

img

测试的代码:

        case 4:
            Account a1 = new Account();
            int pass = a1.account();//让用户输入密码或注册账号,不然就看不到用户页面的信息,返回的值是数组的角标
            System.out.println("1、账户:" + a1.getName(pass));
            System.out.println("2、余额:" + a1.getBalance(pass));
            System.out.println("3、新建账户");
            System.out.println("4、退出");
            int num = scanner.nextInt();
            switch (num){
                //更改账号名
                case 1:
                    a1.Rename(pass);
                    option();
                //充值
                case 2:
                    a1.Recharge(pass);
                    option();
                //新建账户
                case 3:
                    a1.newAccount();
                    option();
                //退出
                case 4:
                    option();
            }


//返回具体数组里具体的用户名
public String getName(int pass){
    return account[pass].name;
}

//返回具体数组里具体的余额
public double getBalance(int pass){
    return account[pass].balance;
}

//进入用户界面先输入密码来确定数组里的属性
public int account(){
    System.out.println("请输入你的密码:");
    int p1 = scanner.nextInt();//从控制台获取数值
    int num = password(p1);//传入验证密码的方法里
    if(-1 == num){
        System.out.println("密码错误,请检查密码或新建账户;(新建账户:1  重新输入:0)");
        if(1 == scanner.nextInt()){
            newAccount();//新建账户
            account();//重新验证密码
        }else
            account();//重新验证密码
    }
    return num;//返回数组的角标
}
//新建账户
public void newAccount(){
    for (int i = 0;i < account.length;i++){
        if (account[i] == null){
            System.out.println("请输入您的账户名称:");
            String name = scanner.next();//下面构造器赋值

            System.out.println("请输入充值的余额:");
            double money = scanner.nextInt();//下面给构造器赋值

            System.out.println("请输入您的密码:");
            setPassword(scanner.nextInt());//设置密码

            account[i] = new Account(name,money);
            System.out.println("恭喜你创建成功");
            break;
        }
    }
}
//密码验证
public int password(int password){//传进来的是用户登录的密码
    for(int i = 0;i < this.password.length;i++){
        if(this.password[i] == password){//如果等于则就返回角标,密码是新建账户和用户名一起赋值的
            return i;
        }
    }
    return -1;//没有相等的
}

//密码赋值
public void setPassword(int password){
    for(int i = 0;i <= this.password.length;i++) {
        if (this.password[i] == 0) {//验证有没有赋过值
            this.password[i] = password;//如果没有就把新建用户时的密码赋给密码数组
            break;
        }
    }if(this.password[9] != 0){//密码是依次赋值,最后一位有值就输出一句友好提示
        System.out.println("账户已满");
    }
}

原因应该是验证方法返回了-1导致的报错
但是我在下面的代码位置中做了判断的5555

//进入用户界面先输入密码来确定数组里的属性
public int account(){
    System.out.println("请输入你的密码:");
    int p1 = scanner.nextInt();//从控制台获取数值
    int num = password(p1);//传入验证密码的方法里
    if(-1 == num){
        System.out.println("密码错误,请检查密码或新建账户;(新建账户:1  重新输入:0)");
        if(1 == scanner.nextInt()){
            newAccount();//新建账户
            account();//重新验证密码
        }else
            account();//重新验证密码
    }
    return num;//返回数组的角标
}

整个项目的进度就卡在这了,就想先做出用户模块,代码捋了好多遍,就是没搞明白555555
就好像想打喷嚏,但就是硬生生的给憋回去了,自信都给整没了

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2021-09-08 21:28
    关注

    数组越界异常,报错代码如下:

    //返回具体数组里具体的用户名
    public String getName(int pass){
        return account[pass].name;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 创建了问题 9月8日

悬赏问题

  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题