Rekursive Hilfsmethode
ich kann nicht finden die richtige Lösung für diese übung, hier ist die Aufgabe:
(Vorkommen eines angegebenen Zeichens in einem array) Schreiben Sie eine rekursive Methode, die
findet die Anzahl der vorkommen eines angegebenen Zeichens in einem array. Müssen Sie
definieren Sie die folgenden beiden Methoden. Die zweite ist eine rekursive Hilfsmethode.
public static int count(char[] chars, char ch)
public static int count(char[] chars, char ch, int high)
Schreiben Sie ein test-Programm, das den Benutzer auffordert, geben Sie eine Liste von Zeichen in einer Zeile,
und ein Zeichen und zeigt die Anzahl der vorkommen des Zeichens in der Liste.
1) kann ich es lösen nur wenn ich einen anderen parameter (int index) aber wie kann ich es machen ohne das hinzufügen eines weiteren Parameters, oder mit for-Schleife ?
2.) Warum ist die helper-Methode gibt es? Ich verstehe den Zweck nicht von helper-Methoden in der Rekursion.
Hier ist meine Lösung:
package occurencesinarray;
import java.util.Scanner;
public class Start {
public static void main(String[] args){
System.out.println("Enter few characters: ");
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
char[] chars = new char[s.length()];
for(int i = 0; i < s.length(); i++){
chars[i] = s.charAt(i);
}
System.out.println("Enter desired character: ");
char ch = scan.nextLine().charAt(0);
System.out.println(count(chars, ch));
}
public static int count(char[] chars, char ch){
return count(chars, ch, 0, 0);
}
public static int count(char[] chars, char ch, int high, int index){
if(index == chars.length){
return high;
}
if(chars[index] == ch){
return count(chars, ch, high + 1, index + 1);
} else{
return count(chars, ch, high, index + 1);
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als AllenKll bereits darauf hingewiesen, dass der
high
Wert sollte wohl die Rolle, die Sie für Ihreindex
. Sie wurden, zählen der Anzahl von vorkommen in derhigh
variable, aber dieses zählen können "verborgen" werden in der Rekursion.Den Zweck dieser "Hilfs" - Methoden für die Rekursion im Allgemeinen ist genau das: Sie haben in der Regel (mindestens) einen zusätzlichen parameter, der irgendwie beschreibt, wie weit die Rekursion hat das schon ging oder wie weit es noch gehen. Als Beispiel für letzteres: Sie hätte auch die
high
variable als einen "countdown", schreibenNatürlich, man könnte nur bieten die helper-Methode. Anstelle von aufrufen
könnten Sie Fragen, die Benutzer zu nennen
Aber das problem ist hier, dass diese Methode missbraucht werden kann: dann, Wenn der Benutzer übergibt einen falschen Wert als letzten parameter an, dann wird die Methode nicht funktionieren wird.
Hinweis: Dieses ganze "Helfer-Methode", was nur Sinn macht, wenn die helper-Methode ist private. Wenn es
public
wird, kann der Benutzer immer noch die falsche Methode. Ich sehe, dass diepublic
modifier aufgefordert wurde, die Aufgabe, die Beschreibung, aber... vielleicht erhalten Sie einige bonus-Punkte, wenn Sie Ihre Ausbilder bewusst diesen Fehler 😉Wie wäre es damit:
hoch ist der index
Die helper-Methode ist also der Aufrufer muss nicht wissen über die "high" - parameter. In einer anderen Sprache, wie C, wo Sie können die default-Parameter, es würde nicht notwendig sein.
Erstens, Ihre Helfer (rekursiven) Methode sollte
private
, nichtpublic
. Es erfordert wissen wie es funktioniert, um der Lage sein, es richtig. Dies geht gegen eine gute software-design, das besagt, dass die Implementierung ist nicht wichtig, solange Ihr Vertrag ist Folge zu leisten.Die erste Methode ist nur die öffentliche Fassade setzt, bis die ursprünglichen Bedingungen (Parameter) für die rekursive Methode. Die eigentliche Handlung ist in der rekursiven Methode.
Recursive (- Helfer) - Methoden haben in der Regel drei Dinge, die bestimmt werden müssen (und codiert):
Der ursprüngliche Zustand ist in der Regel behandelt durch eine Fassade-Methode, wie in Ihrem Fall.
Den Endstatus ist in der Regel die erste Zeile der code in der Methode, und bewirkt eine sofortige Rückkehr (auch der Fall für Ihren Fall)
Wenn die Abbruch-Bedingung nicht erfüllt ist, ist der Staat (und/oder Berechnung) können lokal gespeichert werden, dazu beitragen, um den zurückgegebenen Wert, dann wird die Methode ruft sich selbst mit Parametern Voraus, dass der Staat auf die nächste position. Das Ergebnis des selbst-Aufruf zurückgegeben wird, möglicherweise in Verbindung mit Daten aus dem gespeicherten Zustand.
In Ihrem Fall, übergeben Sie den lokalen Zustand durch den nächsten Anruf. Tun Sie das nicht. Stattdessen kombinieren es:
Und rufen Sie es mit einem index von
0
um den Prozess zu initiieren.