JavaConnect4游戏。我想检查一下这一栏是否满了
我试图检查玩家想要放置硬币的栏是否已满。当我把柱子放满的时候,我把另一枚硬币放在那里,它就出界了。我怎样才能检查它是否满了,并且没有出界JavaConnect4游戏。我想检查一下这一栏是否满了,java,Java,我试图检查玩家想要放置硬币的栏是否已满。当我把柱子放满的时候,我把另一枚硬币放在那里,它就出界了。我怎样才能检查它是否满了,并且没有出界 for(int o=rows-1;o>=0;o--){ if(板[o][nextColumn]==“-”){ 单板[o][nextColumn]=nextSymbol+“”; 打破 } 如果(完整列>行){ System.out.println(“列已满!”); 打破 } } 您将获得IndexOutOfBoundsException,因为初始化循环时,g的值
for(int o=rows-1;o>=0;o--){
if(板[o][nextColumn]==“-”){
单板[o][nextColumn]=nextSymbol+“”;
打破
}
如果(完整列>行){
System.out.println(“列已满!”);
打破
}
}
您将获得IndexOutOfBoundsException,因为初始化循环时,g
的值为0
for(int g=0;g<rows;g++)
如果g
的值从零开始,则g-1
的值为-1,这会产生错误,因为根据定义,数组从索引0开始
当你检查你的对角线时,你不能只用一种方法来检查——对角线是有方向的。不考虑方向性是导致测试失败的原因
拿一张纸画你的黑板
Diagonal 1
3 - - - o
2 - - o -
1 - o - -
0 o - - -
0 1 2 3
Diagonal 2
3 o - - -
2 - o - -
1 - - o -
0 - - - o
0 1 2 3
在对角线1的情况下,您需要同时增加g
和s
,但是因为我们知道第一条对角线上的每个点g==s
,所以我们只需要一个变量
for(int g = 0; g < 4;g++)
{
if(boards[g][g].equals(boards[g + 1][g + 1]))
{
// still matching. I have no idea how your code is tracking
// matches, so you'll have to adapt this on your own
}
else
{
// no match, no need to continue the loop
// break; or exit however you want
}
}
无论什么时候,当你不能把你的头脑集中在某件事情上时,画一张图并在纸上画出来,直到你明白你在处理什么。你会得到IndexOutOfBoundsException,因为当你初始化循环时,
g
的值是0
for(int g=0;g<rows;g++)
如果g
的值从零开始,则g-1
的值为-1,这会产生错误,因为根据定义,数组从索引0开始
当你检查你的对角线时,你不能只用一种方法来检查——对角线是有方向的。不考虑方向性是导致测试失败的原因
拿一张纸画你的黑板
Diagonal 1
3 - - - o
2 - - o -
1 - o - -
0 o - - -
0 1 2 3
Diagonal 2
3 o - - -
2 - o - -
1 - - o -
0 - - - o
0 1 2 3
在对角线1的情况下,您需要同时增加g
和s
,但是因为我们知道第一条对角线上的每个点g==s
,所以我们只需要一个变量
for(int g = 0; g < 4;g++)
{
if(boards[g][g].equals(boards[g + 1][g + 1]))
{
// still matching. I have no idea how your code is tracking
// matches, so you'll have to adapt this on your own
}
else
{
// no match, no need to continue the loop
// break; or exit however you want
}
}
无论什么时候,当你不能把你的头脑集中在某件事情上时,画一幅画,然后在纸上画出来,直到你明白你在处理什么。你能提供一个。。。因此,发布完整的代码作为对失败原因的即时猜测。然而,您使用的是
boards[o][nextColumn]=“-”
,这是一个字符串
身份比较“-”.equals(boards[o][nextColumn])
是您想要的(=
检查它们是否是字符串的相同实例,它们可能不是)。这是否回答了您的问题?我改了。同样的问题依然存在。我的代码是350行。它说:线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:索引-1超出main.main(main.java:344)处长度6的界限,其中int行344行我有对角线检查是否有赢家(int g=0;ge.g.您循环g从0开始…现在在boards[g-1][s+1])当g为0时会出现错误,因为您试图在boars[-1][s+1]处访问元素。。。和-1不是有效的索引。请提供。。。因此,发布完整的代码作为对失败原因的即时猜测。然而,您使用的是boards[o][nextColumn]=“-”
,这是一个字符串
身份比较“-”.equals(boards[o][nextColumn])
是您想要的(=
检查它们是否是字符串的相同实例,它们可能不是)。这是否回答了您的问题?我改了。同样的问题依然存在。我的代码是350行。它说:线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:索引-1超出main.main(main.java:344)处长度6的界限,其中int行344行我有对角线检查是否有赢家(int g=0;ge.g.您循环g从0开始…现在在boards[g-1][s+1])当g为0时会出现错误,因为您试图在boars[-1][s+1]处访问元素。。。和-1不是有效的索引