Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
zeichen eines String mit der kleinsten Frequenz zurückgeben
Hallo,
ich habe ein kleines Problem.
Beim Testen habe ich festgestellt,dass meine Aufgabe nicht zu 100 prozent richtig ist.
ich weiß aber nicht,wo der Fehler liegt.
getCharacterWithMinimalFrequency("chhddajjekkb") gibt c statt a zurück.
a ist ja das kleinste Zeichnen mit der kleinsten Frequenz ,nicht c.
Bitte um Hilfe
Herzlich
Bradig
Java:
/**
* Gibt das Zeichen der gegebenen Zeichenkette zurück, dass am seltensten darin vorkommt.
* Sollte es mehrere Zeichen mit minimaler Häufigkeit in der Zeichenkette geben, so wird
* davon das Zeichen mit dem kleinsten Zahlenwert zurückgegeben
* (Tipp: Zusammenhang char <-> int).
* Falls es kein solches Zeichen gibt, wird eine {@link IllegalArgumentException} ausgelöst.
*
* Beispiel:
* Gegeben die Zeichenkette "AABBCCabbccz"
* Das gesuchte Ergebnis lautet hier: 'a'
* (da 'a' genau wie 'z' nur einmal vorkommt, das 'a' aber einem kleineren Zahlenwert
* als dem Zahlenwert von 'z' entspricht)
*
* @param input die Zeichenkette, deren Zeichen mit mininmaler Häufigkeit gesucht wird
* @return das Zeichen mit dem kleinsten Zahlenwert, das am seltensten in der gegebenen
* Zeichenkette vorkommt
*/
final public static char getCharacterWithMinimalFrequency(final String input) {
if(input==null || input.length()==0){
throw new IllegalArgumentException();
}
int min=Integer.MAX_VALUE;
char c='0';
for(int i=0;i<input.length();i++){
int freq=getFrequency(input,input.charAt(i));
if(freq<min ){
min=freq;
c=input.charAt(i);
}
}
return c;
}
final public static int getFrequency(String input,char a){
int s=0;
for(int i=0;i<input.length();i++){
if(input.charAt(i)==a){
s++;
}
}
return s;
}
}
ich habe vieles ausprobiert ,aber es funktioniert immer noch nicht richtig.
hat noch irgendwer eine Ahnung ,wie ich mein Code verbessern kann,damit es richtig fünktioniert?
Also, es gibt die Fälle:
- kleinere freq -> ändere min und cMin
- gleiche freq, und cMin kleiner -> ändere cMin (freq ist ja schon gleich)
Das musst du nur noch in Code "übersetzen".
es funktioniert auf jeden Fall schon.
kleine Frage:
weiß einer von euch wie man die NullPointerExceptions,die manchmal beim Testen auftreten , loswerden kann.
Beispiel:
if(a==null){
throw new IllegalArgumentException();
}
und beim Testen gebe ich folgendes ein :
methode(null) statt IllegalArgumentException zu bekommen ,bekomme ich NullPointerException.
So völlig ohne Kontext kann man da nichts zu sagen.
Wenn das if als erster Teil der Methode steht, kann in der Methode aber keine NPE weil a null ist geworfen werden.
Ich wollte dir damit sagen, dass es nur gleich sein kann - und nicht größer-, wenn es in die If-Anweisung geht. Daher ist es nicht nötig, nochmal min = freq zu machen.
Ich wollte dir damit sagen, dass es nur gleich sein kann - und nicht größer-, wenn es in die If-Anweisung geht. Daher ist es nicht nötig, nochmal min = freq zu machen.
Wenn du es wirklich zu "100%" richtig machen möchtest, dann nimmst du auch CodePoints und nicht char, denn es funktioniert auch nur für den UTF-16 Bereich und nicht für Unicode Zeichen.