Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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;


}

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.