Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe ein Problem: Ich muss einen Stack mit einer Benutzereingabe machen wo der Benutzer Buchstaben eingibt und diese am Stack abgelegt werden. Es soll mit push, pop, peek und empty abgewickelt werden. Jeder Buchstabe wird abgelegt und mit * wird ein Buchstabe entfernt. Am Ende soll ein Lösungswort rauskommen wenn man eine bestimmte Kombination eingibt. Ich hänge gerade und weiß nicht wie ich weiter machen soll hätte jemand eine Idee?
Hier mein Ansatz:
Java:
package meinstack;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Stack;
public class MeinStack {
public static void main(String[] args) {
Stack<String> meinStack = new Stack<>();
Scanner sc = new Scanner(System.in);
String input;
System.out.println("Geben Sie einen Buchstaben ein!");
while (true) {
input = sc.next();
meinStack.push(input);
System.out.println("Derzeitige Ausgabe: " + meinStack.get(0));
System.out.println("Neuer Stack: " + meinStack.get(0));
System.out.println("Bitte geben Sie einen Buchstaben ein: ");
}
}
private static void push(String input) {
}
}
Zunächst müsstest du bei Eingabe prüfen, ob es sich um einen Buchstaben oder ein '*' handelt.
Je nach Eingabe musst du dann eben mit push den Buchstaben auf den Stack pushen oder mit pop den zuletzt hinzugefügten Buchstaben löschen.
Implementieren sie einen Stack für einzelne Zeichen
a) Die typischen JFC-Methoden (push, pop, peek, empty) sollen verwendet werden.
b) Die Eingabe der Zeichen erfolgt über die Tastatur.
c) Geben sie die nachfolgenden Zeichen so ein, dass jeder angegebene Buchstabe auf den Stack gelegt wird (push) und ein Stern (*) einen Buchstaben vom Stack holt (pop) und am
Bildschirm ausgibt. Verwenden sie Exceptions und sichern sie den Stack gegen ungültige Eingaben (z.B. Zahlen, etc.) ab.
Eingabe: L I * * ! K I * * A S E * * T * * K C * * S * *
Die Aufgabe besteht anscheinend darin, herauszufinden, wie man den Text interpretieren muss, damit herauskommt, was sich der Aufgabensteller evtl. vorgestellt haben könnte... Da kann ja alles mögliche gemeint sein.
Nachdem hier keine Einschränkungen genannt sind, nimm einfach java.util.Stack her. D. h. die Klasse würde so aussehen:
Java:
public class MeinStack {
private Stack<String> stack = new Stack<>(); // evtl. statt String Character verwenden
public void push(String s) {
// hier ungültige Eingaben abfangen und Exceptions werfen
// dann einfach an den stack weitergeben
stack.push(s);
}
// für die anderen Methoden analog
public static void main(String[] args) {
// hier deinen Stack verwenden:
MeinStack meinstack = new MeinStack();
// ab hier Benutzereingaben etc.
}
}
BTW: das waren zwei Extrembeispiele, wie man das Ansinnen des Aufgabenstellers mutmaßlich befrieden könnte: auf der einen Seite die Nutzung der existierenden Stack-Implementierung, auf der anderen eine ineffiziente Implementierung via char-Array. Alles dazwischen ginge natürlich auch (z. B. Implementierung auf Basis einer verketteten Liste bzw. Verwendung von LinkedList).
Sorry dass ich nochmal schreib hab es mit deiner ersten Variante umgesetzt nur bekomme ich es nicht hin dass mein Programm mit der Eingabe von einem "*" die Pop Methode anwendet
Java:
public class MeinStack {
private Stack<String> stack = new Stack<>();
public void push(String s) {
stack.push(s);
}
public void pop(String s) {
stack.pop();
}
public static void main(String[] args) {
Stack<String> meinStack = new Stack<>();
Scanner sc = new Scanner(System.in);
String input;
Stack meinstack = new Stack();
System.out.println("Geben Sie ein Wort oder einen Buchstaben ein!");
while (true) {
input = sc.next();
System.out.println("Eingabe: " + meinStack.push(input));
System.out.println("Neuer Stack: " + meinStack);
System.out.println("Bitte geben Sie ein Wort oder einen Buchstaben ein: ");
}
}
}
1. Die Zeile Stack meinstack = new Stack(); ist Unfug. Deine Klasse heißt nicht Stack sondern MeinStack.
2. Wie willst Du das auch hinbekommen, wenn Du keine Prüfungen drin hast?
Java:
if ("*".equals(input)) {
// hol den Wert vom Stack und gib ihn aus
} else {
// leg den Wert auf den Stack
}