Stack mit Benutzereingabe

Bitte aktiviere JavaScript!
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) {

    }

}
 
A

Anzeige




Schau mal hier —> (hier klicken)
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.
 
Dann darfst Du java.util.Stack natürlich nicht verwenden. Was sollst Du hernehmen, um den Stack zu implementieren?
 
Ich soll einen Stack für einzelne Zeichen implementieren und dabei die typischen JFC-Methoden (push, pop, peek, empty) verwenden.
 
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.
    }
}
 
Oder vielleicht gefällt ihm ja auch etwas in der Art besser:
Java:
public class MeinStack {
    private char[] stack = new char[0];

    public boolean isEmpty() { return stack.length == 0; }

    public void push(char ch) {
        char[] newStack = new char[stack.length+1];
        copyStackTo(newStack, stack.length);
        newStack[stack.length] = ch;
        stack = newStack;
    }

    public char peek() {
        if (isEmpty()) { // Exception werfen }
        return stack[stack.length - 1];
    }

    public char pop() {
        char result = peek();
        char[] newStack = new char[stack.length-1];
        copyStackTo(newStack, newStack.length);
        stack = newStack;
    }

    private void copyStackTo(char[] arr, int elements) {
        for (int i = 0; i < elements; i++) {
            arr[i] = stack[i];
        }
    }

    // usw.
}
 
Oder vielleicht gefällt ihm ja auch etwas in der Art besser:
Java:
public class MeinStack {
    private char[] stack = new char[0];

    public boolean isEmpty() { return stack.length == 0; }

    public void push(char ch) {
        char[] newStack = new char[stack.length+1];
        copyStackTo(newStack, stack.length);
        newStack[stack.length] = ch;
        stack = newStack;
    }

    public char peek() {
        if (isEmpty()) { // Exception werfen }
        return stack[stack.length - 1];
    }

    public char pop() {
        char result = peek();
        char[] newStack = new char[stack.length-1];
        copyStackTo(newStack, newStack.length);
        stack = newStack;
    }

    private void copyStackTo(char[] arr, int elements) {
        for (int i = 0; i < elements; i++) {
            arr[i] = stack[i];
        }
    }

    // usw.
}
Danke für die Antwort , aber wie bekomm ich da jetzt meine Benutzereingabe rein bzw wie lass ich mir den Inhalt vom Stack jetzt ausgeben?
 
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).

lass ich mir den Inhalt vom Stack jetzt ausgeben?
Das ist zur Lösung der Aufgabe nicht notwendig. Unabhängig davon gilt natürlich die Antwort @Robat.
 
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
}
 
A

Anzeige




Vielleicht hilft dir das hier weiter: (klicke hier)
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben