Bustaben zaehlen

Hi, ich habe eine einfache Aufgabe: Bustaben in einem Wort zu zaehlen. Die Ausgabe muss String sein und die Methode muss rekursiv sein. Ich bekomme jetzt immer einen Compilerfehler in zeile 27

Java:
public class Wort{
  public static void main (String[] args){
    
    zaehle("ernste",'e');
    
    
  }
  
  
  
  public static String zaehle(String s, char gesucht){
    int i = 0;
    
    Integer a = new Integer(i);
    String z = a.toString();       // i wird in einen String umgewandelt 
    
    
    if(i == s.length()) {   //erhofftes ende der rekusiven schleife
      return z;
      }
    
      else  {
        

      if (s.charAt(i) == gesucht){     // falls der bustabe uebereinstimmt wird i um eins erhoeht
        i++;
        zaehle(s,gesucht);
      }
    }
    return z;
    
    
  
    
    
  }
  
  
}

Ich habe jetzt so viel ausprobiert und verstehe nicht warum der nicht richtig compiled.. (bin mir auch nicht sicher ob das Compiler fehler genannt wird, da ich das programm problemlos starten kann)
 
Zuletzt bearbeitet:
Java:
public class Aufgabe2{
  public static void main (String[] args){
    
    System.out.println(zaehle("ernsteeee",'e'));
    
    
  }
  
  int i = 0;
  int g = 0;
  public String zaehle(String s, char gesucht){
    
    g++;
    
    String z = i + "";
    
    
    if(g == s.length()) {
      
      return z;
    }
    
    else  {
      
      
      if (s.charAt(g-1) == gesucht){
        i++;
        zaehle(s,gesucht);
      }
      zaehle(s,gesucht);
    }
    
    return null;
    
    
    
    
  }
  
  
}
 
Zuletzt bearbeitet:
Java:
public class Aufgabe2{
  
  public static void main (String[] args){   
    
    zaehle("ernsteeee",'e');
    
    
  }             
  
  int i = 0;
  int g = 0;  
  public int zaehle(String s, char gesucht){
    
    g++;
    
    
    
    
    if(g == s.length()) {
      
      return i;
    }
    
    else  {
      
      
      if (s.charAt(g-1) == gesucht){
        i++;
        zaehle(s,gesucht);
      }
      zaehle(s,gesucht);
    }
    return i;
    
    
    
    
    
  }
  
  
}
 

njans

Top Contributor
zaehle muss statisch sein, wenn du das direkt aus einer statischen Methode aufrufen willst. Gleiches gilt für g und i.
Alternativ kannst du auch einfach mal ein neues Objekt von Aufgabe 2 erstellen und das in der Main Methode verwenden:
Java:
		Aufgabe2 aufgabe = new Aufgabe2();
		aufgabe.zaehle("ernsteeee", 'e');

Wenn man das dann soweit hat, dass es kompiliert, dann kriegt man:

Java:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9
	at java.lang.String.charAt(Unknown Source)
	at weightcalc.Aufgabe2.zaehle(Aufgabe2.java:38)

Ergo greifst du an einer Stelle 9 in deinem Array zu, welches aber keine 9te stellen hat!
Das liegt dann einer unnötigen Rekursion, die du einem if Block hast (schau mal nach, welche das ist ;) )
Außerdem ignorierst du den letzten Buchstaben.
 
Zuletzt bearbeitet:

Neue Themen


Oben