# Array auszählen



## Jinchuuriki (2. Jan 2017)

Hallo,
ich habe hier eine kleine Aufgabe, an der ich schon paar Stündchen sitze, aber irgendwie nicht so richtig weiter komme. Ziel der Aufgabe ist es, bei diesen 12 Arrays, auszuzählen wie viele Buchstaben jedes hat. Ich habe das mit "System.out.println(bezeichnung.length);" versucht, aber er gibt mir bei jedem Array die Anzahl von "bezeichnung[0]" aus. Ich bin noch ein Frischling, dacher stehe ich richtig auf dem Schlauch.

Vielen Dank schon mal für die Hilfe im voraus! 

```
public class Aufgabe1_1 {
   
    public static void main(String[] args){
        String [] bezeichnung = new String [12];
       
        bezeichnung [0] = "Mehrkornbrot";
        bezeichnung [1] = "Brötchen";
        bezeichnung [2] = "Kissinger\n";
        bezeichnung [3] = "Hörnchen";
        bezeichnung [4] = "Brot";
        bezeichnung [5] = "Semmel\n";
        bezeichnung [6] = "Weck";
        bezeichnung [7] = "Wohnschnecke";
        bezeichnung [8] = "Baguette\n";
        bezeichnung [9] = "Kipf";
        bezeichnung [10] = "Eierlikör-Sahnetorte";
        bezeichnung [11] = "Roggenmischbrot";
       
       
        for ( String a : bezeichnung){
        System.out.println(a);
       
        System.out.println(bezeichnung.length);
        }
    }

}
```


----------



## Robat (2. Jan 2017)

Du willst doch sicherlich die Länge von jedem Eintrag oder?
dann musst du auch `a.length` nehmen


----------



## Jinchuuriki (2. Jan 2017)

Also das habe ich auch schon versucht und wenn ich das umschreibe in 
"System.out.println(a + '\t'+'\t' + a.length);"  ,mit den Tabs experimentiere ich auch gerade, dann kriege ich Fehler 
"
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    length cannot be resolved or is not a field

    at Aufgabe1_1.main(Aufgabe1_1.java:22)"


----------



## Robat (2. Jan 2017)

Sorry hab zu schnell auf Enter gedrückt. 
Es muss natürlich `a.length()` sein. Bei Strings ist es ja eine Methode


----------



## VfL_Freak (3. Jan 2017)

Moin,

mal so ganz nebenbei:


Jinchuuriki hat gesagt.:


> bei diesen 12 Arrays


Du hast _*keine *_12 Arrays!!! 
Du hast _*ein *_Array "_bezeichnung_" mit zwölf Elementen!!! 

Gruß Klaus


----------



## Viktim (3. Jan 2017)

also was du machen könntest ist einfach eine for-Schleife, die alle Elemente deines Arrays durchgeht und die Längen auf die vergangen rechnet.


----------



## Jinchuuriki (4. Jan 2017)

Danke für die Hilfe  ich habe das hinbekommen.
@Viktim: In der Aufgabenstellung sollte ich das aber mit Array machen.

Jetzt habe ich ein anderes Problem :/

Ich soll die ganzen Selbstlaute in dem Array auszählen. Da ich noch einen Code aus anderen 
Aufgaben hatte:

```
public class SwitchBreak {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String dnaBases = "CGCAGTTCTTCGGXAC";
        int a = 0, g = 0, c = 0, t = 0;
       
        loop:
        for ( int i = 0; i < dnaBases.length(); i++ )
        {
            switch ( dnaBases.charAt(i))
            {
            case 'A': case 'a':
                a++;
                break;
            case 'G': case 'g':
                g++;
                break;
            case 'C': case 'c':
                c++;
                break;
            case 'T': case 't':
                t++;
                break;
            default:
                System.err.println("Unbekannte Nukleinblasen " + dnaBases.charAt(i));
                break loop;
            }
        }
        System.out.printf(" Anzahl: A = %d, G = %d, C = %d, T = %d%n", a, g, c, t);
    }

}
```

Dachte ich mir, dass ich den umschreibe und beide zusammenfüge. Leider kriege ich irgendwie gar nichts dabei raus, also nichts richtiges.
Mein jetziger Code:

```
public class aufgabe1 {
   
    public static void main(String[] args){
        String [] bezeichnung = {
                "Mehrkornbrot", "Brötchen", "Kissinger", "\nHörnchen",
                "Brot", "Semmel", "\nWeck", "Wohnschnecke", "Baguette", "\nKipf",
                "Eierlikör-Sahnetorte","Roggenmischbrot"
       
        };
        String [] buchstaben = bezeichnung;
       
        int a = 0, e = 0, i = 0, o = 0, u = 0;
        for(String b : bezeichnung){
           
       
            if(b.length() <= 7)
                System.out.println(b + '\t'+'\t'+'\t' + b.length());
            else if(b.length() >= 16)
                System.out.println(b + '\t' + b.length());
            else
            System.out.println(b + '\t'+'\t' + b.length());       
        }
       
           
               
               
        loop:       
        for ( int j = 0; j < buchstaben.length; j++ ){
               
            switch ( buchstaben.length){
                   
            case 'A': case 'a':
                a++;
                break;               
            case 'E': case 'e':
                e++;
                break;
            case 'I': case 'i':
                i++;
                break;
            case 'O': case 'o':
                o++;
                break;
            case 'U': case 'u':
                u++;
                break;
            default:
                System.err.println("Unbekannte Nukleinblasen " + buchstaben.length);
                break loop;
                    }
                }
                System.out.printf(" Anzahl: A = %d, E = %d, I = %d, O = %d, U = %d%n", a, e, i, o, u);
            }

        }
```

Was habe ich falsch gemacht oder was habe ich nicht bedacht?


----------



## Robat (4. Jan 2017)

Folgendes:



Jinchuuriki hat gesagt.:


> *for* ( *int* j = 0; j < buchstaben.length; j++ ){
> 
> *switch* ( buchstaben.length){
> ....
> ...




Du hast ein Array mit Strings. (also deinen Wörtern).
Dieses Array gehst du mit deiner for-Schleife durch.
Jetzt brauchst du aber noch eine for-Schleife, die bei jedem Wort jeden einzelnen Buchstaben abcheckt.

Kurz gesagt: dir fehlt eine for-Schleife


----------



## VfL_Freak (4. Jan 2017)

Moin,



Jinchuuriki hat gesagt.:


> Leider kriege ich irgendwie gar nichts dabei raus, also nichts richtiges.


das ist KEINE Fehlerbeschreibung!

Was mir aber so auf die Schnelle auffiel:

```
switch ( buchstaben.length)
{
    case 'A': case 'a':
       a++;
       break;            
    case 'E': case 'e':
       e++;
       break;
// .....
```
Du switcht über die Länge Deines Array !!
Da sind Cases mit char gaaaanz ungünstig 

Außerdem macht es sowieso nicht wirklich Sinn, über die Länge zu switchen, oder??

Gruß Klaus


----------



## Jinchuuriki (4. Jan 2017)

```
public class aufgabe1 {
   
    public static void main(String[] args){
        String [] bezeichnung = {
                "Mehrkornbrot", "Brötchen", "Kissinger", "\nHörnchen",
                "Brot", "Semmel", "\nWeck", "Wohnschnecke", "Baguette", "\nKipf",
                "Eierlikör-Sahnetorte","Roggenmischbrot"};
       
        //StringArray wird ausgegeben und die Anzahl der Buchsten wird berechnet   
        for(String b : bezeichnung){
            if(b.length() <= 7)
                System.out.println(b + '\t'+'\t'+'\t' + b.length());
            else if(b.length() >= 16)
                System.out.println(b + '\t' + b.length());
            else
            System.out.println(b + '\t'+'\t' + b.length());
       
        //Anzahl der Selbstlaute
        int a = 0, e = 0, i = 0, o = 0, u = 0;  
       
        //Anzahl der Selbstlaute soll ermittelt werden
        for ( int j = 0; j < b.length(); j++ ){
               
            switch (b.charAt(j)){
                   
            case 'A': case 'a':
                a++;
                break;               
            case 'E': case 'e':
                e++;
                break;
            case 'I': case 'i':
                i++;
                break;
            case 'O': case 'o':
                o++;
                break;
            case 'U': case 'u':
                u++;
                break;
            default:
               
                }
            }
        System.out.printf(" Anzahl: A = %d, E = %d, I = %d, O = %d, U = %d%n", a, e, i, o, u);
        }
       
    }

}
```

Soweit habe ich mich nun durchgeschlagen. Mir wird jetzt unter jeder Bezeichnung mi Array die Anzahl der Selbstlaute ausgegeben


----------



## Robat (4. Jan 2017)

Vielleicht noch ein was meinerseits: 

die 2 cases statements pro char sind (mMn) unschön.
Arbeite lieber mit toUpperCase bzw toLowerCase (auf deinen String angewandt) und prüf nur ein Fall


----------



## Jinchuuriki (4. Jan 2017)

Ja, daran habe ich auch schon gedacht  
Will erstmal gucken, dass ich nur eine Ausgabe kriege mit allen Selbstlauten zusammen


----------



## Robat (4. Jan 2017)

Schau dir mal an wo du das ausgeben lässt


----------

