看起来它有事情做与数组初始化,传递给方法的array
似乎并不为3×3。 E.g,以下不产生异常:
public static void main(String[] args) throws IOException {
double[][] array = new double[][]{{1d,1d,1d},{2d,2d,2d},{3d,3d,3d}};
double[][] subArray = get2DSubArray(array, 1, 2, 1, 2);
for(double[] arrayElement : subArray){
for(double number : arrayElement){
System.out.println(number);
}
}
}
public static double[][] get2DSubArray(double[][] largeArray, int rowStartIndex, int rowEndIndex, int columnStartIndex,
int columnEndIndex) {
double[][] subArray = new double[rowEndIndex - rowStartIndex + 1][columnEndIndex - columnStartIndex + 1];
for (int row = rowStartIndex; row < rowEndIndex; row++) {
subArray[row] = Arrays.copyOfRange(largeArray[row], columnStartIndex, columnEndIndex);
}
return subArray;
}
更新
虽然上述溶液中不产生异常,也不会产生正确的输出也是如此。主要是因为以下几个原因:
- 为
Arrays.copyOfRange
方法第三个参数是排他性的,因此我们必须通过columnEndIndex+1
它的工作
- 对于仅环所提供的参数集,而应该执行执行至少一次两次
- 不是指定
Arrays.copyOfRange
至subArray[row]
的,我们需要把它下面的解决方案不工作分配给subArray[<zero based index>]
:
public double[][] get2DSubArray(double[][] largeArray, int rowStartIndex, int rowEndIndex, int columnStartIndex,
int columnEndIndex) {
double[][] subArray = new double[rowEndIndex - rowStartIndex + 1][columnEndIndex - columnStartIndex + 1];
int index = 0;
for (int row = rowStartIndex; row <= rowEndIndex; row++) {
subArray[index++] = Arrays.copyOfRange(largeArray[row], columnStartIndex, columnEndIndex+1);
}
return subArray;
}
你知道哪些索引值导致异常吗? –
当我输入一个3x3矩阵时,发生异常(索引为1,2,1,2)(例如rowStartIndex = 1,rowEndIndex = 2等等) –
我已经用上面的输入更新了答案。 –