Variable wird ignoriert - warum ?

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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.

Code:
// 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 !
 
> 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
 
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!
 
aah sry hab was probiert und noch nich geändert eben.

so sollte qt aussehen

Code:
 //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....

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

mit berechnet meine ich :

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

diesen auszug[/code]
 
Code:
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 😉
 
hää - verwirrt sei :bahnhof:
bei mir geht das ne - vor allem das system.println kann ich ne nutzen weils in swing is
 
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?
 
Hallo,

mach doch erstmal den doppelpunkt hinter der schleifenanweisung weg:

Code:
for (int j=0 ; j<7 ; j++ );  // <-- das ; muss weg, sonst wird der block nie abgearbeitet...
 
also.
qt how many :

Code:
  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
Code:
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
Code:
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]
 
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?
 
nee hab ich probiert - geht uach ohne ; nicht .
der setzt für j immernoch 0 ein
 
{
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
 
Code:
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 ?
 
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 😉
 
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

Code:
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
 
nur wenn ich das j oben nicht deklariere geht auch nichts mehr - dann meckert der compiler das j nicht gefunden wird :?
 
DAS liegt dann (vorausgesetzt du benutzt an keiner anderen stelle mehr j) daran das du das falsche ; wegtust:

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

          }
        }

Code:
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
 
eben nicht - komisch wenn ich das ; weglasse an besagter stelle und oben int j = 0; wglasse tritt der fehler auf
 
Code:
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
 
*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 ^^
 
jo stimmt, weil du sum zweimal hast...und nicht das ausgibst welches du hochzählst
 
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
 
Code:
 //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:
 
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

Code:
// 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)

Code:
  //++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);

      }
     }
  }
 
hier mal ein update des ActionEvents

Code:
  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());
       }
     }
  }
 
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 😉
 
joa hab ich auch grade bemerkt - war zu testzwecken das "<=" .
system.out.println sagt mir immer das wurf 0 ist => schleife oben falsch stimmts ?
 
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 ?
 
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..
 
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.
 
(von selbst programmiert sich das nicht, und ich mache es auch nicht 😉 )
 
hab nu den fehler gefunden int = 0 => na toll grade das will ich ja nicht.
hab das nun so gelöst

Code:
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
 
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

Code:
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:
 
was heißt denn 'hinzufügen'?

und Strings vergleicht man nicht mit ==, sondern mit equals()
 
hat sich erledigt - dummer fehler.
ich hab die buttons nicht mit text "0" versehen gehabt 😳
uuups
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben