Java: Return und For-Schleife?

1 Antwort

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.


PlayerPro 
Fragesteller
 29.10.2015, 23:07

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

0
karinili  29.10.2015, 23:15
@PlayerPro

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.

1
PlayerPro 
Fragesteller
 30.10.2015, 15:12
@karinili

Vielen Dank für deine Hilfe! :)

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

0
karinili  01.11.2015, 17:43
@PlayerPro

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^^°).

0