Stack-Klasse

Status
Nicht offen für weitere Antworten.

Ocean-Driver

Bekanntes Mitglied
Hallo,

Ich habe ein "Stack"-Programm programmiert.
Das Programm hat ein Objekt "Stack" was n ur ein hinzufügen zulässt, wenn das aktuelel feld frei ist wenn der String nicht voll ist(Im fall eines nicht vollen arrays und das aktuelle frei aber besetzt ist, wird der zähler um eins inkrementiert.

Nur krieg ich einen Fehler das das Array auf -1 zugreifen will. Ich erkenne aber leider den Fehler nicht! :(

Hier mal die beiden Klassen:


Mainclass:
Code:
package stack;
import java.util.*;
public class StackUI {

	public static void main(String[] args) {

		Scanner s = new Scanner(System.in);
		
		Stack MeinStack = new Stack(5);
		
		String auswahl = "e";
		
		auswahl = menue(auswahl);
		
		
			auswahl = auswahl.toLowerCase();

			while (!auswahl.equals("e")) {
		
			if (auswahl.equals("a"))
			{
			System.out.println("Bitte geben Sie die Information ein:");
			MeinStack.push(s.next());
			}

			if (auswahl.equals("d"))
			MeinStack.pop();
			
			if (auswahl.equals("o)")) {
				ausgabe_stack(MeinStack);
			}
			
			
			auswahl = menue(auswahl);
			
			if (auswahl.equals("e"))
			System.out.println("Programm beendet.");

			
			} 
			


	}
		
			public static String menue(String auswahl) {
				Scanner s = new Scanner(System.in);
				
				System.out.println("Ablegen/push(a) , löschen/pop(d), beenden (e) oder ausgeben(o)?");
				auswahl = s.next(); 
				
				return auswahl;
			}
			
			public static void ausgabe_stack (Stack Stack) {
			
				System.out.println("Test");
				
				for (int i=0;i<Stack.getMax();i++) {
					System.out.println("Stapel-Nr "+i+": +"+Stack.showStack()+"");
				}
					
			}
	
	


} 


//Copyright by Daniel Roß


Code:
package stack;

public class Stack {
	
	private int maxAnzahl;
	private int aktuellerSlot=0;
	String[] Stack;
	
	public Stack (int maxAnzahl)
	{
		Stack = new String[maxAnzahl];
	}
	//Funktion zum hinzufügen einer Information eines Stacks
	public void push (String ihnhalt) {
		
		if (this.Stack[this.aktuellerSlot] != null && !this.isFull())
		{
			this.aktuellerSlot++;
		}
		
		if (this.Stack[this.aktuellerSlot] == null) {
			this.Stack[this.aktuellerSlot] = ihnhalt;
		}
		
		if (this.Stack[this.aktuellerSlot] == null && !this.isFull())
		{
			this.aktuellerSlot++;
		}
		
		
	}
	
	public int getMax () {
		return this.maxAnzahl;
	}
	//Funktion zum löschen einer Information eines Stacks
	public void pop () {

		
		if (this.Stack[this.aktuellerSlot] == null)
			{
			this.aktuellerSlot--;
			this.Stack[this.aktuellerSlot] = null;
			}
		
		if (this.aktuellerSlot==0)     				  //auskommentiert: Stack wird wie Sie gesagt hatten, wenn es komplett leer ist, auf null gesetzt.
			this.Stack[this.aktuellerSlot] = null;		  //Nur wenn es auf Null gesetzt wird, können bei einem erneuten push keine Werte mehr eingetragen werden!
		else
		{
			this.Stack[this.aktuellerSlot] = null;
			this.aktuellerSlot--;
		}
		
	}
	//Gibt True zurück, wenn der oberste Slot nicht null ist.
	public boolean isFull() {
		if (this.Stack[maxAnzahl-1] != null)
		return true;
		else
			return false;
	}
	//Gibt True zurück, wenn der unterterste Slot null ist.
	public boolean isEmpty() {
		if (this.Stack[0] == null)
			return true;
			else
				return false;
	}
	
	public String[] showStack() {
		
		return this.Stack;

		}

	
}
//Copyright by Daniel Roß


Der Fehler:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at stack.Stack.isFull(Stack.java:57)
at stack.Stack.push(Stack.java:25)
at stack.StackUI.main(StackUI.java:23)
Aber wenn ich einmal "a" aufrufe und data1 als Ihnhalt angebe, will er die schon bei -1 eingetragen: Doch wieso?

Danke schonmal


Gruß
Daniel
 
S

SlaterB

Gast
maxAnzahl ist 0, 0-1 ist -1, du greifst mit -1 zu
-> ArrayIndexOutOfBoundsException: -1

die im Konstruktor übergebene maxAnzahl speicherst du nicht
 

Ocean-Driver

Bekanntes Mitglied
Hi,

Super - funktioniert jetzt, danke. :)

Ich hätte noch eine Frage.
Ich habe eine Funktion die das komplette Stack ausgeben soll.

Code:
	public String[] showStack() {
		
		return this.Stack;

		}




Jetzt habe ich folgende Funktion in der Main
Code:
			public static void ausgabe_stack (Stack Stack) {
			
				
				for (int i=0;i<Stack.getMax();i++) {
					System.out.println("Stapel-Nr "+i+": +"+Stack.showStack()+"");
				}
					
			}

diese Funktion rufe ich mit ausgabe_stack(MeinStack); auf.


doch, wie rufe ich die einzelnen Array-Indizies innerhalb dessen objektes auf?
Die Funktion showStack irgendwie verändern?

Danke schonmal.
 
S

SlaterB

Gast
public String showStack(int index) {
return this.Stack[index];
}

public static void ausgabe_stack (Stack Stack) {
for (int i=0;i<Stack.getMax();i++) {
System.out.println("Stapel-Nr "+i+": +"+Stack.showStack(i));
}
}
 

Ocean-Driver

Bekanntes Mitglied
Hallo,

Ich hab die Klasse noch einmal verändert.

Ich will nun den Wert der in der Funktion menue() eingetragen werden, direkt vergleichen.


Meine While-Schleife sieht wie folgt aus:

Code:
			while (!menue().equals("e")) {
		
			if (menue().equals("a"))
			{
			System.out.println("Bitte geben Sie die Information ein:");
			MeinStack.push(s.next());
			}

			if (menue().equals("d"))
			MeinStack.pop();
			
			if (menue().equals("o")) {
				ausgabe_stack(MeinStack);
			}
			
			menue();
			
			if (menue().equals("e"))
			System.out.println("Programm beendet.");

			
			}


meine Methode menue()
Code:
			public static String menue() {
				Scanner s = new Scanner(System.in);
				String auswahl;
				
				System.out.println("Ablegen/push(a) , löschen/pop(d), beenden (e) oder ausgeben(o)?");
				auswahl = s.next().toLowerCase(); 

				return auswahl;
			}

Doch, wenn ich die eingabe im Menü mache, ruft er oft das Menü immer und immer wieder auf. :(
Und, manchmal, reagiert er auf die Eingabe. was ist falsch an meinem code?
Vorher wra das ganze ja so realisiert, das ich die ausgabe der menue()-Funktion in einer variable gespeichert habe und diese vergliech. Das ging ja auch so, nur beim direkten Vergleich gehts nicht mehr! :(

Danke schonmal
 
S

SlaterB

Gast
ja ist dir denn der Unterschied zwischen speichern und direkten Aufruf nicht klar?

if (menue().equals("a"))
// Aktion 1
}
if (menue().equals("b"))
// Aktion 2
}

bedeutet:
frage vom Nutzer eine Eingabe ab, wenn diese a ist, dann führe Aktion 1 aus, sonst tue erstmal nix
frage danach vom Nutzer eine zweite Eingabe ab, wenn diese b ist, dann führe Aktion 2 aus, sonst tue erstmal nix

-----------

dagegen:
String eingabe = menue();
if (eingabe.equals("a"))
// Aktion 1
} else if (eingabe.equals("b"))
// Aktion 2
}

heißt:
frage einmalg eine Eingabe vom User ab,
wenn diese a ist dann Aktion 1, wenn sie b ist dann Aktion 2 usw

-----------

der Gipfel ist bei dir der alleinstehende Befehl
menue(); in Zeile 17

da soll der Benutzer etwas eingeben und es passiert absolut nix


welchen Sinn hat dein Code??
 

Ocean-Driver

Bekanntes Mitglied
Im menue() sollten Werte eingegeben werden.
Ich habe jedoch jetzt menue(); komplett neu strukturiert.
in dem if rufe ich menue() auf um den rückgabetyp von menue() mit a zu vergleichen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Wofür wird heute noch die Stack Klasse in Java genutzt Java Basics - Anfänger-Themen 4
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
E Eigene Stack Klasse schreiben Java Basics - Anfänger-Themen 12
G Die Klasse Stack selber schreiben. Java Basics - Anfänger-Themen 2
A stack Java Basics - Anfänger-Themen 14
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
V Ist Off-Heap-Speicher dasselbe wie Stack-Speicher? Java Basics - Anfänger-Themen 2
izoards Stack... Java Basics - Anfänger-Themen 17
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
B Zahlenfolge von Queue in Stack Java Basics - Anfänger-Themen 29
L Stack bilden, push und pop Java Basics - Anfänger-Themen 16
KogoroMori21 Stack und Heap Speicher Java Basics - Anfänger-Themen 1
G Stack und Queue Arbeitsblatt Java Basics - Anfänger-Themen 3
G Stack programmieren Java Basics - Anfänger-Themen 6
Z Datentypen Stack based calculator Java Basics - Anfänger-Themen 8
F speicherort stack oder heap Java Basics - Anfänger-Themen 1
S Rekursiven Stack Java Basics - Anfänger-Themen 6
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
D Queue vs. Stack Java Basics - Anfänger-Themen 6
P Stack, Heap Java Basics - Anfänger-Themen 13
D Erste Schritte Stack im Rollenspiel Java Basics - Anfänger-Themen 76
J Stack mit Benutzereingabe Java Basics - Anfänger-Themen 17
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
S Sequenz von Zahlen bei einem Stack möglich oder nicht möglich? Java Basics - Anfänger-Themen 5
E Stack vs Queue - Gemeinsamkeiten / Unterschiede Java Basics - Anfänger-Themen 7
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
4 Stack over flow bei rekursiver Tiefensuche Java Basics - Anfänger-Themen 5
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
A Stack programmieren -> Unklarheiten Java Basics - Anfänger-Themen 1
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
L Mit rekursiven Aufrufen einen Stack emulieren Java Basics - Anfänger-Themen 1
T Frage zu Java Stack Java Basics - Anfänger-Themen 5
D Stack-Objekt - LIFO - wait(); notify(); Java Basics - Anfänger-Themen 0
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
M Frage zu Stack und Heap Java Basics - Anfänger-Themen 1
Farbenfroh Suche Übungsaufgaben: BinaryTree, Stack Java Basics - Anfänger-Themen 0
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
X Stack mit Oberklasse, wieso funktioniert es nicht? Java Basics - Anfänger-Themen 8
B Stack/Heap Frage Java Basics - Anfänger-Themen 36
K Probleme mit stack Java Basics - Anfänger-Themen 7
F Rekursion Tiefensuch-Problem - Stack Overflow Java Basics - Anfänger-Themen 9
P LinkedList - Stack ... grundlegende Frage Java Basics - Anfänger-Themen 5
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
J OOP Warum braucht man den Stack Java Basics - Anfänger-Themen 3
B Queue mit Daten aus einem Stack füllen Java Basics - Anfänger-Themen 21
G Stack invertieren Java Basics - Anfänger-Themen 3
H Pseudo-Stack (char[] stackArray) mit Zeichen aus einer .txt-Datei befüllen Java Basics - Anfänger-Themen 5
S Stack Problem mit Objekt Java Basics - Anfänger-Themen 2
X String mit String von Objekt im Stack vergleichen? Java Basics - Anfänger-Themen 14
D Stack auslesen mit pop Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
S Stack: Klasseninvariante Java Basics - Anfänger-Themen 4
L OOP Wrapper Klassen - Stack-Aufgabe Java Basics - Anfänger-Themen 2
M Frage zu Stack Java Basics - Anfänger-Themen 3
D Problem mit Set, Stack und Random Java Basics - Anfänger-Themen 2
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
T Probleme bei einen Stack der über drei Dateien funktionieren soll Java Basics - Anfänger-Themen 5
V java.util.Stack Java Basics - Anfänger-Themen 9
K Stack und immer gleiches Objekt Java Basics - Anfänger-Themen 11
kulturfenster Stack / Queue Implementationen Java Basics - Anfänger-Themen 11
S Stack einlesen. Java Basics - Anfänger-Themen 2
E Stack kann nicht implimentiert werden Java Basics - Anfänger-Themen 11
J Stack Java Basics - Anfänger-Themen 3
K min-int-Wert in'nem Stack Java Basics - Anfänger-Themen 8
L Stack UpnRechner Java Basics - Anfänger-Themen 4
B Stack mit Bildern füllen Java Basics - Anfänger-Themen 2
B Stack mit Strings in zufälliger Reihenfolge füllen Java Basics - Anfänger-Themen 4
J Stack, der Integer-Zahlen enthält Java Basics - Anfänger-Themen 3
K Array Stack Java Basics - Anfänger-Themen 6
S Stack mit Arrays Java Basics - Anfänger-Themen 3
T generischer stack Java Basics - Anfänger-Themen 3
Z Keller/Stack Problem Java Basics - Anfänger-Themen 11
H Stack und Queue Java Basics - Anfänger-Themen 6
M Stack SetValTop Java Basics - Anfänger-Themen 6
F Klammertest mit Stack implementieren Java Basics - Anfänger-Themen 5
X Stack Java Basics - Anfänger-Themen 14
J Morgen Java-Klausur. Stack, Heap, Method-Area Java Basics - Anfänger-Themen 2
H Unterschied zwischen Stack und Array Java Basics - Anfänger-Themen 3
F MergeSort iterativ mit Hilfe von Stack Java Basics - Anfänger-Themen 5
S stack Java Basics - Anfänger-Themen 3
S Stack invertieren Java Basics - Anfänger-Themen 14
S Stack-Operationen Java Basics - Anfänger-Themen 59
S Stack.pop() wie genau funktioniert das? Java Basics - Anfänger-Themen 3
A Stack, Frage zur Methode push Java Basics - Anfänger-Themen 4
C Anzahl der Elemente auf einem Stack Java Basics - Anfänger-Themen 4
D Stack chaos Java Basics - Anfänger-Themen 2
megachucky kleines problem mit nem STACK Java Basics - Anfänger-Themen 8
I Stack ist auf einmal empty Java Basics - Anfänger-Themen 3
R Beispiele für Stack & Visualisierung Java Basics - Anfänger-Themen 2
R Stack: Wieso funktioiert das? Java Basics - Anfänger-Themen 2
B eine kleine leichte aufgabe mit einem stack programmieren Java Basics - Anfänger-Themen 2
N Stack-Probleme Java Basics - Anfänger-Themen 2
K Stack Overflow Java Basics - Anfänger-Themen 2
I @Inject in normaler Klasse? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben