【发布时间】:2017-12-19 03:43:02
【问题描述】:
我有一个方法可以检查用户输入的值是否在数组范围内:
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]
}
我有一个二维数组(行和列的大小取决于设置):
char[][] grid = new char[rows][columns];
当我错误检查 num1/num2 是否大于它们各自的行/列时,我的 placeMove 方法给了我一个 ArrayIndexOutOfBoundsException。 placeMove 再次调用 placeMove 并将第一次调用 placeMove 的状态保存在堆栈中,一旦执行完对 placeMove 的第二次调用,则第一次迭代将使用堆栈中保存的局部变量的值恢复其进一步执行,并且导致异常。我该如何防止这种情况?感谢您的帮助!
【问题讨论】:
-
@JBNizet 我知道为什么会发生错误,我正在尝试处理可能通过要求他们输入新动作来输入脱离网格的动作的用户,但是一旦他们添加了新动作移动,上一次调用离网移动的函数会执行并导致异常。
标签: java recursion static stack procedural