Domanda

Lavorando su un progetto per la scuola e ricevo un errore quando provo ad inserire il numero di studenti per l'array. L'errore è

Eccezione nel thread "main" java.lang.arrayindexoutofboundsexception: -1
a Project1.Enterstudents (Project1.java23)
at project1.mainmenu (Project1.java59)
a Project1.Enterstudents (Project1.java7)

Il codice che l'ho scritto di seguito come sempre qualsiasi aiuto è apprezzato.

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;
}


}
È stato utile?

Soluzione

Guarda questo pezzo di codice:

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

Ora scopri qual è il valore di i sarà su ogni riga ...

Perché hai il i--; linea?

Nota che questo solo affronta il primo ArrayIndexOutOfBoundsException Problema: una volta risolto, finirai con un altro ArrayIndexOutOfBoundsException Perché stai inizializzando l'array prima chiedere numOfStudents.

Una volta quello è indirizzato, otterrai un NullPointerException Perché stai cercando di chiamare i metodi tramite riferimenti null - in realtà non hai mai creare una nuova Student esempio.

Ad essere onesti, questo programma è piuttosto lungo dal lavoro - non sono sicuro che Stack Overflow fornirà l'ambiente di insegnamento più efficace in questo caso particolare. Ti suggerirei di parlare con il tuo insegnante e chiedere un tutoraggio 1 contro 1.

Altri suggerimenti

Il i--; Nella parte superiore del tuo corpo ad anello c'è un probabile colpevole. In effetti, se non stava causando questo problema, penso che farà funzionare il tuo loop per sempre. Perché è anche lì?

Inoltre, vedo un altro problema. Quando l'array students è inizializzato, numOfStudents non è stato ancora assegnato un valore. Dal momento che è una variabile di istanza, è default a 0, il che significa students In realtà non terrà studenti.

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();
}

Perchè questo?

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

Il problema è probabilmente lì. Stai cercando di accedere a un array con un numero di indice negativo.

int numOfStudents è inizializzato a nulla. Quindi tentare di modificare il tuo array di studenti non funzionerà.

Come sistemarlo:

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];

Quindi continua con il tuo loop che raccoglie i dati.

Certo, vorrai rimuovere il i-- come sottolineato da altri.

È I ... nel tuo ciclo negli impedenti. Questo fa sì che l'indice vada da 0 a -1 che non è valido. Che cosa sono esattamente questo ... dovrei realizzare?

Sembra che gli altri qui abbiano già sottolineato la risposta, ma ecco come pescare ...

Il fatto che sia un ArrayIndexOutOfBoundsException ti dice che sta accadendo mentre accedi a un array, ed è anche così gentile da dirti l'indice che hai usato che è fuori dai limiti (in questo caso, -1, che è sempre fuori dai limiti -gli indici dell'array devono essere> = 0).

enterStudents Utilizza solo un array e il suo indice proviene sempre da una variabile. Quindi, attraversa mentalmente il codice e segui i valori di quella variabile i Per vedere se/come può mai essere -1.

Btw, for(i = 0; i <= numOfStudents - 1; i++) funzionerà, ma for(i = 0; i < numOfStudents; i++) è un po 'più idiomatico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top