Stack invertieren

Status
Nicht offen für weitere Antworten.

Sindbad1983

Top Contributor
Hi!


Ich möchte einen Stack invertieren, aber irgendwie haut das nicht so richtig hin! :oops:

Die Ausgabe ist nicht die gewünschte:

er gibt null-Werte aus, aber eigentlich müsste die Werte von data in data2 hinüberkopiert werden... ???:L

Thomas 3 1 Roland
Stack beinhaltet diesen Wert: true
Stack beinhaltet diesen Wert: true
Stack is leer: false
Im Stack befinden sich im Moment: 4 Elemente
null
null
null
null


Code:
public class Stack {
	
	Object [] data;
	Object [] data2;
	int top;
	int size;
	
	public Stack(int size){
		data=new Object[size];
		this.size=size;
	}
	
	public void push(Object obj) throws OverflowException{
		//	}
	
	public Object pop() throws UnderflowException{
		//	}
	
	public boolean isEmpty(){
	                   //	}
	
	public int getSize(){
		return top;
	}
	
	public boolean contains(Object obj){
		
		for(int i=0;i<top;i++){
			
			if(data[i].equals(obj)){
				return true;
			}
			
				
		}
		return false;
	}
	
	//HIER!!
	public Object [] invertiere(){
		
		data2=new Object[top];
		int j=0;
		for(int i=top;i<=0;i--){
			
			data2[j]=data[i];
			j++;
		}
		
		return data2;
	}
	
	public String toString(){
		StringBuffer sb=new StringBuffer();
		String s="";
		
		for(int i=0;i<top;i++){
			sb.append(data[i]);
			sb.append(" ");
		}
		s=sb.toString();
		return s;
	}
	
}

Code:
public class StackTest {
	
	public static void main(String [] args) throws Exception{
		
		Stack stack=new Stack(10);
		
		
		stack.push("Thomas");
		stack.push(3);
		stack.push(1);
		stack.push("Roland");
		
		
		System.out.println(stack.toString());
		
		
		
		
		
		boolean contains=stack.contains("Thomas");
		System.out.println("Stack beinhaltet diesen Wert: "+ contains);
		
		boolean contains2=stack.contains(3);
		System.out.println("Stack beinhaltet diesen Wert: "+ contains2);
		
		
		boolean isEmpty=stack.isEmpty();
		System.out.println("Stack is leer: "+isEmpty);
		
		
		int anzahlElem=stack.getSize();
		System.out.println("Im Stack befinden sich im Moment: "+ anzahlElem + " Elemente");
		
		
		//HIER
		Object [] data2=stack.invertiere();
		
		for(int i=0;i<data2.length;i++){
			System.out.println(data2[i]);
			
		}
		
		
		
	}

}

Vielleicht kann mir da jemand einen Tipp geben...
 

Karl

Aktives Mitglied
Hallo,

schau noch mal ganz genau die Schleifenbedingung an: :wink:

Code:
      for(int i=top;i<=0;i--){ 
          
         data2[j]=data[i]; 
         j++; 
      }

Gruß,
Karl
 

Sindbad1983

Top Contributor
Karl der Hammer...es geht!
Danke

natürlich soland i > =0

danke!!!

Code:
public Object [] invertiere(){
		
		data2=new Object[top];
		int j=0;
		for(int i=top-1;i>=0;i--){
			
			data2[j]=data[i];
			
			j++;
		}
		
		return data2;
	}


funktioniert perfekt!

Thomas 3 1 Roland
Stack beinhaltet diesen Wert: true
Stack beinhaltet diesen Wert: true
Stack is leer: false
Im Stack befinden sich im Moment: 4 Elemente
Top steht bei :4
Roland
1
3
Thomas


ich möchte jetzt den Stack aufsteigend sortieren...
da häng ich aber auch irgendwie..wieso geht das nicht??
kannst du mir nochmal helfen Karl bitte..wär echt dringend!
Oder ist dieser Ansatz ganz falsch?


Code:
public Object [] sort(){
		
		Object [] tmp=new Object[1];
		
		//while.....
		for(int i=0;i<top-1;i++){
			
			if(data[i]>data[i+1]){
				tmp[0]=data[i+1];
				data[i+1]=data[i];
				data[i]=tmp[0];
			}
		}
		//end while
	
		return data;
	}
 
B

bygones

Gast
nutze doch einfach die Methode Arrays.sort()....

ansonsten musst du mind. 2 for schleifen laufen lassen, da du ja jedes Element mit jedem vergleichen musst...
 

messi

Bekanntes Mitglied
Du vergleichst immer nur zwei benachbarte Werte. Beim Sortieren mußt du das ganze vorausgehende Feld mit dem aktuellen Wert vergleichen. Du brauchst also noch ein zweite Schleife. Problematischer ist aber das Vergleichen. Einerseits kannst du Objekte nicht einfach mit "<" vergleichen. Du mußt schon eine Methode benutzen. Zum Beispiel Comparable.compareTo(). Und dann vor dem Vergleich wandelst du alle Objekte mit toString() in einen String, da die Klasse schon Comparable implementiert.
 

Sindbad1983

Top Contributor
ich hab mir jetzt gedacht, es funktioniert vielleicht so:

Code:
public Object [] sort(){
		
		Object [] tmp=new Object[1];
		int k=1;
		
		
		while(k<top){
		for(int i=0;i<top-1;i++){
			
			if((data[i]).equals(data[i+1])){
				tmp[0]=data[i+1];
				data[i+1]=data[i];
				data[i]=tmp[0];
			}
		}
		k++;
		}
	
		return data;
	}


aber das invertierte das Array nur...

also ist wohl der falsche Ansatz... :cry:

2 for-Schleifen??? :autsch:
 

Sindbad1983

Top Contributor
was sagt ihr zu dem??

Code:
	public Object[] sort(Comparator c){
		
		  for (int i = data.length -1;i >= 0;--i ) {
	      for (int j = 0;j < i;++j ) {
	        if ( c.compare(data[j], data[j+1]) > 0 ) {
	          Object tmp = data[j];
	          data[j]    = data[j+1];
	          data[j+1]  = tmp;
	        }
	      }
	    }
		return data;


	}


nur wie ruf ich das jetzt auf??




Code:
public class StackTest {
	
	public static void main(String [] args) throws Exception{
		
		Stack stack=new Stack(10);
		Comparator c; //Comparator c=new Comparator() geht leider nicht! :-(
		
		
		stack.push(3);
		stack.push(5);
		stack.push(1);
		stack.push(9);
		stack.push(2);
		stack.push(8);
		
		
		System.out.println(stack.toString());
		
		
		
				
		
		Object [] data3=stack.sort(c); // c kennt er nicht?!!?
		
		for(int i=0;i<top;i++){
			System.out.println(data3[i]);
			
		}
		
		
	}

}
 

messi

Bekanntes Mitglied
Code:
Comparator c = new Comparator() {
    public int compare(Object o1, Object o2) {
        // ggf "null" pruefen und -1, 1 oder 0 zurueckgeben
        return o1.toString().compareTo(o2.toString());
    }
}
 

Sindbad1983

Top Contributor
ja muss ich da extra eine eigene compare-Methode schreiben?
lässt sich das ein meinem Beispiel hier nicht integrieren?


Code:
 public Object[] sort(Comparator c){ 
       
        for (int i = data.length -1;i >= 0;--i ) { 
         for (int j = 0;j < i;++j ) { 
           if ( c.compare(data[j], data[j+1]) > 0 ) {  //da hab ich ja schon das compare...stimmt das so nicht?
             Object tmp = data[j]; 
             data[j]    = data[j+1]; 
             data[j+1]  = tmp; 
           } 
         } 
       } 
      return data; 


   }
 

messi

Bekanntes Mitglied
Natürlich kannst du die compare()-Methode in "dein" Beispiel einfach einfügen. Nimm einfach alles hinter dem return und setz dort data[j] und data[j+1] ein.
 

messi

Bekanntes Mitglied
Versuche erst einmal, den geklauten Code zu verstehen. Dann wird sich dir die Lösung schon offenbaren.
 
B

bygones

Gast
wenn du einen Comparator zum sortieren verwendest dann musst du messis Code übernehmen, d.h. du musst selbst die natürlich Ordnung definieren....

ich würde nochmals meine Arrays.sort Methode empfehlen, wenn du sicher gehen kannst, dass die Objekte die du einfügst immer das Interface Comparable implementieren.
 

messi

Bekanntes Mitglied
deathbyaclown hat gesagt.:
ich würde nochmals meine Arrays.sort Methode empfehlen, wenn du sicher gehen kannst, dass die Objekte die du einfügst immer das Interface Comparable implementieren.
Nur weil zwei Klassen Comparable implementieren, heißt das nicht, daß sie auch vergleichbar sind. Per Definition muß sogar eine ClassCastException geworfen werden. Er wird also nicht so ohne weiteres String und Integer vergleichen können. Deshalb vorher einfach toString() in einem eigenen Comparator.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Stack invertieren Java Basics - Anfänger-Themen 3
A stack Java Basics - Anfänger-Themen 14
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
V Ist Off-Heap-Speicher dasselbe wie Stack-Speicher? Java Basics - Anfänger-Themen 2
izoards Stack... Java Basics - Anfänger-Themen 17
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
B Zahlenfolge von Queue in Stack Java Basics - Anfänger-Themen 29
L Stack bilden, push und pop Java Basics - Anfänger-Themen 16
KogoroMori21 Stack und Heap Speicher Java Basics - Anfänger-Themen 1
G Stack und Queue Arbeitsblatt Java Basics - Anfänger-Themen 3
G Stack programmieren Java Basics - Anfänger-Themen 6
Z Datentypen Stack based calculator Java Basics - Anfänger-Themen 8
F speicherort stack oder heap Java Basics - Anfänger-Themen 1
S Rekursiven Stack Java Basics - Anfänger-Themen 6
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
D Queue vs. Stack Java Basics - Anfänger-Themen 6
P Stack, Heap Java Basics - Anfänger-Themen 13
D Erste Schritte Stack im Rollenspiel Java Basics - Anfänger-Themen 76
J Stack mit Benutzereingabe Java Basics - Anfänger-Themen 17
J Liste,Queue,Stack sortieren Java Basics - Anfänger-Themen 2
C Stack und Queue in Aktion (Bitte Hilfe für die Klausur) Java Basics - Anfänger-Themen 7
S Sequenz von Zahlen bei einem Stack möglich oder nicht möglich? Java Basics - Anfänger-Themen 5
E Stack vs Queue - Gemeinsamkeiten / Unterschiede Java Basics - Anfänger-Themen 7
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
4 Stack over flow bei rekursiver Tiefensuche Java Basics - Anfänger-Themen 5
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
A Stack programmieren -> Unklarheiten Java Basics - Anfänger-Themen 1
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
L Mit rekursiven Aufrufen einen Stack emulieren Java Basics - Anfänger-Themen 1
T Frage zu Java Stack Java Basics - Anfänger-Themen 5
D Stack-Objekt - LIFO - wait(); notify(); Java Basics - Anfänger-Themen 0
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
M Frage zu Stack und Heap Java Basics - Anfänger-Themen 1
Farbenfroh Suche Übungsaufgaben: BinaryTree, Stack Java Basics - Anfänger-Themen 0
D Aufgabe: Stack mit Iterator Java Basics - Anfänger-Themen 8
X Stack mit Oberklasse, wieso funktioniert es nicht? Java Basics - Anfänger-Themen 8
B Stack/Heap Frage Java Basics - Anfänger-Themen 36
K Probleme mit stack Java Basics - Anfänger-Themen 7
K Wofür wird heute noch die Stack Klasse in Java genutzt Java Basics - Anfänger-Themen 4
F Rekursion Tiefensuch-Problem - Stack Overflow Java Basics - Anfänger-Themen 9
P LinkedList - Stack ... grundlegende Frage Java Basics - Anfänger-Themen 5
B Stack in eine verkettete Liste pushen Java Basics - Anfänger-Themen 4
J OOP Warum braucht man den Stack Java Basics - Anfänger-Themen 3
B Queue mit Daten aus einem Stack füllen Java Basics - Anfänger-Themen 21
H Pseudo-Stack (char[] stackArray) mit Zeichen aus einer .txt-Datei befüllen Java Basics - Anfänger-Themen 5
S Stack Problem mit Objekt Java Basics - Anfänger-Themen 2
X String mit String von Objekt im Stack vergleichen? Java Basics - Anfänger-Themen 14
D Stack auslesen mit pop Java Basics - Anfänger-Themen 2
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
S Stack: Klasseninvariante Java Basics - Anfänger-Themen 4
L OOP Wrapper Klassen - Stack-Aufgabe Java Basics - Anfänger-Themen 2
M Frage zu Stack Java Basics - Anfänger-Themen 3
D Problem mit Set, Stack und Random Java Basics - Anfänger-Themen 2
O Stack Implementierung als verkettete Liste Java Basics - Anfänger-Themen 8
T Probleme bei einen Stack der über drei Dateien funktionieren soll Java Basics - Anfänger-Themen 5
V java.util.Stack Java Basics - Anfänger-Themen 9
K Stack und immer gleiches Objekt Java Basics - Anfänger-Themen 11
kulturfenster Stack / Queue Implementationen Java Basics - Anfänger-Themen 11
S Stack einlesen. Java Basics - Anfänger-Themen 2
E Stack kann nicht implimentiert werden Java Basics - Anfänger-Themen 11
E Eigene Stack Klasse schreiben Java Basics - Anfänger-Themen 12
J Stack Java Basics - Anfänger-Themen 3
K min-int-Wert in'nem Stack Java Basics - Anfänger-Themen 8
L Stack UpnRechner Java Basics - Anfänger-Themen 4
B Stack mit Bildern füllen Java Basics - Anfänger-Themen 2
B Stack mit Strings in zufälliger Reihenfolge füllen Java Basics - Anfänger-Themen 4
J Stack, der Integer-Zahlen enthält Java Basics - Anfänger-Themen 3
K Array Stack Java Basics - Anfänger-Themen 6
O Stack-Klasse Java Basics - Anfänger-Themen 7
S Stack mit Arrays Java Basics - Anfänger-Themen 3
T generischer stack Java Basics - Anfänger-Themen 3
Z Keller/Stack Problem Java Basics - Anfänger-Themen 11
H Stack und Queue Java Basics - Anfänger-Themen 6
M Stack SetValTop Java Basics - Anfänger-Themen 6
G Die Klasse Stack selber schreiben. Java Basics - Anfänger-Themen 2
F Klammertest mit Stack implementieren Java Basics - Anfänger-Themen 5
X Stack Java Basics - Anfänger-Themen 14
J Morgen Java-Klausur. Stack, Heap, Method-Area Java Basics - Anfänger-Themen 2
H Unterschied zwischen Stack und Array Java Basics - Anfänger-Themen 3
F MergeSort iterativ mit Hilfe von Stack Java Basics - Anfänger-Themen 5
S stack Java Basics - Anfänger-Themen 3
S Stack-Operationen Java Basics - Anfänger-Themen 59
S Stack.pop() wie genau funktioniert das? Java Basics - Anfänger-Themen 3
A Stack, Frage zur Methode push Java Basics - Anfänger-Themen 4
C Anzahl der Elemente auf einem Stack Java Basics - Anfänger-Themen 4
D Stack chaos Java Basics - Anfänger-Themen 2
megachucky kleines problem mit nem STACK Java Basics - Anfänger-Themen 8
I Stack ist auf einmal empty Java Basics - Anfänger-Themen 3
R Beispiele für Stack & Visualisierung Java Basics - Anfänger-Themen 2
R Stack: Wieso funktioiert das? Java Basics - Anfänger-Themen 2
B eine kleine leichte aufgabe mit einem stack programmieren Java Basics - Anfänger-Themen 2
N Stack-Probleme Java Basics - Anfänger-Themen 2
K Stack Overflow Java Basics - Anfänger-Themen 2
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben