Eine Liste aller möglichen Kombinationen
Hier ist, was ich versuche zu tun:
Gegeben eine Liste von Namen drucken
Kombinationen der drei Namen genommen
in einer Zeit,. Wenn die Liste hat zu wenige
Elemente, nicht alles drucken. Namen
müssen in der gleichen Reihenfolge auftreten, dass Sie
in der Liste erscheinen. Also, wenn die Liste
enthält die Namen Kennedy, Johnson,
Nixon, Ford, Programmieren Sie druckt:[Kennedy, Johnson, Nixon]
[Kennedy,Johnson, Ford]
[Kennedy, Nixon, Ford]
[Johnson, Nixon, Ford]Setzen Sie die Werte in ein array und verwenden Sie dann die
Arrays.toString () - Methode zum drucken des
Ergebnisse, einer pro Zeile.Parameter: Liste - eine Liste von Namen.
Recht, jetzt bin ich mit print-Anweisungen, um zu sehen, wenn ich auf der rechten Spur, wenn ich bin, ich werde passen diese in ein array.
Hier ist mein code:
int x = 0;
int y = 1;
int z = 2;
for(int i = 0; i<list.length;i++){
for (int j = 0;j<3;j++){
System.out.print(list[x]);
System.out.print(list[y]);
System.out.print(list[z]);
if (j>=1){y++;}
if (z != list.length){z++;}
}
x++;
}
Hier ist die Fehlermeldung die ich bekomme:
Enter commands:
trio Kennedy, Johnson, Nixon,ford
Kennedyjava.lang.ArrayIndexOutOfBoundsException: 1
at MyAssign1.trio(MyAssign1.java:204)
at Assign1.processOneCommand(Assign1.java:109)
at CmdInterpreter.processCommands(CmdInterpreter.java:198)
at CmdInterpreter.processCommands(CmdInterpreter.java:230)
at CmdInterpreter.ooMain(CmdInterpreter.java:243)
at MyAssign1.main(MyAssign1.java:20)
Linie 204:
System.out.print(list[y]);
Was mache ich falsch?
- Sie versuchen, Zugriff auf ein element eines Arrays, die nicht vorhanden ist. Zum Beispiel, wenn das array hat 3 Elemente (Länge 3; Indizes von 0 bis 2 inclusive) und Sie versuchen, Zugriff auf element 4 (index 3) Sie werden sehen, diese Ausnahme.
- Wenn diese Hausaufgaben, bitte markieren Sie Sie als solche.
- was ist in
list
? - Bei Matt, Wie behebe ich das dann???
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als die Kommentare auf Ihre Frage, schlage vor, die
ArrayIndexOutOfBoundsException
Ausnahme tritt auf, weil Sie accesing ein index außerhalb der Grenzen des Arrayslist
. Werfen Sie einen Blick:Den Wert
y
ist immer erhöht. Nachlist.length
Iterationen die Ausnahme, die sicherlich erhöhen wird. Die Lösung für die Ausnahme ist einfach: nicht der Zugriff auf ein array mit einem index außerhalb seiner Grenzen.Während viele Lösungen zu den Kombinationen problem vorhanden ist, das einfachste, um Sie wieder auf Spur ist:
Blick auf Ihr code (und ich möchte nicht unfreundlich sein), ich glaube nicht, du bist auf dem richtigen Weg mit diesem ein.
Empfehle ich als ersten Schritt, Sie vergessen, über den code zusammen, und denke einfach über den Algorithmus oder Prozess, die Sie verwenden würden. Sie sollten in der Lage sein, um es aufzuschreiben in Englisch als eine Liste von Schritten. Nur einmal haben Sie diese Liste, sollten Sie dann darüber nachdenken, wie würden Sie die Implementierung in code.
Zur Beantwortung Ihrer eigentlichen Frage, sind Sie derzeit immer die Ausnahme, weil Sie den Zugriff auf Elemente über das Ende der Liste. Dies ist zum Teil aufgrund der Tatsache, dass das Inkrementieren bis
z
gleichlist.length
Stoppt zu spät; ein array der Länge 4 hat Elemente mit Indizes von 0 bis 3, solist[4]
werfen der Ausnahme, die Sie sind, zu begegnen.(Jetzt Ihrer Kombination-die Suche nach der Logik nicht die richtige.
x
nie geändert, so dass jede Kombination (zum Beispiel) beginnt mitKennedy
. Alsz
trifft die Länge der Liste das Wachstum Stoppt, abery
weiter zu wachsen, so bekommen Sie einige Iterationen, wobei die zweite und Dritte Einträge identisch sind, und Sie haben nicht überlegt, oby
überschreiten der Grenzen. Sie sind auch Schleifen überi
aber nichts zu tun mit es. Ihr Programm, wenn es nicht Abstürzen würde, würde die Ausgabe etwas wie:Und Sie haben eine viel der Spezial-Gehäuse drin. Die Annahme, dass, die Sie benötigen zu Durchlaufen, während
j < 3
funktioniert nur, wenn es genau vier Elemente in der Eingabe. Die überprüfung, sollten Sie die Schrittweitey
if j >= 1
ist wieder ein Spezial-Fall, dass schafft nur das richtige Ergebnis mit genau vier Elementen. Wieder, ich ermutige Sie zu denken, über den Prozess, den Sie könnten Sie verwenden, um jede permuation der drei Elemente in einer Eingabe beliebiger Länge, ohne darüber nachzudenken-code.)Ich nehme an, du bist mit diesem wrap-code: http://www.cs.colostate.edu/~cs161/assignments/PA1/src/CmdInterpreter.java
Ich denke, du hast Hauptproblem ist wohl die Art und Weise, die Sie ausführen den Befehl. Es sieht für mich wie es ist, nur an sich zu denken Kennedy ist Teil des Arrays und nicht die anderen Namen. Versuchen Sie diesen Befehl statt:
Verlassen der Räume könnte helfen, den parser interpretieren die Array.
Ich glaube, dein problem ist nicht der code, den Sie geschrieben, aber in dem code, den Sie nicht zeigen, Sie uns. Wie sind Sie mit dem erstellen und Auffüllen der
list
array? Es sieht aus wie die Liste ist initialisiert falsch, und nur tatsächlich enthält ein element.Versuchen Sie, so etwas wie dieses, um Ihren code zu prüfen:
Versuchen, zu vergleichen mit meiner Lösung, mit der sich eine weniger komplizierte Logik:
Ich habe einige range-Optimierung, zur Vermeidung unnötiger wird innerhalb des loops.
Sie können nicht einfach ändern, LEN zum ändern der Reihenfolge der Länge, ist es nur für die Beseitigung der "magischen Zahl" 3 aus den code.
Bemerkung:Wenn Sie mehr wollen-Sequenzen statt 3, müssen Sie einbetten, wird eine neue Schleife der Tiefe.
Hoffe, es hilft!
Unten-Methode nimmt eine beliebige Anzahl von Zeichenfolgen als Eingabe-Liste. Und wird erzeugt, möglich, die Anzahl der Permutationen/Kombinationen. Im Falle von Permutationen man kann auch schweigen, wenn Sie brauchen, wiederholte String oder nicht. bitte beachten Sie, wenn ComboOnly wahr ist, dann isRepeat keine Wirkung.