kleines problem mit nem STACK

Status
Nicht offen für weitere Antworten.

megachucky

Bekanntes Mitglied
hab von java noch nicht wirlklich viel ahnung.

es wird folgender fehler gemeldet: die methode run ist nicht static ?!?

wenn ich das static von "public static void main" wegmache, ist zwar kein fehler mehr im code, aber dann kann ich ja das programm nicht mehr ausführen ?!?


wo liegt der fehler???

bin mir sicher, ihr findet den fehler ganz schnell. suche schon ewig...






Code:
import java.util.Stack;

public class ErsterStack {
	
	private Stack stapel;
	
	
	public ErsterStack() {
	
		Stack stapel = new Stack();
	}
	
	
	public void einsHinzufuegen() {
		stapel.push("eins");
	}
	
	public void zweiUndDreiHinzufuegen() {
		stapel.push("zwei");
		stapel.push("drei");
	}
	
	public void pruefeObLeer() {
		
		boolean leer = stapel.empty();
		if ( leer = true) {
			System.out.println("Der Stack ist leer");
		}
		else {
			System.out.println("Der Stack hat folgendes oberstes Wort: \n");
			System.out.println(stapel.peek());
		}
	}
	
	public void einsEntfernen() {
		stapel.pop();
	}
	
	
	public void run() {
		
		einsHinzufuegen();
		pruefeObLeer();
		zweiUndDreiHinzufuegen();
		pruefeObLeer();
		einsEntfernen();
		pruefeObLeer();
		einsEntfernen();
		pruefeObLeer();
		einsEntfernen();
		pruefeObLeer();
		
	}
	
	public static void main (String args []) {
		
		run();
	}
	
}
 
thx. habs mir durchgelesen.

aber so müsste es doch dann klappen:

Code:
public static void main (String args []) {
		
		
		ErsterStack test = new ErsterStack();
		test.run();
		
	}

leider kommt jetzt eine nullpointerexception. hab doch eigentlich alles genauso wie in der FAQ, oder?!

[Edit by Beni: Codetags repariert]
 
jo so sollte es klappen, aber die nullpointer ist dann n anderes problem. poste mal die ersten zeilen vom stacktrace
 
stacktrace ?!? was ist denn das?


hab sonst eigentlich nix geändert. hier nochmal der ganze code:


Code:
import java.util.Stack;

public class ErsterStack {
	
	private Stack stapel;
	
	
	public ErsterStack() {
	
		Stack stapel = new Stack();
	}
	
	
	public void einsHinzufuegen() {
		stapel.push("eins");
	}
	
	public void zweiUndDreiHinzufuegen() {
		stapel.push("zwei");
		stapel.push("drei");
	}
	
	public void pruefeObLeer() {
		
		boolean leer = stapel.empty();
		if ( leer = true) {
			System.out.println("Der Stack ist leer");
		}
		else {
			System.out.println("Der Stack hat folgendes oberstes Wort: \n");
			System.out.println(stapel.peek());
		}
	}
	
	public void einsEntfernen() {
		stapel.pop();
	}
	
	
	public void run() {
		
		einsHinzufuegen();
		pruefeObLeer();
		zweiUndDreiHinzufuegen();
		pruefeObLeer();
		einsEntfernen();
		pruefeObLeer();
		einsEntfernen();
		pruefeObLeer();
		einsEntfernen();
		pruefeObLeer();
		
	}
	
	public static void main (String args []) {
		
		
		ErsterStack test = new ErsterStack();
		test.run();
		
	}
	
}

und vielen dank für deine schnelle hilfe...

[Edit by Beni: Codetags repariert]
 
Das ist ein Stacktrace:
Exception in thread "main" java.lang.NullPointerException
at forum.ErsterStack.einsHinzufuegen(Main.java:33)
at forum.ErsterStack.run(Main.java:60)
at forum.ErsterStack.main(Main.java:77)

Das Problem liegt hier: du erstellst zwei verschiedene Variablen namens "stapel":
Code:
	   private Stack stapel;
	   
	   
	   public ErsterStack() {
	   
	      Stack stapel = new Stack();
	   }


Schreibs mal so:
Code:
	   private Stack stapel;
	   
	   
	   public ErsterStack() {
	   
	      stapel = new Stack();
	   }
 
ok, geht nun. und schon kommt das nächste problem (ich glaub ich verzweifel noch beim java lernen...):

auf der konsole wird nun 5mal ausgegeben: der stack ist leer.
nicht anderes.
obwohl er ja manchmal den else-teil ausgeben sollte ?!?

hab es auch noch so probiert:

Code:
public void pruefeObLeer() {
		
		boolean leer = stapel.empty();
		if ( leer = true) {
			System.out.println("Der Stack ist leer");
		}
		else if ( leer = false) {
			System.out.println("Der Stack hat folgendes oberstes Wort: \n");
			System.out.println(stapel.peek());
		}



aber es kommt immer noch dasselbe raus... hoffe ich nerve nicht zu sehr mit solch einfachen fragen.

[Edit by Beni: man schreibt [/code] und nicht [code\] !]
 
'=' ist eine Zuweisung und gibt immer true zurück
'==' ist der Vergleichsoperator

PS: du brauchst einen vergleich auch einen booleaschen Wert nicht, es würde reichen:
Code:
if(stack.isEmpty()) {
// empty
}
else {
 // not empty
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben