Klassen Problem mit externer Klasse

Reb00t

Mitglied
Hallo Leute!

Wir beschäftigen uns grade in der Uni gerade mit Klassen und Objekten und
bei der Abgabe meiner Hausaufgabe erhalte ich stets eine NullPointerException...

Die betroffenen Stellen sind folgende:

Java:
public class Histo(){

//global variables
int[] gradesGlobal;

// default constructor
public Histo(){

}

// constructor: initializes the Histo object with an array of grades
public Histo(int[] grades){
gradesGlobal = grades;
}

// add one grade from 1-5
public void enter (int grade){
		int[] newGrades = new int[this.gradesGlobal.length + 1];
		
		for(int i = 0; i < gradesGlobal.length; i++){
			newGrades[i] = this.gradesGlobal[i];
		}
		this.gradesGlobal = newGrades;
		
		this.gradesGlobal[this.gradesGlobal.length - 1] = grade;
}

//...

}

Die Klasse wird also mit einem Input gefüttert und den schmeiß ich dann in die
globale Variable, damit die anderen Methoden auch darauf zugreifen können.

Das Testprogramm auf dem Uni-Server liefert mir jedoch diese Fehlermeldung:

Code:
java.lang.NullPointerException
at Histo.enter(Histo.java:19)

Logischerweise kann er mir ja nicht die Länge des Arrays zurückgeben, wenn
gradesGlobal als globale Variable nicht initialisiert wurde aber wie schreibe Ich
das jetzt so um, dass das ganze wieder funktioniert?
Ich denke mal, dass ich die Konstruktoren anders verwenden muss, ist aber nur
eine Idee...

Wenn mir jemand einen Hinweis geben könnte, wäre ich sehr dankbar!

Lg, Reb00t
 
wenn du Exceptions siehst, dann doch sicher auch System.out.println(), gib aus was im Konstruktor als Parameter übergeben wird, null?

du kannst in der Methode prüfen, ob das vorhandene gradesGlobal null ist, dann lege ein Array der Länge 1 an, nichts umzukopieren,
bzw. den bisherigen Code weitgehend verwenden, statt this.gradesGlobal.length eine lokale Variable mit 0 drin,
dann kann auch ruhig die Schleife drankommen, wird nicht ausgeführt
 
Entschuldige, ich habe noch vergessen etwas zu erwähnen:

Die Klasse Histo wird wie gesagt aus einem Programm in einer anderen .java
gefütter, und zwar mit einem Array der Länge 50. Das heisst gradesGlobal
sollte schon eine länge von 50+ haben.

Die Schleife in der enter Methode heisst, das das bestehende Array um 1 erweitert
werden soll, damit man noch eine weitere Note hinzufügen kann.

Das Array sollte also nicht 0 sein wenn die enter Methode aufgerufen wird.

lg
 
Hi,

du könntest noch prüfen, mit welchem Konstruktor Dein Histo() Objekt erstellt wird.
Beim default Konstruktor hast Du ja schon erkannt was los ist.

Logischerweise kann er mir ja nicht die Länge des Arrays zurückgeben, wenn
gradesGlobal als globale Variable nicht initialisiert wurde

Gruß
tschero
 
Könntest du das bitte etwas konkretisieren?

Rein vom Gedankengang wäre ja folgendes logisch:

Java:
public class Histo(){
 
//global variables
int[] gradesGlobal = this.Histo; //Hier
 
// default constructor
public Histo(){
 
}
 
// constructor: initializes the Histo object with an array of grades
public Histo(int[] grades){
gradesGlobal = grades;
}

//...

Aber ich kann ja das Array nicht mit dem Konstruktor initialisieren.
Oder geht das doch irgendwie??

//Edit.: Entschuldigt bitte aber meine Gedankengänge sind nach dem Wochenende immer noch
langsamer als sonst 😉

//Edit2:
Java:
public Histo(){
 gradesGlobal = new int[1];
}

Finally 😀
 
Zuletzt bearbeitet:
Hi,

du hast 2 Konstruktoren in Deiner Klasse.

Java:
// default constructor
public Histo(){
 
}

und

Java:
// constructor: initializes the Histo object with an array of grades
public Histo(int[] grades){
gradesGlobal = grades;
}

Wenn Du ein neues Objekt Deiner Histo() Klasse mit dem default Konstruktor (dem oberen) erstellst, bleibt Dein Array gradesGlobal null, da es erstmal nicht initialisiert wird.

Nutz Du beim Erstellen des Histo() Objektes den zweiten Konstruktor wird die Variable initialisiert
Java:
gradesGlobal = grades;

und im Funktionsaufruf sollte an der Stelle

Java:
int[] newGrades = new int[this.gradesGlobal.length + 1];
keine NullPointerException kommen.

Gruß
tschero


Edit: Zu Spät
 
Zuletzt bearbeitet:

Zurück
Oben