Escribir un método para agregar un objeto a una matriz

Escribí un método para agregar un objeto Student en una matriz de lista.

void add(Student newStudent){
    int i = 0;
    while(i != classSize){    //classSize is the size of the roster array
        if(roster[i] == null {   //roster is an array of Student objects
            roster[i] = newStudent;
        }
        i++;
    }
}

El problema que tengo es que cuando uso este método en mi clase principal, parece que solo agrega e imprime el primer objeto.

La parte de mi método principal:

ClassRoster firstRoster = new ClassRoster();
scan = new Scanner(inputFile).useDelimiter(",|\\n");
while(scan.hasNext()){
    String name = scan.next();
    int gradeLevel = scan.nextInt();
    int testGrade = scan.nextInt();
    Student newStudent = new Student(name,gradeLevel,testGrade);
    firstRoster.add(newStudent);
    System.out.printf(firstRoster.toString());
}

El archivo de texto de entrada se vería así:

John,12,95
Mary,11,99
Bob,9,87

Sin embargo, cuando intento imprimir la matriz firstRoster, solo imprime el primer objeto. En este caso, imprimirá a John 3 veces.

John,12,95
John,12,95
John,12,95

Si agrego otro estudiante en el archivo de texto, solo imprimirá a John 4 veces y así sucesivamente.

Método toString en la clase ClassRoster:

public String toString(){
    String classString = "";
    for(Student student : roster){
        classString = student.toString();   //The student object uses another toString method in the Student class
    }

    return classString;
}
Respuesta 1

En este método:

void add(Student newStudent){
    int i = 0;
    while(i != classSize){    //classSize is the size of the roster array
        if(roster[i] == null {   //roster is an array of Student objects
            roster[i] = newStudent;
        }
        i++;
    }
}

Usted asigna el primer newStudentobjeto a todos los elementos de la matriz.
Entonces, cuando intenta asignar el segundo o el 3d, ninguno de los elementos es nully no se realiza ninguna asignación.
Simplemente detenga el ciclo después de realizar la primera asignación:

void add(Student newStudent){
    int i = 0;
    while(i != classSize){    //classSize is the size of the roster array
        if(roster[i] == null {   //roster is an array of Student objects
            roster[i] = newStudent;
            break;
        }
        i++;
    }
}

Editar :
su ClassRosterclase tal como está devolvería solo los detalles del último alumno.
Pero también debe verificar los nulos.
Entonces cambie a esto:

public String toString(){
    String classString = "";
    for(Student student : roster){
        if (student != null)
          classString += student.toString() + "\n";
    }

    return classString;
}

No sé cuál es tu Studentclase toString(), supongo que está funcionando como se esperaba.

Respuesta: 2

El complemento de lanzamiento de Maven es una herramienta genial que simplifica la liberación. Pero quiero cambiar un poco el comportamiento. Lo más importante es que no quiero que ningún cambio se confirme en el repositorio automáticamente ...

He estado tratando de implementar una función lambda y luego hacerla accesible a través de API-gateway. Mi función java está en JAVA y esta es la documentación que seguí para crear un simple AWS lambda ...

Aquí está mi código f = os.popen ("java -version") para i en f.readlines (): print "result", i, Básicamente quiero que la salida de java -version se almacene en f. Lo que pasa es, después ...

Tengo que averiguar la edad desde la fecha de nacimiento colocada en una mesa en una clase de probadores. Esto significa que tengo que obtener la fecha del día actual de ahora a la fecha de una determinada fecha elegida. Por otra parte, yo ...