Pregunta

Trabajando en un proyecto para la escuela y recibo un error cuando intento ingresar el número de estudiantes para la matriz. El error es

Excepción en el hilo "principal" java.lang.arrayindoxoUtofboundsexception: -1
en Project1.Enstudents (Project1.Java23)
en Project1.Mainmenu (Project1.Java59)
en Project1.Enstudents (Project1.Java7)

El código que lo he escrito a continuación, como siempre, se agradece cualquier ayuda.

import java.util.Scanner;

public class Project1{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
Project1 project1 = new Project1();
project1.mainMenu();


}//main

int numOfStudents;
Student[] students = new Student[numOfStudents];

public void enterStudents(){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter number of students");
    numOfStudents = input.nextInt();
    int i;
    for(i = 0; i <= numOfStudents - 1; i++){
        i--;
        System.out.println("Enter student's ID: ");
        students[i].getId();
        System.out.println("Enter student's first name: ");
        students[i].getFirst();
        System.out.println("Enter student's last name: ");
        students[i].getLast();
        System.out.println("Enter student's class: ");
        students[i].getStuClass();
    }


}

public void retrieveStuId(){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter student id");


}

public void Exit(){
    System.exit(0);
}

public void mainMenu(){
    Scanner input = new Scanner(System.in);
    System.out.println("1 - Enter student info");
    System.out.println("2 - Retrieve student by ID");
    System.out.println("3 - Retrieve student by last name");
    System.out.println("4 - Update student");
    System.out.println("5 - Exit");
    int menuSelect = input.nextInt();

    if (menuSelect != 1 && menuSelect != 2 && menuSelect != 3 && menuSelect != 4 && menuSelect != 5)
        System.out.println("That is not a option");
    else
        switch (menuSelect){
            case 1: enterStudents();

            case 2: System.out.print("case 2");

            case 3: System.out.print("case 3");

            case 4: System.out.print("case 4");

            case 5: Exit();

        }
}

}//project1

class Student{
private int studentID;
private String firstName;
private String lastName;
private String stuClass;

public Student(){
}

public Student(int id, String first, String last, String c ){
    studentID = id;
    firstName = first;
    lastName = last;
    stuClass = c;
}

public void setID (int id){
    studentID = id;
}

public void  setStuClass (String c){
    stuClass = c;
}

public void setFirst(String first){
    firstName = first;
}

public void setLast(String last){
    lastName = last;
}

public String getFirst(){
    return firstName;
}

public String getLast(){
    return lastName;
}

public int getId(){
    return studentID;
}

public String getStuClass(){
    return stuClass;
} 

public String toString(){
    return "Student ID: " + studentID + " ---- " + "Student Name: " + firstName + "" + lastName + " ---- " + "Class:" + stuClass;
}


}
¿Fue útil?

Solución

Mira este bit de código:

for(i = 0; i <= numOfStudents - 1; i++){
    i--;
    System.out.println("Enter student's ID: ");
    students[i].getId();

Ahora resuelva el valor de i va a estar en cada línea ...

¿Por qué tienes el i--; línea en absoluto?

Tenga en cuenta que esto solamente aborda el primero ArrayIndexOutOfBoundsException problema: una vez que se solucione, terminará con otro ArrayIndexOutOfBoundsException Porque estás inicializando la matriz antes de preguntando por numOfStudents.

Una vez ese es dirigido, obtendrá un NullPointerException Porque estás tratando de llamar a los métodos a través de referencias nulas, en realidad nunca crear un nuevo Student instancia.

Para ser honesto, este programa está muy lejos de trabajar: no estoy seguro de que Stack Overflow proporcionará el entorno de enseñanza más efectivo en este caso particular. Le sugiero que hable con su maestro y solicite una tutoría 1 a 1.

Otros consejos

los i--; En la parte superior de su cuerpo de bucle hay un probable culpable. De hecho, si no estaba causando este problema, creo que haría que su bucle funcionara para siempre. ¿Por qué está incluso allí?

Además, veo otro problema. Cuando la matriz students se inicializa, numOfStudents aún no se ha asignado un valor. Dado que es una variable de instancia, es predeterminado a 0, lo que significa students En realidad no tendrá ningún estudiante.

for(i = 0; i <= numOfStudents - 1; i++){
// REMOVE THIS        i--;
// i is = -1 here but Arrays start by 0
    System.out.println("Enter student's ID: ");
    students[i].getId();
    System.out.println("Enter student's first name: ");
    students[i].getFirst();
    System.out.println("Enter student's last name: ");
    students[i].getLast();
    System.out.println("Enter student's class: ");
    students[i].getStuClass();
}

¿Por qué esto?

for(i = 0; i <= numOfStudents - 1; i++){
        i--; //<--THIS

El problema probablemente esté ahí. Está tratando de acceder a una matriz con un número de índice negativo.

int numOfStudents se inicializa a nada. Por lo tanto, intentar editar la matriz de su alumno no funcionará.

Como arreglarlo:

Scanner input = new Scanner(System.in);
System.out.println("Enter number of students"); 
int numOfStudents = input.nextInt(); //this initializes to something.
Student[] students = new Student[numOfStudents];

Luego continúe con su bucle recopilando los datos.

Por supuesto, querrás eliminar el i-- Como lo señalaron otros.

Es el yo ... en tu bucle en los consultorios. Esto hace que el índice vaya de 0 a -1, lo cual no es válido. ¿Qué es exactamente esto yo, se supone que debo lograr?

Parece que otros aquí ya han señalado la respuesta, pero aquí le mostramos cómo pescar ...

El hecho de que sea un ArrayIndexOutOfBoundsException le dice que está sucediendo mientras accede a una matriz, e incluso es lo suficientemente amable como para decirle el índice que ha usado que está fuera de los límites (en este caso, -1, que siempre está fuera de los límites: los índices de matriz deben ser> = 0).

enterStudents Solo usa una matriz, y su índice siempre proviene de una variable. Entonces, mentalmente atraviese su código y siga los valores de esa variable i para ver si/cómo puede ser -1.

Por cierto, for(i = 0; i <= numOfStudents - 1; i++) funcionará, pero for(i = 0; i < numOfStudents; i++) es un poco más idiomático.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top