Arrays Vokale zählen

Folgendes Programm ist vorhanden

Java:
public class Zahlen {

public static void main(String[ ] args) {

cahr[ ] buchstaben = {'B', 'a', 'l', 'd', ' ', 'i', 's', 't',
' '; 'W'; 'e', 'i'; 'h', 'n'; 'a', 'c', 'h', 't', 'e', 'n'};

// ...
}
}

a) Aufgabe Zähle wie viele 'e' Zeichen Zeichen im Array buchstaben vorkommen und gibt diese Anzahl aus.

b) Wie viele Vokale(a, e,i,o, u) sind im Array buchstaben enthalten?
Es gibt mehrere Möglichkeiten, diese Aufgabe zu lösen!

ich hab ein Programm geschrieben wo die Anzahl zählt

Java:
//Unterricht am 17.11.2016
public class Zahlen {

   public static void main(String[] args) {
     // TODO Auto-generated method stub

     char[] buchstaben = {'B', 'a', 'l', 'd', ' ', 'i', 's', 't',
     ' ', 'W', 'e', 'i', 'h', 'n', 'a', 'c', 'h', 't', 'e', 'n'};
   
     System.out.println(buchstaben.length);
   }

}

weiß aber nciht wie ich die 'e' und Vokale zähle
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Code bitte in Code-Tags schreiben, danke :)
[code=java] ... dein code ...[/code]

Zu deinem Problem: Du musst mittels Schleife dein Array durchgehen und jedes char prüfen ob es ein 'e' ist. Wenn ja zählst du eine Zählervariable (am besten vom Typ int) ums 1 hoch.
 

Nuiton

Bekanntes Mitglied
Du hast mehrere Optionen (naja, mir fallen zwei ein), wie du das mit den Vokalen loesen kannst.
Old school:
Java:
    public int getNumVowelsOld(char a[])
    {
        int vowels = 0;
        for (int i = 0; i < a.length; i++)
        {
            switch(a[i])
            {
                // ...
                case 'e': vowels++; break;
            }
        }
        return vowels;
    }
New school:
Java:
    public int getNumVowels(char a[])
    {
        List<Character> listC = new ArrayList<>();
        for (char c : a)
            listC.add(c);
        return (int) listC.stream().filter((t) -> t == 'e' || t == ... etc.).count();
    }
 

mariane

Mitglied
:D ich glaube mit Streams und Lambda-Ausdrücken triit man deutlich aus der Masse hervor.

Man könnte auch das Ganze als String mit Regex malträtieren, also alles weg was kein 'e' ist, bzw. alles weg was kein Vokal ist, und dann die Restlänge ausgeben.
Java:
    public static void main(String[] args)
    {
        char[] b = { 'B', 'a', 'l', 'd', ' ', 'i', 's', 't', ' ', 'W', 'e', 'i', 'h', 'n', 'a', 'c', 'h', 't', 'e', 'n' };

        System.out.println((new String(b)).replaceAll("(?ix)[^e]", "").length());
        System.out.println((new String(b)).replaceAll("(?ix)[^aeiuo]", "").length());

    }
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
An alle Vorposter. Bitte - ich hab das jetzt schon zig-male erwähnt - das ist ein Anfängerforum und wenn man schon mit Schleifen und Vergleiche nicht zurechtkommt, was glaubt ihr dann wie es mit Lambdas/Streams/Regex sein wird?
Zudem kommt noch hinzu das weder Regex noch Lambdas hier die optimalste Lösung sind (zumindest nicht in dieser Form die hier gepostet ist)!

Nun zu dem Problem @Simon Sperlich:
Grundsätzlich bietet sich hier an dein Problem in mehrere Teilaufgaben aufzuspalten. Einmal die Prüfungen der Buchstaben und einmal das Zählen der Vorkommnisse. Da die Lösung schon gepostet ist, werd ich diese mal ein wenig aufpeppen.
Java:
private static boolean isVowel(char c) {
  return 'a' == c || 'e' == c || 'i' == c || 'o' == c || 'u' == c;
}
Dann bietet sich auch noch die enhanced for-each Schleife an:
Java:
public static int countVowels(char[] chars) {
  int result = 0;
  for(char c : chars) {
    if(isVowel(c)) {
      result++;
    }
  }
  return result;
}
Du hast mehrere Optionen (naja, mir fallen zwei ein), wie du das mit den Vokalen loesen kannst.
New school:
Java:
    public int getNumVowels(char a[])
    {
        List<Character> listC = new ArrayList<>();
        for (char c : a)
            listC.add(c);
        return (int) listC.stream().filter((t) -> t == 'e' || t == ... etc.).count();
    }
Wenn hier jeder Java 8 Code postet, dann wenigstens die optimalste Lösung (Boxing und eine Liste ist hier nicht nötig!). Entweder - auch bevorzugt:
Java:
public static int countVowels(char[] chars) {
  return IntStream.range(0, chars.length).filter(i -> isVowel(chars[i])).map(i -> 1).sum();
}
Oder:
Java:
public static int countVowels(char[] chars) {
  return CharBuffer.wrap(chars).codePoints().filter(Test::isVowel).map(i -> 1).sum();
}
 
private static boolean isVowel(int cp) {
  return 'a' == cp || 'e' == cp || 'i' == cp || 'o' == cp || 'u' == cp;
}
 
Java:
//Aufgabe aus Unterricht am 17.11.2016
public class Vokale {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        char[] buchstaben = {'B', 'a', 'l', 'd', ' ', 'i', 's', 't',
        ' ', 'W', 'e', 'i', 'h', 'n', 'a', 'c', 'h', 't', 'e', 'n'};
     
     
        int zähler = 0;
        System.out.println(buchstaben.length);
     
        for(char i = 0; i < buchstaben.length; i++){
         
            if(buchstaben[i] == 'e'){
             
                zähler++;
            }
             
            }
        System.out.println("Anzahl 'e':" + zähler);
        }
    }

ist Lösung von a) zwei `e`
 
Zuletzt bearbeitet von einem Moderator:
Java:
public class Vokale {
   public static void main(String[] args) {
     // TODO Auto-generated method stub
     char[] buchstaben = {
       'B', 'a', 'l', 'd', ' ', 'i', 's', 't',
       ' ', 'W', 'e', 'i', 'h', 'n', 'a', 'c', 'h', 't', 'e', 'n'};

     int zahlen = 0;
     for(int i = 0; i<buchstaben.length;i++) {
       if(buchstaben[I] == 'a') {
         zahlen++;   
       } else if (buchstaben[I] == 'e') {
         zahlen++;
       } else if (buchstaben[I] == 'i') {
         zahlen++;
       } else if (buchstaben[I] == 'o') {
         zahlen++;   
       } else if (buchstaben[I] == 'u') {
         zahlen++;
       }
     }
     System.out.println("Anzahl Vokale:" + zahlen);
   }
}
ist di Lösung für b
 
Zuletzt bearbeitet von einem Moderator:

mariane

Mitglied
kann man so machen, wobei das [ I ] eher ein [ i ] sein sollte, so wird es nicht funktionieren.

Wenn du so eine einfache if else if else ... Struktur hast, liegt immer ein switch case Anweisung auf der Hand, dann sehe es so aus:
Java:
    char[] buchstaben = { 'B', 'a', 'l', 'd', ' ', 'i', 's', 't', ' ', 'W', 'e', 'i', 'h', 'n', 'a', 'c', 'h', 't', 'e', 'n' };

    int zahlen = 0;

    for( i = 0; i < buchstaben.length; i++ )
    {

      switch( Character.toLowerCase( buchstaben[i] ) )
      {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
          zahlen++;
      }

    }

    System.out.println( "Anzahl Vokale:" + zahlen );
Character.toLowerCase(...) wandelt hier noch zusätzlich alle char in kleingeschriebene um, so das auch große Vokale mitgezählt würden, was bei deinem Beispieltext aber egal ist.
 

Oben