如何修复此错误?:线程中的异常;“主要”;java.lang.ArrayIndexOutOfBoundsException:3

如何修复此错误?:线程中的异常;“主要”;java.lang.ArrayIndexOutOfBoundsException:3,java,multidimensional-array,tic-tac-toe,Java,Multidimensional Array,Tic Tac Toe,我已经在这个代码上工作了好几个小时,无法理解这个部分。这个程序应该是一个tic-tac-toe游戏,我在2d数组中的某个地方出错了,因为我一直在得到这个错误。我还可以使用有关如何让随机生成器查找特定行和列的帮助 以下是我目前的代码: import java.util.Scanner; 导入java.util.Random; 公共类Tictatcoe{ 公共静态void main(字符串[]args){ 扫描仪r=新的扫描仪(System.in); int行=3; int col=3; int[]

我已经在这个代码上工作了好几个小时,无法理解这个部分。这个程序应该是一个tic-tac-toe游戏,我在2d数组中的某个地方出错了,因为我一直在得到这个错误。我还可以使用有关如何让随机生成器查找特定行和列的帮助

以下是我目前的代码:

import java.util.Scanner;
导入java.util.Random;
公共类Tictatcoe{
公共静态void main(字符串[]args){
扫描仪r=新的扫描仪(System.in);
int行=3;
int col=3;
int[][]网格=新的int[行][col];
填充网格(网格);
计算机转向(网格);
}//端干管
公共静态空白填充网格(int[][]网格){
//int[][]网格=新int[3][3];
对于(int r=0;grids.length<3;r++){
对于(int c=0;网格[r]。长度<3;c++){
网格[r][c]=0;
}
}
打印网格(网格);
}
公共静态void打印网格(int[]x){
对于(int i=0;i
了解您的
索引OutofBoundsException
被抛出到哪一行是很有用的。从异常末尾的
:3
中,我们可以知道,尽管
someArr.length<4
,您的代码
someArr[3]
中的某个地方仍在数组中被引用

fillGrid
中嵌套循环的终止条件存在一些问题:

for(int r=0;grids.length<3;r++){
/*循环永远不会进入,因为grids.length=3*/
对于(int c=0;网格[r]。长度<3;c++){
/*循环也不会进入,因为网格[r].length=3*/
网格[r][c]=0;
}
}
我想你的意思是:

for(int r=0;r
我还建议用这样的终止语句替换
computerTurn
中的循环,这样该方法就可以支持任意长度的数组


关于异常,一旦找到发生异常的位置,请尝试打印尝试访问的数组的长度,并打印尝试访问的索引。通过这种方式,您可以继续调试值错误的原因。

fillGrid()
不是必需的-
int
默认情况下,表元素初始化为
0
。分解需要在
computerTurn
中完成的工作。1.生成随机的行和列索引(范围为[0,2]!)2。检查单元格是否为空3。重复此过程,直到找到空单元格。
for(int r=0;r
for(int c=0;c