Geht in alle Case rein, warum??

Fasko

Mitglied
Hallo,

an eine Methode übergebe ich ein Array mit char Werten. Diese bestehen aus 'w', 'u' und 's'.
Andere Werte gibt es in dem Array nicht. Jetzt will ich auszählen, wie viele von einem bestimmten Wert im Array gespeichert ist.

Ich übergebe ein Attribut, dessen Attributwert gibt an welcher Wert gezählt werden soll.
Dazu habe ich folgenden Code geschrieben:

Java:
public int chaZaehlen(char aufPruefen, char[] zuPruefen){
	int anzahl=0; // wird hochgezählt
	int erg; // Anzahl muss resettet werde
	
//	System.out.println(aufPruefen);
	
		
		switch(aufPruefen){
		case 'w':
			for(int w= 0; w<zuPruefen.length;w++){
				if(aufPruefen=='w'){
					anzahl++;
									}
				else{
					
				}
			}
			break; // case w
			
		case 'u':
			for(int w= 0; w<zuPruefen.length;w++){
				if(aufPruefen=='u'){
					anzahl++;
				}
				else{
					
				}
			}
			break; // case u
			
			case 's':
				for(int w= 0; w<zuPruefen.length;w++){
					if(aufPruefen=='u'){
						anzahl++;
					}
				}
					break;
					
					default:
						System.out.println("FEHLER IN charZaehlen!");
						break;
				}
						
			
				erg = anzahl;
				anzahl = 0;
	return erg;
}

Ich erhalte immer die Zahl 350 zurück (das Array speichert 350 Werte).
Wo liegt in meinem Code der Fehler? ???:L

Gruß,

Fasko
 
Dann ließ deinen Code nochmal genau durch.

Du rennst über die zuPruefen Variable in deiner For Schleife, aber deine If Abfrage testet auf "aufPruefen" und die hat bekanntlich den Wert des erwarteten Cases. Somit wird immer bis 350 gezählt, weil du eben nicht dein Array sondern deinen Char prüfst.
 
Java:
if(aufPruefen=='w'){
    anzahl++;
}
else{
                    
}

Du machst einen doppelten Test (der case prüft auf 'w' UND die IF-Abfrage prüft auf 'w'). Außerdem ist die Bedingung im if ja IMMER wahr, deswegen wird anzahl auch IMMER hichgezält

Ich denke, das folgende sollte gehen:
Java:
if(zuPruefen[i] =='w') anzahl++;
// das else kannst du dir sparen
 
also mal ganz davon ab,... ich glaub deine Methode kann man auch einfacher implementieren nämlich so :

Java:
public class Ausgabe {		
	    public static void main(String args[]) {
	    	// create Calendar instance with actual date
					char[] charr={'w','x','w','y','x'};
					System.out.println(Ausgabe.pruefe('y',charr));
	    }
	   
	    public static int pruefe(char cha, char[] chararr){
	    	int zaehler=0;
	    	for(int i=0;i<chararr.length;i++){
	    		if(cha==chararr[i]){
	    			zaehler++;
	    		}
	    	}
			return zaehler;
	    	
	    }	
}

Ausgabe be y = 1 , bei w= 2 und bei x =2

😉

natürlich kann man dann nicht mehr Filtern also es gibt keinen Default sondern es kann nach jedem Char gesucht werden 😉
 
Zuletzt bearbeitet:
Oder noch ein wenig einfacher:

Java:
public static int pruefe(char testChar, char[] array){
    int count =0;
        for(char arrayChar : array) {
            count += (arrayChar == testChar) ? 1 : 0;
        }
    return count;
}
 
Java:
for(char arrayChar : array) {
            count += (arrayChar == testChar) ? 1 : 0;
        }

Naja, einfacher... sieht dafür aber schoin ziemlich bescheiden ais... abgesehen davon ist das Folgende genauso kurz
Java:
for(int i=0;i<chararr.length;i++) {
    if(cha==chararr[i]) {
        zaehler++;
    }
}

EDIT: Wenn man ganz pingelig ist, ist Zweiteres sogar kürzer, weil hier die Zuweisung nur bei positivem Test gemacht wird.
 
Zuletzt bearbeitet:
Oder noch ein wenig einfacher:

Java:
public static int pruefe(char testChar, char[] array){
    int count =0;
        for(char arrayChar : array) {
            count += (arrayChar == testChar) ? 1 : 0;
        }
    return count;
}

Danke für eure Hilfe und ich hoffe ihr hattet Spaß bei eurem Contest, "Wer schreibt es kürzer" ;-)

Was aber bedeutet folgende Zeilen:

Java:
 for(char arrayChar : array) {
            count += (arrayChar == testChar) ? 1 : 0;
        }

Was für Opertoren sind ":" und "?" ?
Verwendet habe ich diese noch nie sprich, eine Schleife in dieser Form ist mir auch noch nie untergekommen. :-D
 

Zurück
Oben