Hi!
Irgendwie sehe ich meinen Fehler nicht! Hier mal eben der Code dann folgt die Beschreibung.
Code:
nachKommaOut="";
erreicht=false;
while (i<17) {
eingabeZahlNK *= 2;
System.out.println("i: "+ eingabeZahlNK);
if (eingabeZahlNK>1000000000){
if (erreicht==false) nachKommaOut = nachKommaOut + "1";
eingabeZahlNK -= 1000000000;
i++;
System.out.println(" gr ");
}
if (eingabeZahlNK<1000000000){
nachKommaOut = nachKommaOut + "0";
System.out.println(" kl ");
i++;
}
if (eingabeZahlNK==1000000000) {
nachKommaOut = nachKommaOut + "1";
erreicht=true;
i=19;
System.out.println(" gl ");
}
}
i=0;
erreicht=false;
als Eingabe bekommt die schleife 500000000.
dann habe ich ja diese Testausgaben womit ich beobachten kann in welche bedingung er rein geht.
als erstes geht er wie erwartet in gl (gleich) rein das ist gut doch dann beginnt er von vorn rechnet mal 2 und geht in gr(größer) rein und dann wieder in gl und dann ist erst schluss. nun wollte ich einfach mal verhinder das er an dem string eine 1 anhängt und habe dieses erreicht eingefügt. doch das bringt nicht das geringst. genau die gleiche ausgabe.
Ausgabe:
eingabeZahlNK :500000000
i: 1000000000
gl
i: 2000000000
gr
gl
Seht ihr wieso und weshalb? Bittte gebt mir bescheid! Danke
Du solltest Dich mir der Idee des "else" anfreunden. Ansonsten werden u.U. mehrere Zweige durchlaufen, was vermutlich nicht gewollt ist. Beispiel 1000000000*2 = 2000000000, also der "GR"-Zweig. In diesem wird aber wieder 1000000000 abgezogen, also ist die eingabeZahlNK wieder 1000000000: es wird also in diesem Schleifendurchlauf zusätzlich der "GL"-Zweig durchlaufen, was sicher ungewollt ist. Hier wird auch i auf 19 gesetzt, was die Schleife (nicht sonderlich elegant) beendet.
bringt nix der geht erste in gl rein dann in gr und geht da bis 17 erreicht ist. und diese boolean erreicht hat erst kurz auf false dann auf true verstehe net wieso das net geht.
hab ne an dere Klasse und rufe dort diese klasse und methode auf.
verstehe net wieso das nicht geht.
bsp ich bekomme eingaben zwischen 1 und 999999999 und der soll mir nen String von 0 und 1 ausgeben. und in meinem test fall halt eine eingabe von 500000000 und da soll nur ein 1 raus kommen. hoffe ihr versteht was ich meine.
was wäre den eleganter als das mit dem i=19 ?
hilfe.
äh, ja also ich könnte mir vorstellen dass das desshalb ist, da du die Zahlen (ich nehme an es sind double werte) per "==" vergleichst, und da wirst du eigentlich nie genau "==" rausbekommen probier doch mal statt in deiner methode
eingabeZahlNK==1000000000 zu verwenden
folgendes zu machen;
if ((eingabeZahlNK -1000000000) < 0.0000001){
nachKommaOut = nachKommaOut + "1";
erreicht=true;
i=19;
.
.
.
}
für den Vergleich zwischen dem absoulten Betrag von deinen zwei zahlen gibts glaub auch ne Methode weiß aber grade nicht wie sie heißt, findest aber best.
falls das alles nicht dein problem ist, sei nachsichtig mit mir, ich bin grade erst erwacht *G* aber ich denke das ist schon das prob.
aber vermute du meinst sowas wie .equals damit kann ich String vergleichen.
ich habe mal im ersten if bedingung mal erreicht ausgeben lassen da ist es true doch blötzlich im else zweig erreicht dann wieder false.
was ich auch nicht verstehe ist wieso der erst in in if rein geht und dann in else.
soweit ich weis sollte doch nur if ODER else abgearbeitet werden.
warum ist das so seltsam?
mfg
der fehler lag bei mir.
ich hatte an einer anderen Stelle geschrieben:
if (mehode().length=x) {
.... methode soll ausgeführt und ausgabe soll weiter genutzt werden .....}
damit habe ich die gleiche methode ja zweimal aufgerufen. hattte ich vorher einfach nicht gesehen.
was so ein Mittag und etwas ruhe alles ausmacht!
danke für eure unterstützung
mfg christian