char Arrays vergleichen

Fab1

Top Contributor
Habedere Community,

ich möchte 2 Strings darauf überprüfen, ob es ein Anagramm ist oder nicht.

Allerdings traten hier ein paar Probleme auf. In meinem Beispiel sollte die Ausgabe in meinen Augen "true" sein. Ist sie aber nicht 🙁
Ich hab den Code von mir zum leichteren Verständnis (für Anfänger) ein bisschen kommentiert, wem also eine falsche Kommentierung auffällt, darf sie gerne in den Kommentaren bemängeln.

Hier der Code:
Java:
public class Anagram {

	public static void main(String[]args){
		
		String wortEins = new String("Feiern");			// Strings werden deklariert und initialisiert. 
		String wortZwei = new String("Reifen");
			
		
		char [] wortEinsChar = wortEins.toLowerCase().toCharArray(); 	// Char Array werden deklariert
		char [] wortZweiChar = wortZwei.toLowerCase().toCharArray();	Strings werden den Arrays in Kleinbuchstaben zugewiesen
		
		
		boolean richtig = false;
		
		for (int eins = 0; eins<wortEinsChar.length-1; eins++){			// erster Buchstabe vom Array "wortEinsChar" wird ausgewählt
			
		for (int zwei = 0; zwei<wortZweiChar.length-1; zwei++){			// und geprüft ob er im zweiten Char Array "wortZweiChar" vorhanden ist
			if(wortZweiChar.equals(wortEinsChar[eins])){				
		
				richtig = true;											// Wenn vorhanden, dann richtig = true, ansonsten falsch
			} else {
				richtig = false;
			}		
		}
	
		}
		System.out.println("Ist es ein Anagramm? Die Antwort lautet: " + richtig); 	// Ausgabe true/false
		
	}
	
}

Ich habe bereits die SuFu sowie Google benutzt und auch einiges gefunden. Da es ja einen Unterschied macht ob man den Inhalt oder den Typ vergleicht. (equals / ==)
Trotzallem komm ich nicht auf die Lösung.

Mein Gedanke war, dass ich jeweils den Index der verschiedenen Chars vergleiche.

Also so in der Art, allerdings meckert hier der Compiler.
Java:
for (int eins = 0; eins<wortEinsChar.length-1; eins++){			// erster Buchstabe vom Array "wortEinsChar" wird ausgewählt
			
		for (int zwei = 0; zwei<wortZweiChar.length-1; zwei++){			// und geprüft ob er im zweiten Char Array "wortZweiChar" vorhanden ist
			if(wortZweiChar[zwei].equals(wortZweiChar[eins])){				
		
				richtig = true;											// Wenn vorhanden, dann richtig = true, ansonsten falsch
			} else {
				richtig = false;
			}
			
		}

Momentan fällt mir leider kein anderer Lösungsansatz ein. Ich hoffe wenigstens mein Grundgedanke ist richtig.
Vielen Dank.

Gruß GEEK
 
Wieso machst du es dir so schwer ? Gibt doch eine Reverse Methode
Java:
import java.io.*;
public class Aufgabe6
{
public static void main(String[] args)  throws IOException {
String wort;
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Wort einegeben: ");
wort = input.readLine();


StringBuffer rückwärts = new StringBuffer(wort); 
		rückwärts.reverse();	
		wort = new String(rückwärts); 


System.out.println("Gespiegelt: "+wort);
  
}
}
 
if(wortZweiChar.equals(wortEinsChar[eins])){

Du vergleichst hier das Array mit einem char, das wird immer false sein ;D

if(wortZweiChar[zwei].equals(wortZweiChar[eins])){

sieht zwar richtiger aus, aber wortZweiChar[zwei] ist ein char, kein Character also kein Objekt (sondern primitiv) und du kannst dort also keine Methoden aufrufen -->

if(wortZweiChar[zwei] == wortZweiChar[eins])

Allerdings solltest du deinen Algo nochmal überlegen! hallo und aaao ist auch true! Überlege was mit deinen Zuweisungen passiert. Du kontrollierst nur den letzten Character quasi!
 
Wieso machst du es dir so schwer ? Gibt doch eine Reverse Methode
Wahrscheinlich weil
1. der TO nach Anagrammen und nicht nach Palindromen prüfen will und
2. der TO vielleicht auch was lernen will
und
3. chars vergleicht man mit == und nicht equals und
4. wortZweiChar[zwei] == wortZweiChar[eins] ist nicht ganz richtig, du vergleichst buchstaben aus dem selben wort.
 
oh ok da war mir dann der Unterschied nicht bekannt, Palindrom ist also wenn es rückwärts genau gleich ist und Anagramm wenn es die selben Buchstaben hat ? Sry war mir nicht bewusst 😉
 

Neue Themen


Zurück
Oben