Ich habe eine Methode, die Benutzer eingegebene Werte innerhalb einer Array-Grenzen überprüft, ob:Wie kann man die vorherige Iteration des rekursiven Methodenaufrufs loswerden?
public static void placeMove(int num1, int num2){
//checking if x and y are greater than rows and columns of a 2D array
if(num1 > rows-1 || num2 > columns-1){
System.out.println("This space is off the board, try again.");
int[] values = new int[2];
values = inputMove(); //calls inputMove method to ask user for new input
placeMove(values[0],values[1]); //calling itself to check
//if new values are prohibited
}
//code to place a value in grid[num1][num2]
}
I einen 2D-Array (Größe der Zeilen und Spalten variieren, je nach Einstellung):
char[][] grid = new char[rows][columns];
My Die Methode placeMove gibt mir eine ArrayIndexOutOfBoundsException, wenn ich einen Fehler überprüfe, ob num1/num2 größer als ihre jeweilige Zeile/Spalte ist. placeMove ruft einen placeMove erneut auf und der Zustand des ersten Aufrufs von placeMove wird im Stack gespeichert und sobald die Ausführung des zweiten Aufrufs von placeMove abgeschlossen ist, nimmt die erste Iteration ihre weitere Ausführung mit den gespeicherten Werten ihrer lokalen Variablen aus dem Stack und wieder auf verursacht die Ausnahme. Wie verhindere ich das? Danke für jede Hilfe!
@JBNizet Ich weiß, warum der Fehler passiert, versuche ich einen Benutzer behandeln, der eine Bewegung außerhalb des Rasters eingeben kann, indem er sie auffordert, eine neue Bewegung einzugeben, aber sobald sie ihre neue Bewegung hinzugefügt hat, wird der vorherige Aufruf der Funktion mit ihrer Off-Grid-Bewegung ausgeführt und verursacht die Ausnahme. – splash