Bestimmen, wie oft ein Char in einem Array vorkommt

Maxpower123

Mitglied
Hallo,

ich versuche ein (rekursives) Programm zu schreiben, das überprüft, ob sich ein übergebener Character in einem gegebenen Array befindet.

Leider zählt mein Programm den ersten Buchstaben nur einmal, obwohl er zweimal vorkommt. Ich fange dabei von hinten an zu überprüfen.

Java:
public static void testAnzahl() {
            char[] c1 = "dortmund".toCharArray();
            for (char ch = 'a'; ch <= 'z'; ch++){
                System.out.println("Anzahl " + ch + ": " + anzahl(ch, c1));
            };

public static int anzahl(char ch, char[] arr) {         
         
            if (ch == arr[arr.length-1]) {
            return anzahlHilfsmethode(ch, arr, arr.length-1, 0);             
            } 
         
            if (ch != arr[arr.length-1]) {
                return anzahlHilfsmethode(ch, arr, arr.length-1, 0);             
            }             
         
            return anzahlHilfsmethode(ch, arr, arr.length-1, 0);
         
        }     
     
     
        public static int anzahlHilfsmethode(char ch, char[] arr, int index, int counter) {         
         
         
            if (index < 0) {
                return counter;
            }         
         
            if (ch == arr[index]) {
                counter += 1;
                 return    anzahlHilfsmethode(ch, arr, index-1, counter);
            } 
         
            if (ch != arr[arr.length-1]) {
                return anzahlHilfsmethode(ch, arr, index-1, counter);             
            }                     
         
                return counter;             
        }


Kann mir vielleicht jemand sagen, woran das liegt?
 
Deine Logik ist etwas zu verworren, man kann das ein wenig einfacher schreiben:
Java:
public static void testAnzahl() {
  char[] c1 = "dortmund".toCharArray();
  for (char ch = 'a'; ch <= 'z'; ch++) {
    int anzahl = anzahl(ch, c1);
    if (anzahl != 0) {
      System.out.println("Anzahl " + ch + ": " + anzahl(ch, c1));
    }
  }
}

public static int anzahl(char ch, char[] arr) {
  return anzahl(ch, arr, 0, 0);
}

private static int anzahl(char ch, char[] arr, int index, int counter) {
  if (index >= arr.length) {
    return counter;
  } else {
    if (ch == arr[index]) {
      return anzahl(ch, arr, index + 1, counter + 1);
    } else {
      return anzahl(ch, arr, index + 1, counter);
    }
  }
}
Oder geht natürlich noch etwas kürzer:
Java:
public static void testAnzahl() {
  char[] c1 = "dortmund".toCharArray();
  for (char ch = 'a'; ch <= 'z'; ch++) {
    int anzahl = anzahl(ch, c1);
    if (anzahl != 0) {
      System.out.println("Anzahl " + ch + ": " + anzahl(ch, c1));
    }
  }
}

public static int anzahl(char ch, char[] arr) {
  return anzahl(ch, arr, 0, 0);
}

private static int anzahl(char ch, char[] arr, int index, int counter) {
  return index < arr.length ? anzahl(ch, arr, index + 1, counter + (ch == arr[index] ? 1 : 0)) : counter;
}
 

Zurück
Oben