Java数组索引越界异常2
我试图对矩阵条目进行排序,我首先将它们放入一个数组中Java数组索引越界异常2,java,arrays,indexoutofboundsexception,Java,Arrays,Indexoutofboundsexception,我试图对矩阵条目进行排序,我首先将它们放入一个数组中 double[][] A ={{0,70,9},{1,3,4}}; double[] vektori_per_sortim=new double[A.length*A[0].length]; int k=0; for(int i=0; i!=A.length; i++) { for(int j=0; j!=A[0].length; j++) { v
double[][] A ={{0,70,9},{1,3,4}};
double[] vektori_per_sortim=new double[A.length*A[0].length];
int k=0;
for(int i=0; i!=A.length; i++)
{
for(int j=0; j!=A[0].length; j++)
{
vektori_per_sortim[k]=A[i][j];
k++;
}
}
然后我又试着把它们放到矩阵里
int r=0;
while(r!=vektori_per_sortim.length)
{
for(int i=0; i!=vektori_per_sortim.length/A.length; i++)
{
for(int j=0; j!=vektori_per_sortim.length/A[0].length; j++)
{
A[i][j]=vektori_per_sortim[r];
r++;
}
}
}
但我犯了个错误
java.lang.ArrayIndexOutofBounds异常:2
你能帮我解决这个问题吗
非常感谢。问题是您混淆了尺寸,试图将6元素向量复制到3x2矩阵而不是2x3矩阵中 您可以知道,因为当您从矩阵中复制值时,
i
从0
变为A.length
。当您将它们复制回时,i
从0
变为A[0].length
(=vektori\u per\u sortim.length/A.length
)
您可以切换i
和j
条件,但只需使用第一个循环并反转其中的副本,就可以更干净:
k=0;
for(int i=0; i!=A.length; i++)
{
for(int j=0; j!=A[0].length; j++)
{
A[i][j] = vektori_per_sortim[k];
k++;
}
}
您可能需要一种不同的方法将值放回矩阵中。我建议您以与将元素放入数组相同的方式迭代元素,但这次以另一种方式复制它们。尝试用以下代码块替换第二个代码块:
int r = 0;
for(int i=0; i!=A.length; i++)
{
for(int j=0; j!=A[0].length; j++)
{
A[i][j] = vektori_per_sortim[r];
r++;
}
}
大多数开发人员都会使用调试器来解决这类问题。你所说的
i到底是什么意思=vektori_per_sortim.length/A.length
?哪一行导致了错误?让我猜猜-您的问题与上一个问题相同,因此您在标题中添加了2。这意味着不要问它。@djechlin不,2是错误中的越界索引。您可能应该使用k=0代码>在开始时,否则将使用旧的k值。非常感谢。这很有效。我把长度弄乱了一点。