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 Zitieren
_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. Zitieren
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 Zitieren
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; } Zitieren
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++; Zitieren
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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.