此代码非常粗糙,不完整,并且不以任何方式专业。我收到了:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:-1 在ConnectFourGame.main(ConnectFourGame.java:63)
任何时候我尝试输入一个列显示出来。我一直在查看我的代码,我的父亲也是如此,我们无法找到错误的位置。任何帮助都会很棒!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ConnectFourGame
{
public static void main(String[] args)
{
int[][] grid = new int[6][7];
int i, j, temp, player=0, inarowl=0, inarowr=0, temprow=0, inarowd=0, tempcol=0;
boolean legal = true;
boolean gameover = false;
//Initializing game board
for(i=0;i<6;i++)
for(j=0;j<7;j++)
grid[i][j] = 0;
//ALL GAME LOGIC
do {
i=0;
j=0;
//PLAYER 1
//check for diagonals next
do {
i=0;
j=0;
player=1;
//player places chip
temp=Integer.parseInt(JOptionPane.showInputDialog(null, "pick your column( 0 / 1 / 2 / 3 / 4 / 5 / 6 )"));
for(i=0;i<6;i++)
{
if(grid[i][temp]==0)
//detects lowest available chip slot in the column for placement
{ // and turns that spot into a box owned by the player
grid[i][temp]=player;
legal=true;
temprow=i;
tempcol=temp;
break;
}else legal=false;
}
}
while(!legal);
inarowl=0;
inarowr=0;
tempcol=temp;
do
{
tempcol--;
inarowl++;
}while(grid[temprow][tempcol]==player);
tempcol=temp;
do
{
tempcol++;
inarowr++;
}while(grid[temprow][tempcol]==player);
do
{
temprow--;
inarowd++;
}while(grid[temprow][tempcol]==player);
if (inarowl+inarowr-1>=4||inarowd>=4)
gameover=true;
//PLAYER 2
//check for diagonals next
do {
i=0;
j=0;
player=2;
temp=Integer.parseInt(JOptionPane.showInputDialog(null, "pick your column( 0 / 1 / 2 / 3 / 4 / 5 / 6 )"));
for(i=0;i<6;i++)
{
if(grid[i][temp]==0)
{
grid[i][temp]=player;
legal=true;
temprow=i;
tempcol=temp;
break;
}else legal=false;
}
}
while(!legal);
inarowl=0;
inarowr=0;
tempcol=temp;
do
{
tempcol--;
inarowl++;
}while(grid[temprow][tempcol]==player);
tempcol=temp;
do
{
tempcol++;
inarowr++;
}while(grid[temprow][tempcol]==player);
do
{
temprow--;
inarowd++;
}while(grid[temprow][tempcol]==player);
if (inarowl+inarowr-1>=4||inarowd>=4)
gameover=true;
} while(gameover==false);
}
}
答案 0 :(得分:0)
这段代码可能触发一个超出范围的异常:如果grid [temprow] [0] == player,则tempcol减少(到-1),并且将评估grid [temprow] [ - 1]。
do
{
tempcol--;
inarowl++;
}while(grid[temprow][tempcol]==player);
在while条件下,还必须确保数组索引仍然在数组的范围内。
while (grid[temprow][tempcol] == player && tempcol > 0 && tempcol < grid[temprow].length)
答案 1 :(得分:0)
我看到的主要问题是您正在使用do... while(condition)
循环。在这种情况下,问题是您首先减去整数然后使用相同的整数来访问内存位置。
这种方法的问题在于,由于您在减去之前进行检查,因此您尝试访问负内存位置。要解决此问题,请改用while(condition)
循环。这将允许您在之前执行检查进行数组操作,这将允许您及时打破循环。