Ich arbeite an einem Projekt, um eine 3-stellige Zeichenfolge übergeben und es sollte eine ArrayList aller möglichen Mnemonische Kombinationen zurückgeben. Zum Beispiel, wenn ich die Ziffern "623" übergebe, sollte es eine Liste von zurückgeben MAF MBF MCF NAF NBF NCF OAF OBF OCF ].Rekursive Liste Mnemonics
Aber ich bekomme immer ein Ergebnis von [MAD, MADE, MADEF, MABD, MABDE, MABDEF, MABCD, MABCDE, MABCDEF, MNAD, MNADE, MNADEF, MNABD, MNABDE, MNABDEF, MNABCD, MNABCDE, MNABCDEF, MNOAD , MNOADE, MNOADEF, MNOABD, MNOABDE, MNOABDEF, MNOABCD, MNOABCDE, MNOABCDEF]. Ich kann anscheinend nicht herausfinden, was ich hier falsch mache. Es soll Strings der Länge 3 zurückgeben und es scheint, als würde es die vorherigen Buchstaben anheften.
Hier ist mein Code:
public class PhoneMnemonics {
public static void main(String[] args) {
ArrayList<String> test = listMnemonics("623");
System.out.print(test);
}
public static ArrayList<String> listMnemonics(String number) {
ArrayList<String> result = new ArrayList<String>();
recursiveMnemonics(result, "", number);
return result;
}
private static void recursiveMnemonics(ArrayList<String> result, String mnemonicSoFar, String digitsLeft) {
if (digitsLeft.length() == 0) {
// Add current mnemonic
result.add(mnemonicSoFar);
} else {
// Try all combinations for single digit
int numLetters = digitLetters(digitsLeft.charAt(0)).length();
String letters = digitLetters(digitsLeft.charAt(0));
if (digitsLeft.length() > 1) {
digitsLeft = digitsLeft.substring(1);
} else {
digitsLeft = "";
}
for (int i = 0; i < numLetters; i++) {
char c = letters.charAt(i);
mnemonicSoFar = mnemonicSoFar + Character.toString(c);
recursiveMnemonics(result, mnemonicSoFar, digitsLeft);
}
}
}
public static String digitLetters(char ch) {
String result = "";
switch (ch) {
case '2': result = "ABC";
break;
case '3': result = "DEF";
break;
case '4': result = "GHI";
break;
case '5': result = "JKL";
break;
case '6': result = "MNO";
break;
case '7': result = "PQRS";
break;
case '8': result = "TUV";
break;
case '9': result = "WXYZ";
break;
}
return result;
}
}
Jede Hilfe ist sehr zu schätzen!
BEARBEITEN: Ich habe die if-Anweisung verschoben, die die digitsLeft-Zeichenfolge im Code höher bearbeitet und meine Ergebnisse ein wenig geändert hat.
Versuchen Sie, eine IDE wie Eclipse herunterzuladen und in den Debug-Modus zu gelangen. –
Ich benutze JGrasp und ich habe noch nie mit der Debug-Funktion experimentiert. Nach dem Versuch gerade jetzt, nichts erscheint. Das Programm selbst kompiliert und läuft gut, aber ich kann nicht den richtigen Weg zum rekursiven Aufruf meiner Methode herausfinden. – SkyDC
Der Fehler ist in der For-Schleife. – ajb