Java 数组索引超出范围:7 公共类mdar{ 公共空间(续){ Random rand=新的Random(); int con=100; int multi[][]=新int[con][6]; 对于(int x=0;x

Java 数组索引超出范围:7 公共类mdar{ 公共空间(续){ Random rand=新的Random(); int con=100; int multi[][]=新int[con][6]; 对于(int x=0;x,java,arrays,Java,Arrays,您将超出数组的长度,请尝试执行以下操作: public class mdar { public void cont(){ Random rand = new Random(); int con = 100; int multi[][]=new int [con][6]; for(int x = 0;x<multi.length;x++){ for(int y = 0;y<multi[x].

您将超出数组的长度,请尝试执行以下操作:

public class mdar {
    public void cont(){
        Random rand = new Random();
        int con = 100;
        int multi[][]=new int [con][6];
        for(int x = 0;x<multi.length;x++){
            for(int y = 0;y<multi[x].length;y++){
                int temp = rand.nextInt(9);
                multi[x][y] = multi[x+1][temp];    //this line is going bad
            }
        }
        for(int i=0;i<multi.length;i++){
            System.out.print("contester "+multi[i]);
            for(int j=0;j<multi[i].length;j++){
                System.out.println(" has "+multi[i][j]+" ");                
            }
            System.out.println();
        }
    }
}
if(x+1
如果不知道代码应该做什么,我们就很难给出解决方案。错误很明显。请参见外循环的上一次迭代
x=multi.length-1
。因此,当您要求
multi[x+1][temp]
时,您要求的是
multi[multi.length]
由于multi从
[0变为multi.length-1]
,因此超出了范围

除此之外,
int temp=rand.nextInt(9)
如果返回值6、7或8,也会导致越界异常,因为多维的第二维度必须在范围
[0到5]

同样,如果不知道需要做什么,我无法知道我下面提出的解决方案是否符合您的要求:

if(x+1 < multi.length)
{
multi[x][y] = multi[x+1][temp]; 
}
for(int x=0;x

在循环x+1结束时,使其成为循环。

多维的第二个维度是6

 multi[x][y] = multi[x+1][temp]; 
然而,在第二个维度上,你可以调用任何高达8的东西

int multi[][]=new int [con][6];
因此,您得到了一个超出范围的数组索引,在您的例子中,temp是7

另外,您的循环介于0和
multi[x]之间。长度-1

 int temp = rand.nextInt(9);
 multi[x][y] = multi[x+1][temp]; //temp could be between 0 and 8 from the random function

我想你是想写信

multi[x][y] = multi[x+1][temp]; 
而不是

multi[x][y] = temp;
//This would set multi[x][y] to a random int in the range [0,8] (inclusive)
这有两个问题: 1) x是范围为[0,multi.length]的for循环计数器[包括,排除)

但是,多维数组的第二维度大小为6(有效位置
multi[x][0]
multi[x][5]

随机变量temp将超出有效范围3/9次(对于6、7、8),因此在调用nextInt(9)的33%时间内,您将遇到此错误。因为它在对cont()的一次调用中被多次调用您几乎永远不会有一个无错误运行的执行,但是,无论执行是否有错误,它在逻辑上仍然是不正确的代码。

当您的

int multi[][]=new int [con][6];

将值设为“7”。您将收到此错误。请调试并查找。

您将使用第二维6声明2D数组:

int temp = rand.nextInt(9);
第二维度的有效索引将在范围0..5内。 但是你可以用随机数访问它,比如7,这是不允许的:

int multi[][]=new int [con][6];
这里,当temp超过5时,它将给您异常,因为您有
multi[][]=newint[con][6];

更改行
int temp=rand.nextInt(5);


此外,您还有另一个问题
multi[x+1]
,当x=99时,它将尝试使100成为导致问题的原因,请记住数组索引以0开头当数组大小为[100][6]时,x将如何使其过度运行数组顺序从0开始。如果你有100个长度,这意味着它的长度为0-99,包括0和99,当你尝试100时,它会给出arrayindexoutof异常。杜德开始注释代码,这是一个很好而且必须具备的技能。我投票决定关闭。如果不知道你的代码应该做什么,除了指出导致异常的
x+1
之外,很难帮助你如果您能提供更多信息,我们可以提供帮助。除非他试图将多数组的随机单元格与多数组的另一个单元格进行别名(谁会这样做?),否则我们可以计算出multi[x][y]应该接收存储在temp中的随机值。这只是基本代码-。-而且,
x+1
将在x循环的最后一次迭代中溢出。嗯,这确实不是我的意思。每个con的长度=6个整数。反随机将增加到9个。x+1不是问题。x+1没有将x设置为1。x+1!=x++| x=x+1
for(int x = 0;x<multi.length;x++)
int temp = rand.nextInt(9);
int multi[][]=new int [con][6];
int temp = rand.nextInt(9);
int multi[][]=new int [con][6];
int temp = rand.nextInt(9);
multi[x][y] = multi[x+1][temp];    //this line is going bad
int temp = rand.nextInt(9);
                System.out.println(temp);
                multi[x][y] = multi[x+1][temp];