Mit Stack einen String umdrehen

Fightz

Mitglied
Hi Leute!

Habe nächste Woche eine sehr wichtige Klausur in meinen Wirtschaftsinformatik Studium und stehe momentan noch vor einem kleinen Problem, wofür ich noch keine 100% richtige Lösung gefunden habe.

Wie kann ich am besten folgende Aufgabenstellung kurz und knapp lösen??? (falls sie in der Klausur dran kommen sollte)

Zeigen Sie wie mit Hilfe der Klasse Stack ein beliebiger String umgedreht werden kann.



Gruß

Fightz
 
Zuletzt bearbeitet von einem Moderator:
Einfach Buchstabe für Buchstabe (0 - n) in den Stack werfen und danach (mit [c]pop()[/c] o.ä.) wieder rausholen und einem StringBuilder zusammenstecken.
 
Ein Stack arbeitet bekanntlicherweise nach dem First-in-Last-Out-Prinzip. Zu deutsch: Schmeiß einen char rein, hau einen anderen obendrauf, wenn du den ersten wieder rausnehmen willst, musst zu dafür erst den zweiten obendrüber rausgenommen haben.

Zum reinschieben (ganz oben) nimmst du glaub ich push, zum rausnehmen (des obersten) nimmst du pop.
 
So zum Beispiel:
Java:
	public static void main(String[] args) {

		Stack<Character> stack = new Stack<Character>();

		String string = "abc";
		for (int i = 0; i < string.length(); i++) {
			stack.push(string.charAt(i));
		}

		String reverse = "";
		for (int i = 0; i < string.length(); i++) {
			reverse += stack.pop();
		}

		System.out.println(reverse);
	}
 
Danke für die Hilfe - ich hatte selbst einen groben Fehler drin, sodass ich gar nicht erst auf die Operationen push/pop/peek zugreifen konnte - hab nämlich versehentlich das Package Stack und die Klasse Stack genannt 😀

Hier meine Lösung für das herumdrehen von dem String "Hallo"


package TestStaack;

import java.util.*;

public class test {

public static void main(String[] args) {
Stack s = new Stack ();

s.push("H");
s.push("a");
s.push("l");
s.push("l");
s.push("o");

System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
 
Eine weitere einfache Ausgabemöglichkeit wäre noch so:

System.out.println(s.pop()+""+s.pop()+""+s.pop()+""+s.pop()+""+s.pop());

Sollte ja auch zählen, insofern der String nicht so lange ist und das eher nur noch ein nerviges "Hingeschreibe" wäre - alternativ ne for-Schleife aber die mag ich nicht besonders...
 
beide Codeausschnitte seit 15.30 wären für eine Aufgabe mit 'beliebiger String' wohl ungeignet,
ein beliebiger String ist z.B. in der Länge unbekannt,
jedenfalls zur Compilierzeit, die Länge kann natürlich abgefragt werden,
schreibe eine Methode die für jeden denkbaren Parameter-Wert funktioniert
 
So zum Beispiel:
Java:
	public static void main(String[] args) {

		Stack<Character> stack = new Stack<Character>();

		String string = "abc";
		for (int i = 0; i < string.length(); i++) {
			stack.push(string.charAt(i));
		}

		String reverse = "";
		for (int i = 0; i < string.length(); i++) {
			reverse += stack.pop();
		}

		System.out.println(reverse);
	}

Also dann wohl besser diese Lösung, falls die Fragestellung identisch in der Klausur dran kommen sollte? Falls er mir ein Wort vorgibt, könnte ich aber auch mit meiner "einfacheren" Lösung punkten, oder?
 
von Spekulationen hat die Welt nichts, aber statt

s.push("H");
s.push("a");
s.push("l");
s.push("l");
s.push("o");

System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());

könntest du auch direkt

System.out.println("o");
System.out.println("l");
usw.

kodieren, da wird der Stack quasi nicht genutzt außer zur Strapazierung der Festplatte (Code-Länge), das sähe ich kritisch
 

Zurück
Oben