Verbesserungsvorschläge für Java Übung?

2 Antworten

Falls ihr Math.abs() verwenden dürft, würde ich persönlich folgendes empfehlen:

int summiereAuf(int a) {
    return (a*a+Math.abs(a))/2;
}

Ansonsten das:

int summiereAuf(int a) {
    if (a>=0) {
        return (a*a+a)/2;
    } else {
        return -(a*a-a)/2;
    }
}
Woher ich das weiß:Studium / Ausbildung – Informatikstudium
TheOrzoBiased  21.11.2020, 00:51

Ah ich muss an die erste Funktion leider etwas anfügen, so wie oben funktionierts nicht:

static int summiereAuf(int a) {
    return Integer.signum(a) * (a*a+Math.abs(a))/2;
}
0
Hat jemand eine Ahnung, was genau ich hier falsch gemacht habe, und evtl. Dies gelöst werden kann?

nun, schau dir doch mal an, was genau du programmiert hast.

betrachten wir die erste Schleife. While a != 0 wird a immer kleiner, sofern a kleiner als 0 ist. Bei a > 0 wirst du in eine Endlosschleife kommen, die du nie verlässt.

Reduziere das ganze mal zu einer Schleife und zähle in jeder Schleifeniteration einen Wert zu c drauf und verändere den Zähler, bis es passt.

Während a != 0: Summiere a auf das Ergebnis, reduziere a um 1

Das passt, sofern du Positive Werte nimmst. Um es auch für negative Werte funktional machen zu können, erhöhst du a jeweils um 1, sollte a negativ sein

Eine andere Möglichkeit, komplett ohne Schleife: Gauß'sche Summenformel