Java, erstellen Sie ein array von StringBuffer
Ich habe ein problem mit Java.
Angenommen, n ist eine ganze Zahl, ich möchte ein array erstellen, die der StringBuffer enthält alle 26^n Kombinationen der Buchstaben des Alphabets, mit der lexikographischen Ordnung. Ich ArrayIndexOutOfBoundsException erhalten.
Schrieb ich diese Klasse:
public static StringBuffer[] creaTabellaTotale(int n, char[] a) {
StringBuffer[] tabella = new StringBuffer[ pow(26, n)];
for(int w =0; w < pow(26, n); w++)
tabella[w] = new StringBuffer("");
for(int h = 1; h <= n ; h++){
for(int u =0; u < pow ( 26, h-1); u++){
for (int j = 0; j<26; j++){
for( int x =pow(26, n-h+1)*u + pow(26, n-h)*j; x< pow(26, n-h+1)*u + pow(26, n-h)*(j+1); x++)
tabella[x] = tabella[x].append(a[j]);
}
}
}
return tabella;
}
Hier wird ein[] ist ein array mit den 26 Buchstaben in alphabetischer Reihenfolge; ich habe es umgeschrieben, pow(), dessen Prototyp int pow(int b, int e). Ich bin nicht in der Lage den Fehler zu finden.
- Hmmm, was Fehler??? (es gibt eine Ausnahme? es berechnet nicht die richtigen Kombinationen? ...)
26^n
ist sehr groß, sogar für einen
so klein wie5
es wird11881376
. Sie kann auch nicht vorbei gehenn = 6
denn Sie können nicht erstellen Sie ein array, das groß ist (der Wert übertrifft-int max-Wert).- ja, was ist der Fehler??? welche Arten von Werten sind, die Sie versucht? Nicht nehmen, ein großes n für Ihr int zu werden, nicht genügend Speicher
- Ja, die Ausnahme ist ArrayIndexOutofBoundsException. Also, wie kann ich auf geordnete Liste der 26^n Worte?
- ok, in diesem Fall das problem ist sicherlich mit der Zuordnung Wert von x
- für was brauchen Sie diese? für brute-force-hacking?
- Nein, es ist akademisches Zeug
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, mit Rekursion statt der normalen iteration; code viel übersichtlicher und kürzer - es ist einfacher, Fehler zu finden.
Und rufen
recursion(n, "")
.In Ihrem letzten für:
Sie versuchen, Zugriff auf das array mit einer indexbigger als das array. Sie vielleicht nicht bemerkt haben, aber Ihre int x wurde größer als dein array genau hier:
EDIT:
Als @d'alar'cop sagte in seinem Kommentar: Ihre mathematischen operation fehlerhaft ist