Zum Inhalt springen

String mit Char vergleichen


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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. :)

Geschrieben

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;


}

Geschrieben

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++;

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...