Java Frage zur Do-Schleife

drunken.panda

Captain
Registriert
Juli 2008
Beiträge
3.921
Servus miteinander,

ich möchte gerne folgende Tatsache darstellen. Ich habe eine integer Variable a
und möchte gerne für diese alle ganzzahligen Teiler summieren.


Das Problem ist, dass jedes mal in der while Schleife die Summe der Teiler addiert wird obwohl das per if abfrage nur passieren soll, wenn Modulo von a / i == 0 ist.... Also quasi wenn ich keinen Restwert habe und so weiß, dass es ein ganzzahliger Teiler der Variable a ist.

Was mache ich falsch? Wie bekomme ich es hin, dass

summe_a_teiler = summe_a_teiler + zaehler_a;

nur ausgeführt wird, wenn drüber stehende Bedingung erfüllt ist und nicht bei jedem Schleifendurchlauf?!

Stehe seit Stunden auf dem Schlauch und meine Laune geht gegen 0.



Mein Ansatz sieht wie folgt aus:


public static void main(String[] args) {

int a = InputBox.readInt("int a eingeben");
int summe_a_teiler = 0;
int zaehler_a = 0;



do
{
zaehler_a++;
int rest = a % zaehler_a;
if (rest == 0);
{
summe_a_teiler = summe_a_teiler + zaehler_a;
}
}
while ( zaehler_a < a);



System.out.println(summe_a_teiler);
 
Zuletzt bearbeitet:
Entferne das Semikolon (eine leere Anweisung) hinter dem if()
 
Das schreit eigentlich nach einer for-Schleife, aber gut.
Der Fehler ist das Semikolon nach der if-Abfrage.

*Edit: :( Das liegt nur an meiner lahmen Tastatur.

Optimiert der Compiler eigentlich die deklarierte Variable in der Schleife?
Eigentlich wäre sie auch gar nicht notwendig.
Code:
do {
    if(a % ++zaehler_a == 0) {
        summe_a_teiler += zaehler_a;
    }
} while(zaehler_a < a);
 
Zuletzt bearbeitet:
danke Jungs -.-

Ja hatte das schon mit ner while ner For und ner do-while Schleife versucht ;///

Man sowas blödes hat mir so viel Zeit geraubt.

Naja es wär noch viel mehr geworden wenn ihr nicht ausgeholfen hättet. Vielen Dank!!!
 
Aber an sich müsste der Compiler bei sowas doch meckern, dass es einen Syntax Fehler gibt.
Intern optimiert der Compiler natürlich Code und legt so etwas wie eine Symboltabelle an, um Sachen nicht mehrfach prüfen zu müssen.
 
Hat nicht gemeckert!

Nutze Eclipse Indigo also vorletztes release, da unser Prof meint, das das neueste Release (Juno) einen heftigen Bug hätte.
 
Komisch, habe schon länger nicht mehr mit Eclipse gearbeitet - bin eher nun ein verwöhnter Visual Studio Nutzer.
 
Das ist kein Bug in Eclipse oder im Compiler, dass da kein Fehler gemeldet wird, da man statt

Code:
if( wasAuchImmer )
{
    // Mach etwas
}

auch

Code:
if( wasAuchImmer )
    // Mach etwas

für Einzeiler schreiben kann und der Compiler bei
Code:
if( wasAuchImmer );
wohl die zweite Form sieht.

Die restlichen geschweiften Klammern ergeben dann einen Block und die anderen beiden sind für die do-while Schleife.

Code:
do 
 { // Anfang do-while
 zaehler_a++;
 int rest = a % zaehler_a;
 if (rest == 0); // if ist hier fertig
 { // Start eines Blocks
 summe_a_teiler = summe_a_teiler + zaehler_a;
 } // Abschluss dieses Blocks
 } // Abschluss do-while
 while ( zaehler_a < a);
 
SymA schrieb:
Aber an sich müsste der Compiler bei sowas doch meckern, dass es einen Syntax Fehler gibt.


Wo siehst du da einen Syntax-Fehler? gibt nichts, worüber der Compiler meckern könnte :)
 
Zuletzt bearbeitet:
Mein Tipp: Mach mal Source->Format (oder Strg+Shift+F) hin und wieder, dann würdest du nämlich an der Formatierung erkennen, dass in einer Zeile ein einsames ";" steht und damit, dass dort etwas nicht stimmt.
 
Zurück
Oben