# Char Arrays



## Flowertime (10. Apr 2016)

Hi Leute. Ich soll bei einer Aufgabe eine Methode erstellen bei der ich einen String übergeben bekomme, in ein Char array ändere und danach als String wieder ausgeben soll. In der Aufgabe soll ich nach jedem vokal ein 'b' hinzufügen nach dem 'b' den vokal wiederholen und ausgeben . Bsp: String = "Spiel mit mir". Nach der Methode kommt dann das raus:
spibiebel mibit mibir. Mein code zeigt keinen Fehler an aber es kommt bei der Ausgabe nichts raus.

```
public static String spiel(String spielen) {
char[] meinchar = spielen.toCharArray();
char[] meinchar2 = null;
intlaenge = meinchar.length;
for (int i = 0; i < meinchar.length; i++) {
  if (meinchar[i] == 'a' || meinchar[i] == 'e' || meinchar[i] == 'i' || meinchar[i] == 'o' || meinchar[i] == 'u') {
   laenge += 2;
  }
}
int t = 0;
for (int s = 0; s < laenge; s++) {
  meinchar2 = newchar[laenge];
  if (meinchar[t] == 'a' || meinchar[t] == 'e' || meinchar[t] == 'i' || meinchar[t] == 'o' || meinchar[t] == 'u') {
   meinchar2[s] = meinchar[t];
   meinchar2[s + 1] = 'b';
   meinchar2[s + 2] = meinchar2[s];
   t++;
   s = s + 2;
  } else {
   meinchar2[s] = meinchar[t];
  }
  laenge++;
}
spielen = String.valueOf(meinchar2);
return spielen;
}
```


----------



## Enceladus271 (10. Apr 2016)

Du erstellst in jedem Schleifendurchlauf ein neues Array. Und es macht keinen Sinn laenge zu inkrementieren. Diese beiden Fehler führen mmn zu einer Endlosschleife.
Versuchs mal so:

```
...
    meinchar2 = new char[laenge];
     for (int s = 0; s < laenge; s++) {
       if (meinchar[t] == 'a' || meinchar[t] == 'e' || meinchar[t] == 'i' || meinchar[t] == 'o' || meinchar[t] == 'u') {
         meinchar2[s] = meinchar[t];
         meinchar2[s + 1] = 'b';
         meinchar2[s + 2] = meinchar2[s];
         s = s + 2;
       }
       else {
         meinchar2[s] = meinchar[t];
       }
       t++;
     }
...
```


----------



## Flowertime (10. Apr 2016)

Okay das ich das Array in die For-Schleife getan habe war wirklich dämlich . Hab alles geändert und funktioniert jetzt. Danke für die Schnelle Antwort. Manchmal braucht man einfach ein zweites paar Augen


----------



## Flown (10. Apr 2016)

Prinzipiell gehört dein Array außerhalb der Schleife initialisiert, dann könnte man das ganze noch ein wenig aufräumen und doppelten Code in Methoden auslagern:

```
public static String bLanguage(String s) {
  int len = s.length();
  for (int i = 0; i < s.length(); i++) {
    if (isVowel(Character.toLowerCase(s.charAt(i)))) {
      len += 2;
    }
  }
  char[] bLanguage = new char[len];
  for (int i = 0, pos = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    bLanguage[pos++] = c;
    if (isVowel(Character.toLowerCase(c))) {
      bLanguage[pos++] = 'b';
      bLanguage[pos++] = c;
    }
  }
  return new String(bLanguage);
}

private static boolean isVowel(char c) {
  return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
```
Wenn man dann noch etwas Java API dazunimmt, dann geht das noch etwas kürzer und auch sauberer:

```
public static String bLanguage(String s) {
  StringBuilder bBuilder = new StringBuilder();
  for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    bBuilder.append(c);
    if (isVowel(Character.toLowerCase(c))) {
      bBuilder.append('b').append(c);
    }
  }
  return bBuilder.toString();
}

private static boolean isVowel(char c) {
  return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}
```


----------

