a2317623614 2022-05-21 09:17 采纳率: 100%
浏览 51
已结题

Java关于对象数组的问题求解

问题显示Index 3 out of bounds for length 3,13行和39行出的问题,我没看出来问题在哪,有没有帅哥美女帮忙看看(不知道为什么,不能用chuxue这两个字……)
public static void main(String[] args) {
//创建数组储存学生对象
Student[] arr=new Student[3];
//创建学生对象
Student stu1=new Student(1,"张三",23);
Student stu2=new Student(2,"李四",24);
Student stu3=new Student(3,"王五",25);
//将学生对象添加到数组中
arr[0]=stu1;
arr[1]=stu2;
arr[2]=stu3;

    //要求1:再添加一个学生对象,并在添加的时候进行学号唯一性判断
    Student stu4=new Student(4,"赵六",26);
    
    //进行判断
    if(contains(arr,stu4.getId())) {
        //已存在,不用添加
        System.out.println("当前id已重复,请修改id后再进行添加...");
    }else {
        //不存在,将stu4加入数组中...
        int count=getCount(arr);
        if(count==arr.length) {
            //已经存满
            Student[] newArr=createNewArr(arr);
            newArr[count]=stu4; 
            printArr(newArr);
        }else {
            //没有存满
            arr[count]=stu4;
            printArr(arr);
        }
    }
    
    
    
}
//添加完后,遍历所有的学生信息
public static void printArr(Student[] arr) {
    for(int i=0;i<arr.length;i++) {
        Student stu=arr[i];
        if(stu!=null) {
            System.out.println(stu.getId()+", "+stu.getName()+", "+stu.getAge());
        }
    }
}
//创建一个新数组
public static Student[] createNewArr(Student[] arr) {
    Student[] newArr=new Student[arr.length+1];
    for(int i=0;i<newArr.length;i++) {
        newArr[i]=arr[i];
    }
    return newArr;
}

//定义一个方法判断数组中存了几个元素
public static int getCount(Student[] arr) {
    int count=0;
    for(int i=0;i<arr.length;i++) {
        if(arr[i]!=null) {
            count++;
        }
    }
    return count;
}
//判断id是否重复
public static boolean contains(Student[] arr,int id) {
    for(int i=0;i<arr.length;i++) {
        Student stu=arr[i];
        int sid=stu.getId();
        if(id==stu.getId()) {
            return true;
        }
}
    return false;

}

}

  • 写回答

5条回答 默认 最新

  • ==失去 2022-05-21 09:28
    关注

    Index 3 out of bounds for length 3 提示的很清楚哟,数组下标越界了, 就是数组长度是3 ,下标从是0开始的,所以最大是2,不能是3
    你这地方有问题,你数组扩容时候,新数组长度是4, 旧的数组还是3,所以越界了。这地方要循环旧的数组就好了

    错的地方

    img

    修改为:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 修改了问题 5月21日
  • 创建了问题 5月21日

悬赏问题

  • ¥15 在ISIS中什么是IP从地址
  • ¥15 压测时,并发量过高时,响应时间出现尖刺
  • ¥15 关于vmprotect3.8.4虚拟文件一项
  • ¥15 在不用IT调试的情况下怎样能连外网
  • ¥20 C#调用虚拟键盘TabTip.exe
  • ¥15 Qt4代码实现下面的界面
  • ¥15 CCS离散化传递函数与仿真不一致
  • ¥15 prism提示我reinstall prism 如何解决
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确