0 Daumen
163 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);
        }
   
    }
}

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 Punkt
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.

von 8,3 k

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

Ähnliche Fragen

0 Daumen
2 Antworten
0 Daumen
1 Antwort

Willkommen bei der Stacklounge! Stell deine Frage sofort und kostenfrei

x
Made by a lovely community
...