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:

faetzminator

Gesperrter Benutzer
Einfach Buchstabe für Buchstabe (0 - n) in den Stack werfen und danach (mit [c]pop()[/c] o.ä.) wieder rausholen und einem StringBuilder zusammenstecken.
 

HimBromBeere

Top Contributor
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.
 

Camill

Bekanntes Mitglied
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);
	}
 

Fightz

Mitglied
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 :D

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());
}
}
 

Fightz

Mitglied
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...
 
S

SlaterB

Gast
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
 

Fightz

Mitglied
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?
 
S

SlaterB

Gast
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
 

Oben