会西的卡卡 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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)