# Mit Stack einen String umdrehen



## Fightz (10. Jan 2012)

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


----------



## faetzminator (10. Jan 2012)

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 (10. Jan 2012)

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.


----------



## goodcat (10. Jan 2012)

Hab da letztens erst ein Beispiel zu gefunden:

Using stack to reverse a string : Your StackCollectionsJava Tutorial


----------



## Camill (10. Jan 2012)

So zum Beispiel:

```
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 (10. Jan 2012)

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


----------



## André Uhres (10. Jan 2012)

Fightz hat gesagt.:


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



Hallo Fightz,

herzlich willkommen bei "java-forum.org"!

Mit String#charAt kannst Du alle Buchstaben durchlaufen und push-en und dann wieder in ein char[] pop-en. Mit "new String(char[] value)" bekommst Du den umgedrehten String.

Gruß,
André


----------



## Fightz (10. Jan 2012)

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


----------



## SlaterB (10. Jan 2012)

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 (10. Jan 2012)

Camill hat gesagt.:


> So zum Beispiel:
> 
> ```
> public static void main(String[] args) {
> ...



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?


----------



## SlaterB (10. Jan 2012)

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


----------



## André Uhres (10. Jan 2012)

Fightz hat gesagt.:


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



Wenn es nur um das Verständnis des Stack geht, genügt wohl Deine "einfachere" Lösung.

Gruß,
André


----------



## Fightz (10. Jan 2012)

André Uhres hat gesagt.:


> Wenn es nur um das Verständnis des Stack geht, genügt wohl Deine "einfachere" Lösung.
> 
> Gruß,
> André



Danke aber bei dem Prof geh ich lieber auf Nummer sicher - hab mir jetzt die etwas aufwändigere Variante eingeprägt...


----------

