问题显示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;
}
}
Index 3 out of bounds for length 3 提示的很清楚哟,数组下标越界了, 就是数组长度是3 ,下标从是0开始的,所以最大是2,不能是3
你这地方有问题,你数组扩容时候,新数组长度是4, 旧的数组还是3,所以越界了。这地方要循环旧的数组就好了
错的地方
修改为:
你的arr只有三个数据,所以他的arr.length=3,但是你createNewArr的时候 Student[] newArr=new Student[arr.length+1];,这个+1就把newArr的长度变成了4,所以数组越界。
这个方法有问题,传进去的是旧的数组,长度为length,而你在for循环遍历时,从0到length+1(newArr.length),肯定会越界的。
把for循环结束条件改为i < arr.length
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;
}
在以下方法中新增if判断,您报的错误是下标越界。由于newArr个数比arr多一个对象,导致最后一次遍历arr[i]下标越界。
public static Student[] createNewArr(Student[] arr) {
Student[] newArr=new Student[arr.length+1];
for(int i=0;i<newArr.length;i++) {
if(i<arr.length){
newArr[i]=arr[i];
}
}
return newArr;
}
若有帮助,谢谢采纳~