Java 插入到排序数组中,无法插入第三个元素。

Java 插入到排序数组中,无法插入第三个元素。,java,arrays,sorting,object,Java,Arrays,Sorting,Object,这是我的数据结构和算法分配。我将创建按名称排序的学生对象数组。我的问题是我的插入算法。它将新学生的名字与数组中的名字进行比较,并找到一个小于studentArray[i]和大于sudentArray[i-1]的位置。只有当数组中至少有3个元素时,这段代码才能工作。要插入前三个元素,我需要找出一种不同的方法,我能够得到第一个和第二个元素。但是,我很难在那里找到第三个元素,并在数组中移动元素以保持排序。以下是插入到目前为止的代码 public boolean insert2(StudentList

这是我的数据结构和算法分配。我将创建按名称排序的学生对象数组。我的问题是我的插入算法。它将新学生的名字与数组中的名字进行比较,并找到一个小于studentArray[i]和大于sudentArray[i-1]的位置。只有当数组中至少有3个元素时,这段代码才能工作。要插入前三个元素,我需要找出一种不同的方法,我能够得到第一个和第二个元素。但是,我很难在那里找到第三个元素,并在数组中移动元素以保持排序。以下是插入到目前为止的代码

 public boolean insert2(StudentListing newStudent) {
    int low = 0;
    int high = next - 1;
    int i = (low + high) / 2;
    System.out.println("high is " + high + ", i is " + i + ", next is " + next);

    if(next == 0) {
        System.out.println("No students in array");
        studentArray[i] = newStudent;
        next = next + 1;
        numberOfStudents++;
        return true;
    }

    while(numberOfStudents < 3) {
        while(numberOfStudents == 1) {
            if(newStudent.getName().compareTo(studentArray[i].getName()) > 0) {  //If new student is smaller than student in current index i
                studentArray[next] = newStudent;
                next = next + 1;
                numberOfStudents++;
                return true;
            }
            else {  //new student's name is larger than students name in current index i
                studentArray[next] = studentArray[i];
                studentArray[i] = newStudent;
                next = next + 1;
                numberOfStudents++;
                return true;
            }
        while(numberOfStudents == 2) {
                if(newStudent.getName().compareTo(studentArray[i].getName()) < 0)
        }

    }

    while(studentArray[i] != null && !(newStudent.getName().compareTo(studentArray[i].getName()) > 0) && 
        newStudent.getName().compareTo(studentArray[i-1].getName()) < 0 && !(i >= next) && low >= high) {
        System.out.println("high is " + high + ", i is " + i + ", next is " + next);
        if(newStudent.getName().compareTo(studentArray[i].getName()) > 0) 
            {   System.out.println("newStudent is smaller");
                high = i - 1; }
        else {  System.out.println("newStudent is larger");
                low = i + 1; }
        i = (high + low) / 2;
    }
    System.out.println("high is " + high + ", i is " + i + ", next is " + next);
    System.out.println("Finished binary search");
    for(int j = next; j >= i; j--) {
        System.out.println("J is " + j);
        studentArray[j] = studentArray[j-1];
    }
    next = next + 1;
    studentArray[i] = newStudent.deepCopy();
    return true;
}
public boolean insert2(StudentListing newStudent){
int低=0;
int高=下一个-1;
int i=(低+高)/2;
System.out.println(“高是“+high+”,i是“+i+”,next是“+next”);
如果(下一个==0){
System.out.println(“数组中没有学生”);
学生阵列[i]=新学生;
下一个=下一个+1;
学生人数++;
返回true;
}
同时(学生人数<3人){
while(numberOfStudents==1){
如果(newStudent.getName().compareTo(studentArray[i].getName())>0){//如果新学生小于当前索引i中的学生
学生阵列[下一个]=新学生;
下一个=下一个+1;
学生人数++;
返回true;
}
else{//新学生的姓名大于当前索引i中的学生姓名
studentArray[next]=studentArray[i];
学生阵列[i]=新学生;
下一个=下一个+1;
学生人数++;
返回true;
}
while(numberOfStudents==2){
if(newStudent.getName().compareTo(studentArray[i].getName())<0)
}
}
而(studentArray[i]!=null&&!(newStudent.getName().compareTo(studentArray[i].getName())>0)和
newStudent.getName().compareTo(studentArray[i-1].getName())<0&&!(i>=next)和&low>=high){
System.out.println(“高是“+high+”,i是“+i+”,next是“+next”);
如果(newStudent.getName().compareTo(studentArray[i].getName())>0)
{System.out.println(“newStudent更小”);
高=i-1;}
else{System.out.println(“newStudent更大”);
低=i+1;}
i=(高+低)/2;
}
System.out.println(“高是“+high+”,i是“+i+”,next是“+next”);
System.out.println(“完成的二进制搜索”);
对于(int j=next;j>=i;j--){
System.out.println(“J是”+J);
studentArray[j]=studentArray[j-1];
}
下一个=下一个+1;
studentArray[i]=newStudent.deepCopy();
返回true;
}

使用数组是一项困难的要求?在这种情况下,ArrayList会更好。不幸的是,这项任务需要使用数组。我通过3个元素解决了这个问题,虽然看起来很糟糕,但效果很好。但是,当尝试插入一个应该位于索引0的名称时,它不会,并且只会上升到索引1。