Hallo liebe Forum-Mitglieder. Ich bin eine Informatikstudentin und wir haben gerade angefangen mit Java zu programmieren. Ich versuche gerade eine Übungsaufgabe zu lösen und stehe absolut auf dem Schlauch. Zuerst verstehe ich nicht wo der Unterschied ist zwischen rekursiv und nicht rekursiv? Und zweitens schaffe ich es gerade überhaupt nicht einen Plan zu entwickeln wie ich die Aufgabe lösen kann. Daher bitte und hoffe ich hier auf Hilfe.
Schreiben Sie eine rekursive Klassenmethode, die das Vorkommen einer Ziffer in einer Zahl zählt.
Z.B. sollte die Klassenmethode für die Zahl 1213414 und die Ziffer 1 das Ergebnis 3 liefern. Ihre
Klassenmethode muss die folgende Signatur haben:
public static int zaehleZifferInZahl(int ziffer, int zahl)
Rekursiv heißt einfach nur das eine Methode sich selbst wieder aufruft. In deinem Fall Könntest du mit Hilfe des modulo Operators (%) die letzte Ziffer prüfen und mit Hilfe des div Operators (/) den restlichen Teil der Zahl erneut mit deiner Methode prüfen.
Vielen Dank für die Antwort. Könntest du mir bitte etwas detaillierter die Vorgehensweise beschreiben? Ich kann jetzt deinen Gedankenansatz nicht folgen.
Zum 1. Teil:
Du kannst die letzte Ziffer prüfen indem du die Zahl modulo (%) 10 nimmst. Das Ergebnis ist dann die letzte Ziffer.
Zum 2. Teil:
Wie schon erwähnt bedeutet Rekursion, dass du die eigene Methode innerhalb der Methode nochmal aufrufst. Nach dem Prüfen der letzten Ziffer, kannst du die Zahl dann durch 10 dividieren (das löscht effektiv die letzte Ziffer) und wiederum die letzte Zahl überprüfen. Das ganze geht dann so lange bis du alle Ziffern überprüfst hast.
Das ist meine bisherige Lösung. Jedoch funktioniert diese nicht. Wo liegt den der Fehler:
public static void main(String[] args) {
System.out.println(zaehleZifferInZahl(1, 1123256));
}
//Aufgabe 1 Zählen und Ziffern
public static int zaehleZifferInZahl(int ziffer, int zahl){
int ergebnis = 0;
//int puffer = 0;
while (zahl > 0) {
zahl = zahl % 10;
if (zahl == ziffer){
ergebnis = +1;
}else {
zahl = zahl / 10;
}
}
return ergebnis;
}
Ok, jetzt läufts. hier mein Code
System.out.println(zaehleZifferInZahl(1,1213414));
}
//Aufgabe 1 Zählen und Ziffern
public static int zaehleZifferInZahl(int ziffer, int zahl){
int ergebnis = 0;
int puffer = 0;
while (zahl > 0) {
puffer = zahl % 10;
if (puffer == ziffer){
ergebnis = ergebnis + 1;
}
zahl = zahl / 10;
}
return ergebnis;
}
Gut, jetzt hast du schonmal eine iterative Lösung, aber du verwendest keine Rekursion.
Hier mal ein Beispiel für eine Rekursion, die die Anzahl der Ziffer einer Zahl ausgibt:
Wie du siehst wird die Funktion "anzahlZiffern" innerhalb der eigenen Funktion aufgerufen.
#Edit:
Bisschen OT, aber in der Schule bin ich an Rekursion auch immer verzweifelt. Hab echt lange gebraucht bis ich das mal halbwegs verstanden hatte.