Objekt erstellen - error: non-static variable this cannot be referenced from a static context

  • Themenstarter Themenstarter Kaukassus
  • Beginndatum Beginndatum
K

Kaukassus

Gast
Hallo liebe Community, ich war gerade dabei ein Objekt vom Typ Wald zu erstellen, jedoch meldet der Compiler einen Fehler und ich finde ihn schon die ganze Zeit nicht :S... kann jemand helfen?

Lg

Java:
import java.io.*;
public class Baum {
	protected boolean gefaellt;
	
	public Baum(int x, int y){
		
	}
	public String toString(){
		if(this.gefaellt==true){
			return "x";
		}
		else return "o";
	}


class Wald extends Baum{
	Baum[][] wald;
	
	void Matrix(int x,int y){
		
		for(int i=0;i<x;i++){
			for(int j=0;j<y;i++){
				System.out.println(wald[x][y].toString());
			}
		}
	}
	
	public Wald(int x,int y){
		
		super(x,y);
		wald = new Baum[x][y]; //x=anzahl Zeilen, y=anzahl Spalten
		
		Matrix(x,y);
			
	}

	public Baum baumfaellen(int zeile, int spalte){
		wald[zeile][spalte].gefaellt = true;
		wald[zeile][spalte].toString();
			
		return null;
	}
}
	

public static void main(String[] args)throws IOException{
	InputStreamReader inStream = new InputStreamReader(System.in);
	BufferedReader stdin = new BufferedReader(inStream);
	
	Wald wald1 = new Wald(4,4); //Das funktioniert nicht!!!!!!!!!!
	
}

}

Und noch die Fehlermeldung, damit man auch ohne Kompilieren weiß, worum es geht:
Code:
Baum.java:50:21: error: non-static variable this cannot be referenced from a static context
       Wald wald1 = new Wald(4,4); //Das funktioniert nicht!!!!!!!!!!
                    ^
1 error
 
Zuletzt bearbeitet von einem Moderator:
Dankeschön für die Hilfe... 🙂 Vielleicht könnten wir den Thread daweil noch offen halten, falls sich Unklarheiten ergeben... Aber eins vorweg noch interessehalber:

Du hast ja gemeint: static in meiner inneren Klasse einfügen. Kann ich diese innere Klasse auch nach der äußersten klammer einfügen, und muss ich da was beachten? Als ich das bei einem anderen Beispiel versucht habe, ist das nicht gegangen, obwohl die Sichtbarkteien auf protected und public waren... weißt du da was?

Lg
 
Jetzt hab ich noch ein Problem die Matrix an String toString zu übergeben und von dort das "o" oder eben das "x" zu returnen...

Danke beits im Vorhinein 🙂


Java:
import java.io.*;
public class Baum {
	protected boolean gefaellt;
	
	public Baum(int x, int y){
		
	}
	public String toString(){
		if(this.gefaellt==true){  //jetzt ist hier der Fehler
			return "x";
		}
		else return "o";
	}


static class Wald extends Baum{
	Baum[][] wald;
	
	void matrix(int x,int y){
		
		for(int i=0;i<x;i++){
			for(int j=0;j<y;j++){
				System.out.println(wald[x][y].toString());
			}
		}
	}
	
	public Wald(int x,int y){
		
		super(x,y);
		wald = new Baum[x][y]; //x=anzahl Zeilen, y=anzahl Spalten
		
		matrix(x,y);
			
	}

	public Baum baumfaellen(int zeile, int spalte){
		wald[zeile][spalte].gefaellt = true;
		wald[zeile][spalte].toString();
			
		return null;
	}
	
}
	

public static void main(String[] args)throws IOException{
	InputStreamReader inStream = new InputStreamReader(System.in);
	BufferedReader stdin = new BufferedReader(inStream);
	
	Wald wald1 = new Wald(4,4);
	
}

}
 
Bitte auf keinen Fall die Fehlermeldung posten.

Bitte auf keinen Fall diese in google eingeben -.- ;(
 
Bitte auf keinen Fall die Fehlermeldung posten.

Bitte auf keinen Fall diese in google eingeben -.- ;(

Tut mir leid 😀

Fehlermeldung:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Baum$Wald.matrix(Baum.java:23)
at Baum$Wald.<init>(Baum.java:33)
at Baum.main(Baum.java:51)

Zu outofBoundsException hat google gesagt, dass die 4 zu groß sind... aber damit kann ich leider nichts anfangen 🙁
 
Du legst ein Array mit x und y mit 4x4 Feldern an. Damit ist 3 (lenght - 1) der höchste Arrayindex, da Indexierungen in nahezu jeden Fall bei 0 beginnen.

Java:
System.out.println(wald[x][y].toString());

Schau mal welche Variablen den Index angeben. btw. nimm lieber "Array".length in der For als Bedingung. Damit muss von außen beim Aufruf die Größe nicht gekannt werden.
 
Ich verstehe worauf du hinaus willst... Aber meiner Meinung nach müsste die Dimension der Matrix passen (4,4) und die Bedingung in der For-Schleife lautet solange i bzw j kleiner als x bzw y. Das sollte doch auch 4 mal aufgerufen werden und somit passen oder täusche ich mich?

Lg
 
Du greifst aber nicht mit der Durchlaufvariable der Schleifen sondern den Längenvariablen zu. Könnte aber jeden passieren, der die Höhe und Breite mit den Variable "x" und "y" angibt. :autsch:
 
Gott ist das Peinlich 🙁 🙁

danke...

Jetzt ergibt sich noch eine NullPointerException... das heißt glaub ich, dass ein Objekt in main noch nicht initialisiert wurde...sehe dennoch nicht wo das sein sollte...

Exception in thread "main" java.lang.NullPointerException
at Baum$Wald.matrix(Baum.java:23)
at Baum$Wald.<init>(Baum.java:33)
at Baum.main(Baum.java:51)
 
Wenn du ein Array erstellst erstellst du nur einen "Container" für Objekte. Du musst noch Objekte reinlegen, sonst ist da nichts drin.
 
Echt?? Mit dem:

wald[j].toString()

öffne ich doch die Methode die dann x oder o zurückgibt... wird das dann nicht in der Position gespeichert?

Sorry für die Fragerei, bin leider noch neu in Java :S
 
Wenn an der Stelle aber kein Baum steht kann er auch von nichts eine Methode aufrufen. Eine leere Fläche zu besorgen bringt nichts, du musst noch Bäume pflanzen.
 
Nein, das wird nicht an der Position gespeichert. Wie willst auch nen String in ein Baum[] Array legen? Das geht nicht.

Um dein Array richtig zu füllen musst du Baum Objekte erzeugen
Java:
Baum[] wald = new Baum[2];
wald[0] = new Baum();
wald[1] = new Baum();
Danach kannst du auch bspw. deine toString() Methode auf dem Baum aufrufen.
 

Zurück
Oben