Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组索引越界异常2_Java_Arrays_Indexoutofboundsexception - Fatal编程技术网

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值。非常感谢。这很有效。我把长度弄乱了一点。