Fehler java.lang.NullPointerException

info.student

Mitglied
Hallo, ich bekomme folgende Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException
at schiffeVersenken.SchiffeVersenken.createSchiff(SchiffeVersenken.java:51)

Hier ein Ausschnitt des Quellcodes:

[JAVA=47]
private static Point[] createSchiff(int laenge)
{
Point[] schiff = new Point[laenge];
int ausrichtung = (int) random(0,3);
schiff[0].setLocation(random(0, größe - 1), random(0, größe - 1));
[/code]


random() ist eine Funktion zur Erstellung einer Zufallszahl mit unterer und oberer Grenze.

Ich hab schon herrausgefunden, dass es an einem Null-Pointer liegt. Mir ist allerdings nicht ganz klar, wie ich den Fehler beheben kann.

Liebe Grüße und Danke schonmal im vorraus
 
Zuletzt bearbeitet:
[JAVA=47]
private static Point[] createSchiff(int laenge)
{
Point[] schiff = new Point[laenge];
int ausrichtung = (int) random(0,3);
schiff[0].setLocation(random(0, größe - 1), random(0, größe - 1));
[/code]

Du erzeugst mit new Point[laenge] zwar ein Array, aber dieses Array ist leer!
Daher dann auch die NullPointerException sobald du mit dem nicht vorhandenen Element auf Index 0 arbeiten willst!

Dir Fehlt schiff[0] = new Point(....);
 
ok, danke, hab ich verbessert, jetzt geht zumindest der Schritt 🙂

noch eine weitere Frage:
wenn test den wert true hat, wieso geht er dann in die if-abfrage und beendet das Programm?

Java:
boolean test = true
		if(test == false);
		{
			System.exit(-3);
		}
 
Ich habe keine Ahnung. == vergleicht die beiden Werte in den Variablen und gibt aufgrund dessen einen boolschen Wert zurück.

Mit == und Booleans zu arbeiten ist in diesem Fall unnötig, da == ein Boolean zurückgibt, dieses allerdings schon auf einer Seite steht. Das hier ist IMHO besser lesbar, vielleicht performanter und kürzer.

Java:
boolean test = true;
if (test) {
  Sysout("test = true");
}
test = false;
if (!test) {
  Sysout("test = false");
}
 
Fehler gerade selbst gefunden 🙂

da war ein ; hinter der if - abfrage

mit dem ! hatte ich es zuvor stehen 😉

danke

wieder ein problem mit diesem null-pointer.
in der main steht
Code:
int[][] spielfeld = new int[größe][größe];

aufgerufen wird die Funktion
[JAVA=164]
private static void add(int [][] spielfeld, Vector<Point[]> schiffe)
{
if(schiffe.isEmpty())
{
System.out.println("Es sind keine Schiffe vorhanden!");
System.exit(-2);
}
for(int j = 0; j < schiffe.size(); j++)
{
for(int k = 0; k < (schiffe.elementAt(j).length); k++)
{
spielfeld[(int) schiffe.elementAt(j)[k].getX()][(int) schiffe.elementAt(j)[k].getY()] = 1;
}
}
}
[/code]

Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
at schiffeVersenken.SchiffeVersenken.add(SchiffeVersenken.java:175)
at schiffeVersenken.SchiffeVersenken.main(SchiffeVersenken.java:36)
 
Zuletzt bearbeitet:
in der main steht
Code:
int[][] spielfeld = new int[größe][größe];

aufgerufen wird die Funktion
[JAVA=164]
private static void add(int [][] spielfeld, Vector<Point[]> schiffe)
{
if(schiffe.isEmpty())
{
System.out.println("Es sind keine Schiffe vorhanden!");
System.exit(-2);
}
for(int j = 0; j < schiffe.size(); j++)
{
for(int k = 0; k < (schiffe.elementAt(j).length); k++)
{
spielfeld[(int) schiffe.elementAt(j)[k].getX()][(int) schiffe.elementAt(j)[k].getY()] = 1;
}
}
}
[/code]

Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
at schiffeVersenken.SchiffeVersenken.add(SchiffeVersenken.java:175)
at schiffeVersenken.SchiffeVersenken.main(SchiffeVersenken.java:36)

Die Fehlermeldung sagt dir auf die Zeile genau wo der Fehler auftritt!
Da wir nicht wissen welche der oben geposteten Zeilen "Zeile 175 der Klasse SchiffeVersenken" ist können wir nur raten wo der Fehler liegt.

Ich tippe mal auf die innere for-Schleife.

Generell ist der Code in der inneren for-Schleife sehr komplex geschrieben, teile das auf mehrere Zeilen (mit lokalen Variablen als Zwischenspeicher). Dadurch lässt sich der Code leichter und schneller lesen.
 

Zurück
Oben