0-Adress Maschine und Java < Technische Inform. < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:09 Mo 10.01.2011 | Autor: | Parkan |
Hallo
In meinem Buch steht
push a
push b
sub
= a-b
Ich wollte das mal mit Java schreiben. Doch da ist
push a
push b
sub
= b-a
Was auch komplett verständlich ist.
Arbeitet die Stack Klasse von Java anders oder habe ich was übersehen?
Mein Code
Stack stack2 = new Stack();
stack2.push(2);
stack2.push(3);
stack2.push((Integer)stack2.pop() - (Integer)stack2.pop());
System.out.println(stack2.peek());
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:33 Mo 10.01.2011 | Autor: | felixf |
Moin!
> Hallo
> In meinem Buch steht
> push a
> push b
> sub
>
> = a-b
>
> Ich wollte das mal mit Java schreiben. Doch da ist
> push a
> push b
> sub
>
> = b-a
> Was auch komplett verständlich ist.
>
> Arbeitet die Stack Klasse von Java anders oder habe ich was
> übersehen?
Die Stack-Klasse von Java hat kein "sub", und deine Implementation macht halt nicht das was im Buch steht.
> Mein Code
> Stack stack2 = new Stack();
> stack2.push(2);
> stack2.push(3);
> stack2.push((Integer)stack2.pop() -
> (Integer)stack2.pop());
> System.out.println(stack2.peek());
An diesem Code kannst du wunderbar sehen, welches der stack2.pop() in der vierten Zeile zuerst ausgefuehrt wird.
Wenn das Ergebnis nicht das ist was du gern haettest, dann liegt das daran dass du nicht das implementiert hast, was im Buch steht, sondern etwas anderes. Wenn du die vierte Zeile etwa durch
> stack2.push(-(Integer)stack2.pop() + (Integer)stack2.pop());
ersetzt, sollte dann das herauskommen was du haben wolltest.
LG Felix
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:51 Mo 10.01.2011 | Autor: | Parkan |
Weist du ob bei 0-Adress Mschinen die Subtraktion genau so funktioniert wie
stack2.push(-(Integer)stack2.pop() + (Integer)stack2.pop());
?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:39 Mo 10.01.2011 | Autor: | felixf |
Moin!
> Weist du ob bei 0-Adress Mschinen die Subtraktion genau so
> funktioniert wie
Es gibt nicht die 0-Adress-Maschine. Wie die Subtraktion dort funktioniert haengt davon ab wie man sie Definiert.
Ob
> stack2.push(-(Integer)stack2.pop() +
> (Integer)stack2.pop());
das richtige tut musst du ausprobieren. Wenn du vorher stack2.push(a) und dann stack2.push(b) machst, berechnet das hier $a - b$.
LG Felix
|
|
|
|