# Variable wird ignoriert - warum ?



## Guest (9. Mrz 2007)

ich habe eine geschachtelte schleife gebaselt in der 2 variablen vorkommen, allerdings wir die varible "j" nicht berechnet - warum ??  :?: 

habe "j" sogar doppelt initialisiert in der schleife und am anfang der progs.


```
// DreierPasch Btn
public void cmdDreierPaschActionPerformed(ActionEvent evt) {

      for (int i=1;i<7;i++)
      {
        if (howmany(i)>=3)
        {
           int sum=0;
           for (int j=0 ; j<7 ; j++ );
          {
            sum = sum+(howmany(i)*i);

          }
        } lblDreierPasch.setText(sum+"");
      } lblDreierPasch.setVisible(true);
    }
```

howmany ist eine zählerfunktion - nebenbei gesagt
die schleife wird durchlaufen - hab ich schon getestet !


----------



## SlaterB (9. Mrz 2007)

> allerdings wir die varible "j" nicht berechnet 

was heißt das? welchen Wert erwartest du wann und welcher Wert kommt stattdessen?

in deinem Programm wird j anscheinend nirgendwo berechnet und der Wert von j auch nicht gelesen,

j wird nur als Schleifenvariable benutzt, meinst du das mit Berechnung?
was funktioniert daran nicht?.........


> habe "j" sogar doppelt initialisiert in der schleife und am anfang der progs

doppelt ist in diesem Fall einmal zuviel 


da j im geposteten Code eine lokale Variable ist ist, wird eine evtl. vorhande Exemplarvariable j nicht verändert


----------



## thE_29 (9. Mrz 2007)

Weil dann hast du einmal eine Klassenvariable und einmal eine Methodenvariable und somit sind das 2 verschiedene Variablen!

Wir bräuchten den Source wo du j nochmal definierst, und was genau du mit "berechnet" meinst!


----------



## Guest (9. Mrz 2007)

aah sry hab was probiert und noch nich geändert eben.

so sollte qt aussehen


```
//Dreierpasch
    public void cmdDreierPaschActionPerformed(ActionEvent evt) {

      for (int i=1;i<7;i++)
      {
        if (howmany(i)>=3)
        {
           int sum=0;
           for (int j=0 ; j<7 ; j++ );
          {
            sum = sum+(howmany(j)*j);

          }
        } lblDreierPasch.setText(sum+"");
      } lblDreierPasch.setVisible(true);
    }
```

und hier ist j nochmal initialisiert - sonst bekomm ich einen fehler beim compilieren das j nicht gefunden wird wenn ich das nicht habe....


```
public class frame extends JFrame
{
  // Anfang Variablen
  //int i = 0;
  int j = 0;
  int sum=0;
  .................... usw
```

mit berechnet meine ich :


```
for (int j=0 ; j<7 ; j++ );
          {
            sum = sum+(howmany(j)*j);
```

diesen auszug[/code]


----------



## SlaterB (9. Mrz 2007)

```
System.out.println("this.j: "+this.j+", lokales j noch nicht definiert");
for (int j=0 ; j<7 ; j++ ); 
{ 
     System.out.println("this.j: "+this.j+", lokales j: "+j);
     int x = howmany(j)*j;
     System.out.println("x: "+x);
     sum = sum+x; 
     System.out.println("sum: "+sum);
} 
System.out.println("this.j: "+this.j+", lokales j nicht mehr definiert"););
```
WAS GEHT NICHT??

Probleme überhaupt zu beschreiben ist wohl eine Kunst


----------



## Guest (9. Mrz 2007)

hää - verwirrt sei  :bahnhof: 
bei mir geht das ne - vor allem das system.println kann ich ne nutzen weils in swing is


----------



## SlaterB (9. Mrz 2007)

ok, dann vergiss meinen Code,

nochmal die Frage: was geht nicht?
du kannst doch keinen normalen Java-Code präsentieren und sagen 'geht nicht',
dann sag ich 'geht' und Diskussion zu Ende,
testen kann den eh niemand, da howmany() und anderes nicht bekannt ist,

also: Exceptions zur Laufzeit?, Compilerfehler?, falsche Berechnungen?
bei letzterem müsstest du allerdings auch genaue Eingabe- und Ausgabewerte mitteilen,
wird schwierig ohne Konsole,

eigentlich hat jedes normale Programm eine Konsole,
hast du eine main-Operation zum Starten?
gibt dort doch mal 
System.out.println("Hello World");
ein,
erscheint nirgendwo Text?


----------



## ronny (9. Mrz 2007)

Hallo,

mach doch erstmal den doppelpunkt hinter der schleifenanweisung weg:


```
for (int j=0 ; j<7 ; j++ );  // <-- das ; muss weg, sonst wird der block nie abgearbeitet...
```


----------



## Guest (9. Mrz 2007)

also.
 qt how many :


```
public int howmany(int number){
    String nr = number+"";
    int count=0;
    for (int i =0;i<5;i++){
      if(nr.equals(cmdSelected[i].getText())){
         count++;
      }
    }
    return count;
  }
```

da wird von 5 buttons der wert ausgelesen.

das programm hat keinerlei fehler beim compilieren.keine runtime errors - nichts !!
wenn ich bei 

```
for (int j=1 ; j<7 ; j++ )
```
einen haltepunkt setze dann sehe ich das j=0 ist 
und genau darin besteht das problem.
die schleife wird durchlaufen - hab ich probiert mit 

```
for (int j=0 ; j<7 ; j++ ); 
          { 
            sum = sum+(howmany(j)*j); 

          } 
        } lblDreierPasch.setText(sum+"[color=red]TEST[/color]");
```
das wir mir angezeigt nur sum und j nicht da j nicht berechnet wird - auch ohne ; hinter schleifenanweisung[/code]


----------



## SlaterB (9. Mrz 2007)

der Tipp von ronny im Posting zuvor scheint effektiv 

edit: oh, hattest wohl schon gesehen,

ersetze doch mal die Schleife durch 7x 3 Zeilen Code,
ansonsten kann ich nix sagen wenn du keine Möglichkeit hast, Zwischenwerte festzustellen,
oder doch einen Debugger?


----------



## Guest (9. Mrz 2007)

nee hab ich probiert - geht uach ohne ; nicht .
der setzt für j immernoch 0 ein


----------



## Guest (9. Mrz 2007)

was meinst du mit 7x3 zeilen code ?


----------



## SlaterB (9. Mrz 2007)

{ 
            sum = sum+(howmany(1)*1); 

          } 


 { 
            sum = sum+(howmany(2)*2); 

          } 


usw.

-----

benutzte auch mal xy statt j als Schleifenvariable,
bzw. entferne endlich die Exemplarvariable j, wenn du sie nur für diese Codestelle eingefügt hast,
wenn da ein Compilerfehler kommt, dann muss man den eben untersuchen


----------



## Guest (9. Mrz 2007)

```
for (this.j =1 ; j<1 ; j++ ) {
            int sum = (this.howmany(j)*j);
           }lblViererPasch.setText(this.sum+"");

for (this.j =1 ; j<2 ; j++ ) {
            int sum = (this.howmany(j)*j);
           }lblViererPasch.setText(this.sum+"");

.. usw
```

sowas ?


----------



## SlaterB (9. Mrz 2007)

ne

{ 
sum = sum+(howmany(1)*1); 
} 

{ 
sum = sum+(howmany(2)*2); 
}
lblViererPasch.setText(this.sum+""); 


oder auch kürzer
sum = sum+(howmany(1)*1); 
sum = sum+(howmany(2)*2); 
sum = sum+(howmany(3)*3); 
sum = sum+(howmany(4)*4); 
..
lblViererPasch.setText(this.sum+"");

nur wenn das nicht geht, dann findest du vielleicht eine andere Fehlerquelle,

wenn das geht, dann hilft es wenig beim Problem mit j


----------



## Guest (9. Mrz 2007)

sollte das auch inne schleife ?

ich habs ohne drinne - funzt ne


----------



## gast2 (9. Mrz 2007)

sorry, aber ich glaube das es sehr wohl mit  dem ";" zu tun hat. denn das würde auch erklären wieso er "j" oben im programm nochmal initialisieren mußte. logisch denn durch


```
for (int j=0 ; j<7 ; j++ );    
          {
            sum = sum+(howmany(j)*j);     <--------

          }
        }
```

kennt dein prog "j" bei der markierten stelle nicht mehr. deswegen hat der compiler da rumgemeckert. also kannste die deklaration am anfang deines progs schon mal wegnehmen...

alles andere kann ich mir schwer vorstellen...

gast2


----------



## Guest (9. Mrz 2007)

nur wenn ich das j oben nicht deklariere geht auch nichts mehr - dann meckert der compiler das j nicht gefunden wird  :?


----------



## gast2 (9. Mrz 2007)

DAS liegt dann (vorausgesetzt du benutzt an keiner anderen stelle mehr j) daran das du das falsche ; wegtust:


```
int j = 0; // ist nötig
...
for (int j=0 ; j<7 ; j++ );     <--------
          {
            sum = sum+(howmany(j)*j);     

          }
        }
```


```
int j = 0; // ist jetzt überflüssig
...
for (int j=0 ; j<7 ; j++ )     <--------
          {
            sum = sum+(howmany(j)*j);     

          }
        }
```

ne andere möglichkeit gibt es gar nicht. benutzt du j noch irgendwo anders? sonst gib uns mehr code...

gruß
gast2


----------



## Guest (9. Mrz 2007)

eben nicht - komisch wenn ich das ; weglasse an besagter stelle und oben int j = 0; wglasse tritt der fehler auf


----------



## Guest (9. Mrz 2007)

```
public class frame extends JFrame
{
  // Anfang Variablen
  int j =0;
  int sum=0;

.....

 // Zählerfunktion überprüft wie viele Würfel des übergebenen Wertes vorhanden sind
  public int howmany(int number){
    String nr = number+"";
    int count=0;
    for (int i =0;i<5;i++){
      if(nr.equals(cmdSelected[i].getText())){
         count++;
      }
    }
    return count;
  }


........

//Dreierpasch
    public void cmdDreierPaschActionPerformed(ActionEvent evt) {

       for (int i=1;i<7;i++)
      {
        if (howmany(i)==3)
        {

           for (this.j =1 ; j<7 ; j++ )
          {
            int sum = (this.howmany(j)*j);

          } lblDreierPasch.setText(this.sum+"");
        }lblDreierPasch.setVisible(true);
      }
    }
```

mehr text is eigentlich uninteressant denke ich - ich könnt  auch das ganze prog posten aber da swär quatsch denk ich


----------



## Gast (9. Mrz 2007)

*gg*,

schritt für schritt:
zeile 4:
int j=0 <-- nimmst du raus, diese brauchst du nicht mehr

zeile 32:
nun muss es so aussehen:
for (int j =1 ; j<7 ; j++ ) 

noch eine anmerkung:
lblDreierPasch.setText(this.sum+""); <-- da wird immer 0 rauskommen ^^


----------



## gast2 (9. Mrz 2007)

jo stimmt, weil du sum zweimal hast...und nicht das ausgibst welches du hochzählst


----------



## gast2 (9. Mrz 2007)

nochwas...du kannst erzählen was du willst, aber dein j=0 am anfang hat nichts aber auch gar nichts mit deinem j in cmdDreierPaschActionPerformed(...) zu tun. wenn der compiler meckert dann hast du irgendwo anders im prog noch ein j zu stehen...womit entwickelst du? eclipse oder netbeans zeigen dir solche abhängigkeiten...

gast2


----------



## Guest (9. Mrz 2007)

```
//Dreierpasch
    public void cmdDreierPaschActionPerformed(ActionEvent evt) {

       for (int i=1;i<7;i++)
      {
        if (howmany(i)>=3)
        {
        int sum =0;
          for (int j=1;j<7;j++) {
             sum = sum+(howmany(j)*j);
          }
        lblDreierPasch.setText(sum+"");
        }lblDreierPasch.setVisible(true);
      }
    }
```

Es lebt    !!
damit gehts (auch ohne j im anfang   )
habt vielen dank für die hilfe
kann sein das ich wegen was anderem wiederkomme  :wink:


----------



## Guest (13. Mrz 2007)

und wieder ein problem - nur diesmal ist es ne zählschleife.
ich möchte dass wenn ich einen button 3x betätigt habe dass dieser und 5 andere ausgeblendet und 5 weitere eingeblendet werden.
Allerdings blendet mir das prog den würfel schon nach einmal würfeln aus. warum ?? eigentlich müsste ja bis 3 hoch gezählt werden aber das  wird irgendwie nicht beachtet.

das ist die zählschleife


```
// Zählschleife überprüft wie oft gewürfelt wurde
  public int wurf()
  {
    int count = 0;
    for (int i=0;i>0;i++)
    {
      count++;
    }
    return count;
  }
```

das ist das action event im jbutton (mit random funktion - aber nicht relevant)


```
//++Würfeln++
  public void cmdWuerfelnActionPerformed(ActionEvent evt) {
     for(int i =0;i<5;i++){
       cmdWuerfel[i].setText(Math.round(Math.random()*5)+1+"");

       if (wurf() >= 3){
        cmdWuerfeln.setVisible(false);
        cmdWuerfel[i].setVisible(false);  
        cmdSelected[i].setVisible(true);

      }
     }
  }
```


----------



## Guest (13. Mrz 2007)

hier mal ein update des ActionEvents 


```
public void cmdWuerfelnActionPerformed(ActionEvent evt) {
     for(int i =0;i<5;i++){
       cmdWuerfel[i].setText(Math.round(Math.random()*5)+1+"");

       if (wurf() <= 3){
        cmdWuerfeln.setVisible(false);
        cmdWuerfel[i].setVisible(false);
        cmdSelected[i].setVisible(true);
        cmdNeu.setVisible(true);
        cmdSelected[i].setText(cmdWuerfel[i].getText());
       }
     }
  }
```


----------



## SlaterB (13. Mrz 2007)

fang doch mal bei wurf() an, was soll das?
die gibt immer 0 zurück, kürzer wäre 
public int wurf() 
  { 
     return 0; 
  }
und immer noch seltsam..

die Operation hängt doch in keiner Weise von irgendwelchen externen Einflüssen ab,
du kannst froh sein dass die i-Schleife gar nicht erst durchlaufen wird, gäbe sonst eine Endlosschleife

wie if (wurf() >= 3){ true werden soll ist mir ein Rätsel..
mach doch wieder das gute alte System.out.println:

int wurf = wurf();
System.out.println("wurf ist: "+wurf);
if (wurf >= 3) {
...
}

edit: mit <=3 machts natürlich Sinn


----------



## Guest (13. Mrz 2007)

joa hab ich auch grade bemerkt - war zu testzwecken das  "<=" .
system.out.println sagt mir immer das wurf 0 ist => schleife oben falsch stimmts ?


----------



## Guest (13. Mrz 2007)

hmm der beitrag war doof - kann leider nicht editen.

ich will ja in der oberen schleife immer einen hoch zählen - aber warum tut er das nicht ?


----------



## SlaterB (13. Mrz 2007)

was heißt falsch..

sie tut einfach nix, keine falsche Schreibweise oder so, sondern konzeptionell ohne Funktion,
insofern falsch, ja 

> ich will ja in der oberen schleife immer einen hoch zählen 

ist keine gute Aufgabenbeschreibung,
z.B. isst die Frage wann das passieren soll, bei Benutzereingaben?
das kann man doch mal in der Gesamtheit beschreiben..


----------



## Guest (13. Mrz 2007)

die schleife soll hochzählen , wenn ich den button cmdWuerfeln drücke. nur das ich die rechnung als eigene funktion haben möchte. deshalb habe ich _public int wurf_ 
das programm is ein kniffel spiel das  ich programmiere deswegen darf cmdWuerfeln nur 3x in einem "zug" betätigt werden.


----------



## SlaterB (13. Mrz 2007)

(von selbst programmiert sich das nicht, und ich mache es auch nicht  )


----------



## Guest (13. Mrz 2007)

hab nu den fehler gefunden int = 0 => na toll grade das will ich ja nicht.
hab das nun so gelöst


```
public void cmdWuerfelnActionPerformed(ActionEvent evt) {
     wuerfe++;
     for(int i =0;i<5;i++){
       cmdWuerfel[i].setText(Math.round(Math.random()*5)+1+"");
       if (wuerfe >= 3){
        cmdWuerfeln.setVisible(false);
        cmdWuerfel[i].setVisible(false);
        cmdSelected[i].setVisible(true);
        cmdNeu.setVisible(true);
        cmdSelected[i].setText(cmdWuerfel[i].getText());
       }
     }
  }
```
wuerfe is am anfang initialisiert


----------



## Guest (13. Mrz 2007)

neues problem  :? .
hab nun die 3x würfeln funktion drin.
wenn ich nun 3x gewürfelt hab sollen die werte der würfel automatisch in die auswahl übernommen werden, aber keine vorhandenen werte ersetzen.
ich hab mir das so gedacht :

cmdSelected - auswahl buttons
cmdWuerfel - würfel buttons


```
public void cmdWuerfelnActionPerformed(ActionEvent evt) {
     wuerfe++;

     for(int i =0;i<5;i++){
       cmdWuerfel[i].setText(Math.round(Math.random()*5)+1+"");
       if (wuerfe >= 3){
        cmdWuerfeln.setVisible(false);
        cmdWuerfel[i].setVisible(false);
        cmdSelected[i].setVisible(true);
        cmdNeu.setVisible(true);
        lblWahl.setVisible(true);
         if(cmdSelected[i].getText() == "0"){
           cmdSelected[i].setText(cmdWuerfel[i].getText());
          }

       }
     }
  }
```

so weit so gut - die vorhandenen buttons in der auswahl werden nicht ersetzt aber die fehlenden auch nicht hinzugefügt  :bahnhof:


----------



## SlaterB (13. Mrz 2007)

was heißt denn 'hinzufügen'?

und Strings vergleicht man nicht mit ==, sondern mit equals()


----------



## Guest (13. Mrz 2007)

hat sich erledigt - dummer fehler.
ich hab die buttons nicht mit text "0" versehen gehabt   
uuups


----------

