Reihenfolge des Quelltexts

f10

Aktives Mitglied
Hallo zusammen,

ich habe eine Frage. In welcher Reihenfolge wird mein Quelltext kompiliert? Ich gehe momentan nach dem EVA-Prinzip und beginne mit der Variablendeklaration.
Zuerst vereinbare ich also die Variablen die ich brauche.

Java:
//Variablendeklaration
    int a, b, c, d, e, f, g, h;   
    int aa, bb, cc, dd, ee, ff, gg, hh;    
    int aaa, bbb, ccc, ddd, eee, fff, ggg, hhh;

Anschliessend widme ich mich der Eingabe

Java:
//Eingabe 
    a = Integer.parseInt(tfd_start128.getText());
    b = Integer.parseInt(tfd_start64.getText());
    c = Integer.parseInt(tfd_start32.getText());
    d = Integer.parseInt(tfd_start16.getText());
    e = Integer.parseInt(tfd_start8.getText());
    f = Integer.parseInt(tfd_start4.getText());
    g = Integer.parseInt(tfd_start2.getText());
    h = Integer.parseInt(tfd_start1.getText());
    aa = Integer.parseInt(tfd_und128.getText());
    bb = Integer.parseInt(tfd_und64.getText());
    cc = Integer.parseInt(tfd_und32.getText());
    dd = Integer.parseInt(tfd_und16.getText());
    ee = Integer.parseInt(tfd_und8.getText());
    ff = Integer.parseInt(tfd_und4.getText());
    gg = Integer.parseInt(tfd_und2.getText());
    hh = Integer.parseInt(tfd_und1.getText());

Danach der Verarbeitung:

Java:
aaa = a + aa;
    bbb = b + bb;
    ccc = c + cc;
    ddd = d + dd;
    eee = e + ee;
    fff = f + ff;
    ggg = g + gg;
    hhh = h + hh;

und zuletzt der Ausgabe:

Java:
if(aaa == 2) {
    tfd_ziel128.setText("1");
      return;
    }
    if(bbb == 2) {
      tfd_ziel64.setText("1");
      return;
    }
    if(ccc == 2) {
      tfd_ziel32.setText("1");
      return;
    }
    if(ddd == 2) {
      tfd_ziel16.setText("1");
      return;
    }
    if(eee == 2) {
      tfd_ziel8.setText("1");
      return;
    }
    if(fff == 2) {
      tfd_ziel4.setText("1");
      return;
    }
    if(ggg == 2) {
      tfd_ziel2.setText("1");
      return;
    }
    if(hhh == 2) {
      tfd_ziel1.setText("1");
      return;
    }

und bei der Ausgabe vermute ich nun einen Fehler. In welcher Reihenfolge fuehrt Java denn meinen Quellcode aus? Denn wenn ich mein Programm starte, rechnet er mir nur die erste Textbox aus, wenn diese die Bedingung erfuellt, erfuellen aber gleichzeitig auch die 4. und 5. Textbox bspw. die Bedingung, ignoriert mein Programm dies voellig. Warum tut es das?

Das ersteinmal meine Frage. Mein Programm dazu:

Ziel: Es sollen 2 Dualzahlen miteinander verundet werden. Das bedeutet, dass wenn eine Dualzahl 1 und die andere ebenfalls 1 ist, das Ergebnis 1 ist. Ist mindestens eine der beiden Dualzahlen 0, so ist auch das Ergebnis 0.

Dies habe ich in diesem Quelltext versucht zu implementieren, doch das oben beschriebene Problem tritt auf.

Java:
public void btn_verunden_ActionPerformed(ActionEvent evt) {
    //Variablendeklaration
    int a, b, c, d, e, f, g, h;    //a=128 h=1
    int aa, bb, cc, dd, ee, ff, gg, hh;    //aa=128 hh=1
    int aaa, bbb, ccc, ddd, eee, fff, ggg, hhh;   //aaa=128 hhh=1

    //Eingabe Dualzahl
    a = Integer.parseInt(tfd_start128.getText());
    b = Integer.parseInt(tfd_start64.getText());
    c = Integer.parseInt(tfd_start32.getText());
    d = Integer.parseInt(tfd_start16.getText());
    e = Integer.parseInt(tfd_start8.getText());
    f = Integer.parseInt(tfd_start4.getText());
    g = Integer.parseInt(tfd_start2.getText());
    h = Integer.parseInt(tfd_start1.getText());

    //Eingabe der zu verundenden Dualzahl
    aa = Integer.parseInt(tfd_und128.getText());
    bb = Integer.parseInt(tfd_und64.getText());
    cc = Integer.parseInt(tfd_und32.getText());
    dd = Integer.parseInt(tfd_und16.getText());
    ee = Integer.parseInt(tfd_und8.getText());
    ff = Integer.parseInt(tfd_und4.getText());
    gg = Integer.parseInt(tfd_und2.getText());
    hh = Integer.parseInt(tfd_und1.getText());
    
    //Verarbeitung a und aa neue Variable zuordnen.
    aaa = a + aa;
    bbb = b + bb;
    ccc = c + cc;
    ddd = d + dd;
    eee = e + ee;
    fff = f + ff;
    ggg = g + gg;
    hhh = h + hh;

    //Verarbeitung im Dualzahlfeld nur Dualzahlen eingeben.
    if (a<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (b<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (c<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (d<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (e<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (f<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (g<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (h<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (a>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (b>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (c>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (d>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (e>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (f>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (g>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (h>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}

    //Verarbeitung im verunden Dualzahlfeld nur Dualzahlen eingeben
    if (aa<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (bb<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (cc<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (dd<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (ee<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (ff<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (gg<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (hh<0)
     {lbl_ziel.setText("Keine negativen Werte");
     return;}
    if (aa>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (bb>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (cc>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (dd>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (ee>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (ff>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (gg>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}
    if (hh>1)
     {lbl_ziel.setText("Dualzahlen sind 0 oder 1");
     return;}



    //Ausgabe
    /* Ausgabe des Ergebnisses unter der Bedingung, dass 1 + 1 = 1 und alles
     * andere 0 ist.
     */

    if(aaa == 2) {
    tfd_ziel128.setText("1");
      return;
    }
    if(bbb == 2) {
      tfd_ziel64.setText("1");
      return;
    }
    if(ccc == 2) {
      tfd_ziel32.setText("1");
      return;
    }
    if(ddd == 2) {
      tfd_ziel16.setText("1");
      return;
    }
    if(eee == 2) {
      tfd_ziel8.setText("1");
      return;
    }
    if(fff == 2) {
      tfd_ziel4.setText("1");
      return;
    }
    if(ggg == 2) {
      tfd_ziel2.setText("1");
      return;
    }
    if(hhh == 2) {
      tfd_ziel1.setText("1");
      return;
    }

  }


oder liegt es an meinen if's? Kann ich diese fuer diese Art der Benutzung gar nicht verwenden, sondern benoetige eine for-Schleife oder etwaiges?
 
Zuletzt bearbeitet:
wenn diese die Bedingung erfuellt, erfuellen aber gleichzeitig auch die 4. und 5. Textbox bspw. die Bedingung, ignoriert mein Programm dies voellig. Warum tut es das?
Wegen des
Code:
return;
. Damit springst Du direkt aus der Methode raus.
 
Ich danke dir! Ich dachte, dass das return; notwendig ist, um aus dem if herauszukommen und dann weiter im Quelltext zu gehen.
 
Durch dein
Code:
return
beendet dein Programm nach dem ausführen der Codezeilen bis dahin, so es in den if-Teil gegangen ist die Funktion, alle weiteren Zeilen unterhalb dieser Zeile werden nicht mher ausgeführt.

Beispiel

Java:
int a=0;
System.out.println("Zahl="+a);
a=1; 
System.out.println("Zahl="+a);
return;
a=2;
System.out.println("Zahl="+a);

Also arbeitet Java deinen Quellcode Zeilenweise ab, bis es durch ein
Code:
return
beendet wird, alles was danach kommt, wird nicht mehr ausgeführt, da es durch das
Code:
return
schon vorher beendet wurde

[EDIT]Zu langsam und ich schließe mich meinen vorpostern an[/EDIT]
 
Tut mir leid, dass ich das immer so umstaendlich mache, ich versuche eine Programmierloesung zu finden, die ich mit meinem geringem Kenntnisstand auch verstehen kann, bzw die ich auch umsetzen kann. Arrays und Listen kenne ich in Java noch nicht.
 
ganz erlich ? wozu das return ?

entweder ein IF trifft zu .. dann wird sein inhalt ausgeführt ... oder es trifft nicht zu und der block wird übergangen ...

zeile 38 bis 61 würde ich so schreiben

Java:
if(a<0||b<0||c<0||d<0||e<0||f<0||g<0||h<0)
{
throw new NumberFormatException("Keine negativen Werte");
}

reicht ... fertig ... aus ...

dann 62 bis 85 ... genau das gleiche

Java:
if(a>1||b>1||c>1||d>1||e>1||f>1||g>1||h>1)
{
throw new NumberFormatException("Dualzahlen sind 0 oder 1");
}

fertig ...

und dann ALLE returns in folgenden zeilen RAUS : 146, 150, 154, 158, 162, 166, 170, 174

mein gott ... so schwer ist das wirklich nicht ... aber du lernst ja auch nicht aus deinen anderen threads wo sowas schon angerissen wurde ...

und nur so neben bei : man sollte sich erstmal mit basics befassen .. wo eben ARRAYs und LISTs nun mal dazu gehören ... bevor man sich an eine GUI setzt und dabei ziemlich viel "falsch" bzw einfahc nur "ziemlich schlecht" macht
 

Zurück
Oben