Frage von PlayerPro, 73

Java: Return und For-Schleife?

Hallo, ich bin ein blutiger Anfänger was Java anbelangt und hätte folgende Frage:

for (int a = 10011; a > 0; a = a / 10) {
        sum = 0;

        if (a % 10 == 0) {
            sum = sum + 1;
        }

    }
    return sum;

Diese Schleife befindet sich in einer Funktion, soll die Nullen einer Zahl zählen und deren Anzahl dann mit "return sum" zurückgeben. Allerdings weiß ich nicht wo ich return platzieren soll, sodass nicht immer 0 (statt: (hier) 2) rauskommt ... Ich verstehe das nicht ganz und bitte um Hilfe ;)

Antwort
von karinili, 73

Der Return ist ganz richtig platziert.

Das Problem ist eher, dass du sum am Beginn der Schleife 0 setzt. Das heißt, dass beim erneuten Aufruf der Schleife, die Summe zuerst 0 ist, und dann (wenn die if true zurück liefert – was sie in deinem Fall bei der letzten Division nicht tut – erneut aufsummiert.

Du müsstes sum sowieso vor der Schleife mit dem Variablen-Typ initialisiert haben. Wenn du dort int sum = 0; schreibst reicht das aus.

Kommentar von PlayerPro ,

Danke, hat mir wirklich sehr geholfen :D Könnte ich vielleicht noch um einen Gefallen bitten?

1.)

private static long simpler(short n) {
int sum = 0;
int n2 = (int) n;
int j = n2 % 10;
int basis = 10;
int potenz = 1;
while (n2 > 0) {
j = n2 % 10;
while (j > 0) {
potenz = potenz * basis;
j = j - 1;
}
sum = sum + potenz;
n2 = n2 / 10;
}
long sum2 = (long) sum;
return sum2;

Hier habe ich eine Methode geschrieben, die jeder Ziffer einer Zahl (n) eine Zehnerpotenz zuweist (sprich: 0 => 0, 1 => 10, 2 = > 100 etc.) und diese dann aufadiert. Leider versuche ich schon seit längerer Zeit den Fehler zu finden und komme einfach nicht drauf -_- Irgendwas ist da schiefgelaufen :/

Kommentar von karinili ,

Sorry für die Frage, aber du studierst nicht zufällig Informatik an der TU Wien? x)

1. Der Cast für n2 ist nicht notwendig.

2. Dein Problem ist, dass du die potenz nach dem Aufsummieren nicht zurücksetzt, sodass dir die zweite Schleife im Prinzip den Wert immer weiter aufmultipliziert und du sehr seltsame Werte bekommst. Vor allem bei größeren Zahlen.

Dein Code ist generell sehr umständlich. Gewisse Multiplikationen, wie die mit der basis, kann man auch direkt schreiben.

Kommentar von PlayerPro ,

Vielen Dank für deine Hilfe! :)

Und ja, ich bin an der TU, haha ^^

Kommentar von karinili ,

Hahaha, das find ich jetzt witzig. Dann sitzen wir wahrscheinlich im gleichen Hörsaal. Ich durfte die Beispiele nämlich genauso lösen x) (deshalb wusste ich auch die Fehler so schnell^^°).

Keine passende Antwort gefunden?

Fragen Sie die Community