public static boolean istAnagramm(String a, String b) {
int [] argsa = new int[a.length()];
int [] argsb = new int[b.length()];
int i = 0; int j = 0;
while(i < a.length()){
argsa[i] = buchstabeZuZahl(a.substring(i, i+1));
i++;}
while(i < b.length()){
argsb[j] = buchstabeZuZahl(b.substring(j, j+1));
j++;}
if (argsa[0] == argsb[0]){ return true;} else { return false;}
Hi!
Der Methode istAnagramm werden zwei string übergeben. Danach werden zwei arrays ertsellt, die genau soviel speicherplätze haben sollen wie die Strings Buchstaben haben. Im folgenden wird jedem Buchstaben eine Zahl von 1 bis 26 zugeordnet. Ganz unten wollte ich testen, ob es klappt, aber die Methode gibt mir ein false wieder wenn ich als String "aa" und "aa" eingebe. Warum?
/**Bildet einen Buchstaben zeichen auf eine Zahl ab (a => 1, b => 2, ... , z => 26, sonst 0)*/
public static int buchstabeZuZahl(String zeichen) {
return (gueltigeZeichen.indexOf(zeichen)+1);
Das war schon gegeben. Ich habe dann mal nachgeschaut und es so verstanden, dass er einfach Buchstaben in Zahlen umwandelt. Ich verstehe aber auch nciht was die +1 dort soll.
/**Bildet einen Buchstaben zeichen auf eine Zahl ab (a => 1, b => 2, ... , z => 26, sonst 0)*/
public static int buchstabeZuZahl(String zeichen) {
return (gueltigeZeichen.indexOf(zeichen)+1);
Das war schon gegeben. Ich habe dann mal nachgeschaut und es so verstanden, dass er einfach Buchstaben in Zahlen umwandelt. Ich verstehe aber auch nciht was die +1 dort soll.
Ich hatte ihn so verstanden, dass diese Anweisung nur dazu dienen sollte, zu testen, ob das Anlegen der Arrays soweit geklappt hat (was man so natürlich nur für das erste Zeichen tut). Dem Test auf eine Anagramm ist man mit der Umwandlung in Zahlen noch nicht wesentlich näher gekommen.
public static boolean istAnagramm(String a, String b)
{
boolean returnValue = true;
if( a.length() == b.length() )
{
int i = 0; int j = 0;
int [] argsa = new int[a.length()];
int [] argsb = new int[b.length()];
while( i < a.length() ){ argsa[i] = buchstabeZuZahl(a.substring(i, i+1));i++;}
while( j < b.length() ){ argsb[j] = buchstabeZuZahl(b.substring(j, j+1));j++;}
for(i = 0; i < a.length(); i++)
{
if(returnValue){
j = 0;
while(argsa[i] == argsb[j]){
returnValue = true;
j++;}
} else {
return returnValue = false;}
}
return returnValue;
} else {
return returnValue = false;}
}
Ich habe das Programm nun zu ende geschrieben, aber wenn ich dem Programm aa und aa als String 1 und 2 übergebe, kommt eine Fehler bei ausführen. Könnt ihr mir vielleicht ein paar Hinweise geben?
Ich glaube, dass ich es dieses Mal geschafft habe, aber irgendwie stimmt dort was nicht. Ich bin schon auf der Suche.
Code:
public static boolean istAnagramm(String a, String b)
{
boolean returnValue = false;
if( a.length() == b.length() )
{
int i = 0; int j = 0;
int [] argsa = new int[ a.length() ];
int [] argsb = new int[ b.length() ];
while( i < a.length() ) { argsa[i] = buchstabeZuZahl(a.substring(i, i+1)); i++; }
while( j < b.length() ) { argsb[j] = buchstabeZuZahl(b.substring(j, j+1)); j++; }
for( i = 0; i < a.length(); i++ )
{
returnValue = false;
for( j = 0; returnValue == false || j < a.length(); j++ ){
if( argsa[i] == argsb[j] )
{
returnValue = true;
} else {
returnValue = false;
}
if( !returnValue ) { return returnValue; }
}
}
return returnValue;
} else { return returnValue = false; }
}
Ich habe das nun so geschrieben, dass in der inntersten For-Schleife ein gleiches array gefunden werden soll. Falls sind wird die Schleife durch das return beendet. Wenn ich dem Programm nun zwei String übergebe, dann sagt er mir nur true, wenn ich aa und aa übergebe. Bei ab und ab kommt schon ein Fehler. Woran kann es liegen?[/code]