The_Nautilus Geschrieben 14. Dezember 2007 Geschrieben 14. Dezember 2007 Hi liebe community, ich habe eine kleine Übungsaufgabe, mit der ich derzeit ein Problem habe. Ich erzeuge einen Zufallsbuchstaben und möchte kontrollieren, wie oft dieser in einem vom Benutzer eingegebenen String vorhanden ist. Leider funktioniert es mit dem Vergleichen nicht. Gibt es hier ein Problem, weil ich CHAR mit String vergleiche? Ich meine, beides sind ja Zeichenartige Typen. Der eine zwar kein primitiver, aber das ist doch hier egal? //Schleife System.out.println("Stringfunktionen"); System.out.println("Eingabe String:"); zeichenkette = EAM.rString(); while((!zeichenkette.equals("end")) && (!zeichenkette.equals("END"))){ //a) //ermitteln, wie of ein Zufallsbuchstabe in dem String vorkommt: zufallszeichen = (char) (Math.random()*26 + 'a'); //System.out.println("Auftreten des Zufallszeichen"); for(int i=0; i < zeichenkette.length(); i++){ //Vergleichen aktuelles Stringzeichen mit Zufallzeichen if(zeichenkette.substring(i, i+1).equals(zufallszeichen)){ anz_vorkom++; } } System.out.println("Das Zufallszeichen " + zufallszeichen + " tritt " + anz_vorkom + " mal auf!"); //Initialisieren der Variablben anz_vorkom=0; } Ich hoffe, ihr könnt mir bei dieser Verständnisfrage helfen?! Danke im Voraus... Nautilus
_Arvid_ Geschrieben 14. Dezember 2007 Geschrieben 14. Dezember 2007 Die Ursache dafür ist eigentlich recht simpel. Schau dir mal die Implementierung der Methode equals(Object) in der Klasse String an. Dort findest du folgenden Code (von mir mal auf das Wesentliche gekürzt):public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { // hier der Vergleich der Zeichenketten // irgendwo dann noch ein "return true;" } return false; }[/PHP]Du machst bei dir einen Vergleich mit eben jener equals-Methode und übergibst als Parameter ein Zeichen ([font=Courier New]char[/font]). Durch das Autoboxing wird aus dem [font=Courier New]char[/font] zur Compile-Zeit ein Objekt der Wrapperklasse [font=Courier New]Character[/font] gemacht. Wie du in der obigen Methode erkennen kannst, wird der Teil für den eigentlichen String-Vergleich übersprungen, da der Parameter kein Objekt der Klasse [font=Courier New]String[/font] ist. Und schwupps landest du beim Bool'schen [font=Courier New]false[/font] als Rückgabewert. Ich denke, für die weitere Lösungssuche sollte das ein ausreichender Hinweis sein.
flashpixx Geschrieben 14. Dezember 2007 Geschrieben 14. Dezember 2007 Warum den String nicht in Char-Array umwandeln und dann einfach das Array prüfen? Phil
The_Nautilus Geschrieben 15. Dezember 2007 Autor Geschrieben 15. Dezember 2007 Howdi, ich habe mir für den Character nun ein Object der Klasse Character erstellt und nutze somit dann die Methode .toString der Hüllklasse. Ist das die beste Lösung, oder gibt es noch schönere? Ich wäre euch für Tips dankbar. Hier mein Coding: String zeichenkette; int anz_vorkom=0; Character zufallszeichenObj; System.out.println("Stringfunktionen"); System.out.println("Eingabe String:"); zeichenkette = EAM.rString(); while((!zeichenkette.equals("end")) && (!zeichenkette.equals("END"))){ //a) //ermitteln, wie of ein Zufallsbuchstabe in dem String vorkommt: //zufallszeichen = (char) (Math.random()*26 + 'a'); zufallszeichenObj = new Character((char) (Math.random()*26 + 'a')); //System.out.println("Auftreten des Zufallszeichen"); for(int i=0; i < zeichenkette.length(); i++){ //Vergleichen aktuelles Stringzeichen mit Zufallzeichen if(zeichenkette.substring(i, i+1).equals(zufallszeichenObj.toString())){ anz_vorkom++; } } System.out.println("Das Zufallszeichen " + zufallszeichenObj + " tritt " + anz_vorkom + " mal auf!"); //Initialisieren der Variablben anz_vorkom=0; }
flashpixx Geschrieben 15. Dezember 2007 Geschrieben 15. Dezember 2007 Hallo, warum immer so kompliziert :beagolisc char[] laZeichenkette = zeichenkette.toCharArray(); int lnVorkommen = 0; for(int i=0; i < laZeichenkette.length; i++) if (laZeichenkette[i] == Zufallszeichen) lnVorkommen++;
The_Nautilus Geschrieben 15. Dezember 2007 Autor Geschrieben 15. Dezember 2007 Hi Flashpixx, vielen Dank für Deine Antwort. Deine Lösung sieht tatsächlich etwas kompakter aus. Ich werde mich mit Deiner Methode dann auch mal auseinander setzen. LG Nautilus
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden