Wie mache ich in IJVM eine if verzweigung?

berserkerdq2

Bekanntes Mitglied
Hi, löse gerade eine Aufgabe mit IJVM. Hatte zunächst Probleme erst zu kapieren, wie da ohne lokale Variablen arbeiten kann. Das hat sich eigentlich geklärt.

Jetzt ist mir aufgefallen, dass ich eine if-else Verzweigung benötige.

Wie geht das in IJVM?

Wenn ich z. B. zwei lokale Variablen habe, wie kann ich diese bei einer if verzweigung nutzen.

z. B. eine lokale Variable a, die 1 ist und eine lokale Variable b die 2 ist.

Wie kann ich jetzt sagen

if(a<b){
...}
else ...

wie übersetze ich das in IJVM? Das ich dann was im if block und was im else block habe?
 

Jw456

Top Contributor
ich würde so sagen
Ähnlich wie Assembler nur halt mit dem Stack

Java:
BIPUSH 5 ; stack: 5
BIPUSH 5 ; stack: 5, 5
IF_ICMPEQ meineMethode   ; if 5 == 5
...



: meineMethode

Java:
BIPUSH 5 ; stack: 5
BIPUSH 5 ; stack: 5, 5
IFLT   else:
...
Goto: weiter
else:
...
weiter:  ; weiter im programm
 
Zuletzt bearbeitet:

berserkerdq2

Bekanntes Mitglied
ich würde so sagen
Ähnlich wie Assembler nur halt mit dem Stack

Java:
BIPUSH 5 ; stack: 5
BIPUSH 5 ; stack: 5, 5
IF_ICMPEQ meineMethode   ; if 5 == 5
...



: meineMethode
Danke, aber so überprüft man ja ob eine Zahl gleich groß ist oder? wie würde man prüfen ob die zweite zahl größer bzw. kleiner als die andere Zahl ist?
 

httpdigest

Top Contributor
Du fragst ja jetzt hier anscheinend jede einzelne Kleinigkeit, um deine Gesamtaufgabe lösen zu können.
Bist du sicher, dass du nicht irgendwie/irgendwo Informationsmaterial bekommen hast oder finden kannst, die dir helfen, die gestellte Aufgabe auch alleine zu lösen?
 

berserkerdq2

Bekanntes Mitglied
Du fragst ja jetzt hier anscheinend jede einzelne Kleinigkeit, um deine Gesamtaufgabe lösen zu können.
Bist du sicher, dass du nicht irgendwie/irgendwo Informationsmaterial bekommen hast oder finden kannst, die dir helfen, die gestellte Aufgabe auch alleine zu lösen?
Nein die Sache ist, wir haben gelernt, wie man addiert und das ist auch als Beispiel vorgegeben. Haben 6 Aufgaben gemacht, wo man auch nur addierren bzw. subtrahieren bzw. multiplizieren bzw. dividieren musste. Das ist auch nur eine freiwillige Aufgabe, also nicht verpflichtend. Aber wollte nur aus Interesse sehen, wie das geht.

Da wir nur die Rechenoperation, die ich oben genannt habe, genutzt haben, hatten wir keine if-verzweigung, habe mich das deshalb eben nur gefragt.
 

KonradN

Super-Moderator
Mitarbeiter
Bei sowas würde ich dann einfach einmal in Google suchen, ob man nicht eine Beschreibung finden kann, bei der die IJVM Befehle erläutert werden ...

Dann findet man ggf sowas: http://vu-programming.gitlab.io/pad/website/manual/controlling_the_flow.html

Da kann man dann jetzt schauen, was für Bedingungen man prüfen kann. Und dann kannst Du überlegen, was Du ggf. rechnen kannst, um dann den gewünschten Sprung zu machen.
 

berserkerdq2

Bekanntes Mitglied
Bei sowas würde ich dann einfach einmal in Google suchen, ob man nicht eine Beschreibung finden kann, bei der die IJVM Befehle erläutert werden ...

Dann findet man ggf sowas: http://vu-programming.gitlab.io/pad/website/manual/controlling_the_flow.html

Da kann man dann jetzt schauen, was für Bedingungen man prüfen kann. Und dann kannst Du überlegen, was Du ggf. rechnen kannst, um dann den gewünschten Sprung zu machen.
AHHH ich kann sagen z. B. minus machen und sagen ist das nun kleiner 0 dann ...

Aber wie funktioniert das, dass man da einen if else block hat?

Ich habe z. b.
IF_ICMPEQ mach...
das ist der if block hier, aber wie komme ich dann zu else rein?
 

Jw456

Top Contributor
AHHH ich kann sagen z. B. minus machen und sagen ist das nun kleiner 0 dann ...

Aber wie funktioniert das, dass man da einen if else block hat?

Ich habe z. b.
IF_ICMPEQ mach...
das ist der if block hier, aber wie komme ich dann zu else rein?
Tipp GOTO

Gegenteil erfragen wenn es erfüllt ist einer Marke springen (else)
Wenn war dann geht jetzt der If zweig los
Am ende vom if mit GOTO um Ende der IF Else springen .

Tipp schaue dir Assembler an. Wie da ein if else geht
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Dein if macht ja ein Branch, d.h. er springt zu einem Label. Wenn dies aber nicht gemacht wurde, dann geht es ganz normal weiter.

Du kannst also etwas aufbauen wie:
if (bedingung) {
// xyz
} else {
// abc
}

Übersetzen zu:
- Berechnung für Bedingung.
- IF BRANCH zu Label1
- // abc
- GOTO LabelEnde
Label1:
- // xyz
LabelEnde:
 

berserkerdq2

Bekanntes Mitglied
Dein if macht ja ein Branch, d.h. er springt zu einem Label. Wenn dies aber nicht gemacht wurde, dann geht es ganz normal weiter.

Du kannst also etwas aufbauen wie:
if (bedingung) {
// xyz
} else {
// abc
}

Übersetzen zu:
- Berechnung für Bedingung.
- IF BRANCH zu Label1
- // abc
- GOTO LabelEnde
Label1:
- // xyz
LabelEnde:
Danke und wozu ist dieses GoTo LabelEnde am Ende? Warum muss man das noch machen? Damit man aus der if-else verzweigung rasu ist oder wozu genau?
 

KonradN

Super-Moderator
Mitarbeiter
Das habe ich da auch gesehen man macht IF_ICMPEQ Methodenaufruf und dann geht er z. B. zur Methode.
Das ist ein falsches Verständnis! Das ist kein Methodenaufruf sondern ein bedingter Sprung hin ... da kommt kein Sprung zurück.

Was nach dem IF_ICMPEQ kommt ist also dschon der "else Bereich".

Danke und wozu ist dieses GoTo LabelEnde am Ende? Warum muss man das noch machen? Damit man aus der if-else verzweigung rasu ist oder wozu genau?
Wenn du das nicht hast, was passiert denn dann im "else" Fall?
 

berserkerdq2

Bekanntes Mitglied
Das ist ein falsches Verständnis! Das ist kein Methodenaufruf sondern ein bedingter Sprung hin ... da kommt kein Sprung zurück.

Was nach dem IF_ICMPEQ kommt ist also dschon der "else Bereich".


Wenn du das nicht hast, was passiert denn dann im "else" Fall?
Ich dachte im else fall werden dann die Befehle dort ausgeführt? Wozu dann goto?

(Zudem, diese Labels zählen aber nicht als lokale Variablen oder?)
 

KonradN

Super-Moderator
Mitarbeiter
Ich dachte im else fall werden dann die Befehle dort ausgeführt?
Nun nimm aber das LebelEnde und damit auch das Goto LabelEnde raus. Was führt er dann alles aus im Falle, dass er nicht beim if springt?

Also ganz anschaulich:

Statt:
- Berechnung für Bedingung.
- IF BRANCH zu Label1
- // abc
- GOTO LabelEnde
Label1:
- // xyz
LabelEnde:

willst Du nur dies haben:
- Berechnung für Bedingung.
- IF BRANCH zu Label1
- // abc
Label1:
- // xyz

Was wird nun alles gemach wenn er bei dem IF nicht zu Label1 springt?
 

berserkerdq2

Bekanntes Mitglied
Nun nimm aber das LebelEnde und damit auch das Goto LabelEnde raus. Was führt er dann alles aus im Falle, dass er nicht beim if springt?

Also ganz anschaulich:

Statt:
- Berechnung für Bedingung.
- IF BRANCH zu Label1
- // abc
- GOTO LabelEnde
Label1:
- // xyz
LabelEnde:

willst Du nur dies haben:
- Berechnung für Bedingung.
- IF BRANCH zu Label1
- // abc
Label1:
- // xyz

Was wird nun alles gemach wenn er bei dem IF nicht zu Label1 springt?
Naja, er würde alles ausführen was beim else ist, also das abc oder?

JEDOCH: würden die befehle nach dem Elseblock nicht ausgeführt oder? Deshalb dieses Goto LabelEnde??
ALso man kann es sich so vorstellen

IF Geh Label 1
//abc (hier ist der Elseteil)
GOTO LabelEnde

Label1:
//xyz (wenn if true)

LabelEnde:
(Hier geht es nach dem if-else-block weiter?
 

KonradN

Super-Moderator
Mitarbeiter
Spiel es doch in Gedanken durch! Ohne das würde er doch auch ohne den Sprung beim IF direkt bei den Befehlen sein, die nur ausgeführt werden sollen, wenn die Bedingung erfüllt wurde.

Stell es Dir vor wie ein Brettspiel. Deine Figur geht von Feld zu Feld. Und bei jedem Feld steht eine Aufgabe.

So ein Sprung ist dann einfach ein "Gehe zu dem Feld mit Nr. x" oder von mir aus als "Rücke so und so viele Felder vor".
 

KonradN

Super-Moderator
Mitarbeiter
Malen wir es einfach einmal auf mit den Feldern:
1: Berechne etwas
2: Wenn Ergebnis kleiner 0 dann gehe zu Feld 3
3: Mache etwas tolles

Also nach Feld 2 kommt er direkt zu Feld .... das ist doof ... Also mit dem Überspringen:

1: Berechne etwas
2: Wenn Ergebnis kleiner 0 dann gehe zu Feld 4
3: Gehe zu Feld 5
4: Mache etwas tolles
5: ...

Jetzt mit diesem Überspringen wird das tolle nur gemacht, wenn Du in 2 den Sprung hast machen dürfen.

Edit: Er hatte versehentlich zu früh abgeschickt, als ich noch nicht fertig war ...
 

Jw456

Top Contributor
beim if wird immer das letzte auf dem Stack gePopt und danach wird entschieden Sprung oder nicht.

Deine 2 ist dann weg

IFLTlabel namePop word from stack and branch if it is less than zero
 
Zuletzt bearbeitet:

berserkerdq2

Bekanntes Mitglied
beim if wir immer das letzte auf dem Stack gePopt und danach wir entscheiden Sprung oder nicht.

Deine 2 ist dann weg

IFLTlabel namePop word from stack and branch if it is less than zero
Habe leider meine Frage gelöscht, weil ich dachte bei einer beantworteten Frage darf man nichts mehr fragen. Habe versucht in etwa das zu schreiben, was ich vorher gefragtr habe.

Aber habe vergessen was da genau stand.

Wenn ich also 1und 2 im Stack habe und dann IFLT nutze dann bleibt die 2, aber die 1 geht oder?
 

Meniskusschaden

Top Contributor
Die If-verzweigung verändert aber nicht die Stackwerte oder? Wenn ich z. B. habe im Stack 1,2 (also den Wert 1 und 2) und ich mache dann IF_ICMPEQ gehezulabel

dann ist es immer noch so, egal ob das wahr wird oder nicht, im Stack bleibt 1 und 2 oder?
Hast du dir den Link von @KonradN denn überhaupt mal angesehen?
Dort steht unter 3.1 was IF_ICMPEQ macht:
Pop two words from stack and branch if they are equal
Und falls du nicht weißt was POP macht wird das dort unter 2.1 erklärt:
POP. Remove one element from the stack, and return it.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Wie mache ich den rekursiven Aufruf in IJVM Allgemeine Java-Themen 3
N Wie mache ich einen UnitTest? Allgemeine Java-Themen 16
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
R Sting.split() was mache ich falsch? Allgemeine Java-Themen 5
J Wie mache ich den Hintergrund einer Image durchsichtig? Allgemeine Java-Themen 7
berserkerdq2 Versteht jemand, was diese beiden Zahlen bei dem IJVM Code zu bedeuten haben? Allgemeine Java-Themen 10
berserkerdq2 IJVM, ich tue auf meinen Stack 100 und 120 rein, danach subtrahiere ich, macht die Maschine 100-120 oder 120-100? Allgemeine Java-Themen 8
berserkerdq2 Wie rum popt IJVM? Allgemeine Java-Themen 5
berserkerdq2 Erspart mir ein IRETURN EIN Goto? (IJVM) Allgemeine Java-Themen 7
berserkerdq2 Kann man in IJVM maximal 3 Werte im Stack haben? Allgemeine Java-Themen 3
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
D Möglichkeit mit GAE eine Table auszulesen und eine csv zu schreiben Allgemeine Java-Themen 22
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
R bei eclipse von java in eine andere programmiersprache wechseln? Allgemeine Java-Themen 2
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
A Best Practice Java - eine Art Plugin-Struktur Allgemeine Java-Themen 3
S wie rufe ich mit .jar datei eine .bat auf? Allgemeine Java-Themen 15
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
E Methoden Hat jemand eine gute Lösung? Allgemeine Java-Themen 5
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
Tausendsassa Interface Eine Gui von einer anderen schließen lassen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben