0 Daumen
1,1k Aufrufe

Hi Sry falls dies Mathe ist aber ich habe keine Info forum auf die schnelle gefunden und da Mathematiker im Studium auch Grundlagen der Programierung haben dachte ich mir ich stell meine Frage mal hier.

Die Aufgabe ist diese:  Schreiben Sie zuerst eine rekursive Methode int teilerSumme(int zahl,int moeglicherTeiler), die die Summe aller Teiler der zahl berechnet.
In der Methode teilerSumme wird dabei folgendermaßen vorgegangen:
falls moeglicherTeiler == 0, ist die Rückgabe 0
falls moeglicherTeiler die zahl teilt, wird moeglicherTeiler zur Rückgabe der rekursiven Methode addiert, die den nächstkleineren möglichen Teiler berechnet
falls moeglicherTeiler die zahl nicht teilt, wird nur ein rekursiver Aufruf mit dem nächstkleineren möglichen Teiler durchgeführt 
Legen Sie die Methode teilerSumme so an, dass sie mit dem größten möglichen Teiler beginnt und in dem Rekursionsschritt den jeweils nächstkleineren möglichen Teiler prüft.
Bitte beachten Sie, dass moeglicherTeiler der größte mögliche Teiler ist, der getestet werden soll. Die Methode teilerSumme gibt aber die Summe aller Teiler zurück

Dies ist nun mein Versuch, jedoch bekomme ich immer missing return Statement.


    public static void main (String [] args)
    {
        int zahl = Integer.parseInt(args[0]);
        int moeglicherTeiler = Integer.parseInt(args[1]);
        System.out.println(teilerSummer(zahl, moeglicherTeiler));
    }
    
    public static int teilerSummer(int zahl, int moeglicherTeiler){
    if (moeglicherTeiler==0)
    {
        return 0;
    }
    else
        if (zahl%moeglicherTeiler==0)
        {
         teilerSummer(zahl,moeglicherTeiler-1);
                  return moeglicherTeiler;
        }
        else
        {
         teilerSummer(zahl,moeglicherTeiler-1);
        }
   
    }
}

Avatar von

In der letzten else-Anweisung steht auch kein return Statement :)

Wenn das nicht hilft, sollte die gesamte Funktion vor der letzten Klammer mit einem "return 0;" beendet werden. Der Compiler erkennt unter Umständen nicht, dass der if-else-Block immer zu einem return statement führt.

1 Antwort

+1 Daumen
Dies ist nun mein Versuch, jedoch bekomme ich immer missing return Statement.

Dies liegt daran, dass Du nur innerhalb der if-else-Kontrollstruktur ein Return-Statement eingebaut hast. Eine IDE (z. B. Eclipse) liefert Dir auch gleich einen Lösungsvorschlag.

error.png

Du musst im Code an der markierten Stelle ein geeignetes Return-Statement einfügen:

 public static int teilerSummer(int zahl, int moeglicherTeiler) {
if (moeglicherTeiler == 0) {
return 0;
} else if (zahl % moeglicherTeiler == 0) {
teilerSummer(zahl, moeglicherTeiler - 1);
return moeglicherTeiler;
} else {
teilerSummer(zahl, moeglicherTeiler - 1);
}
// HIER EIN RETURN-STATEMENT EINFÜGEN!
}

Du solltest allerdings Deinen Algorithmus noch einmal überdenken! Zudem heißt Deine Funktion noch 

public static int teilerSummer(int zahl, int moeglicherTeiler)

was nicht der Angabe

public static int teilerSumme(int zahl,int moeglicherTeiler)

entspricht.

Avatar von

Zum Schluss:

public static int teilerSummer(int zahl, int moeglicherTeiler)


ändern zu:

public static int teilerSumme(int zahl,int moeglicherTeiler)

Der einzige Unterschied ist das Leerzeichen nach dem Komma? Sehe ich das richtig? 

Der einzige Unterschied ist das Leerzeichen nach dem Komma? Sehe ich das richtig? 

Nope :-)

teilerSummer vs. teilerSumme

Okay. Danke :) 

Der Druckfehler war recht konsequent durchgezogen. 

Der Druckfehler war recht konsequent durchgezogen.

Mea culpa :-)

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community