2016-12-08 30 views
1

此分配的目標是創建二維數組,然後返回數組中具有最大值的行。當我嘗試調用在main方法的方法,我得到如下:Java 2D數組:具有最大值的返回行

java.lang.ArrayIndexOutOfBoundsException:2

在這一點上,我不知道如何着手。

public class MDArray 
{ 
    private double[][] mdarray; 

    public MDArray(double[][] a) 
    { 
     mdarray = new double[a.length][]; 
     for(int i = 0; i < a.length; i++) 
     { 
      mdarray[i] = new double[a[i].length]; 
      for(int j= 0; j < a[i].length; j++) 
      { 
       mdarray[i][j] = a[i][j]; 
      } 
     } 
    } 
    public double[] max() 
    { 
     double[] maxVal = new double[mdarray.length]; 
     for(int i = 0, j = i + 1; i < maxVal.length; i++) 
     { 
      for(int k = 0; k < mdarray[i].length; k++) 
      { 
       if(mdarray[i][k] > mdarray[j][k]) 
       { 
        maxVal = mdarray[i]; 
       } 
      } 
     } 
     return maxVal; 
    } 
} 
+0

如果您的代碼只是覆蓋它,您的構造函數接受輸入二維數組的目的是什麼? –

+1

它真的是覆蓋,還是他手動複製每一個值,而不是隻是'mdarray = a;'? – Gendarme

+0

@Georgeme right you are –

回答

2

如果我明白你正在嘗試做的,我會用的方法開始得到從double[]

private static double getMaxValue(double[] a) { 
    int maxIndex = 0; // <-- start with the first 
    for (int i = 1; i < a.length; i++) { // <-- start with the second 
     if (a[i] > a[maxIndex]) { 
      maxIndex = i; 
     } 
    } 
    return a[maxIndex]; // <-- return the max value. 
} 

最大值然後,你可以用它來確定row與最大值(和複製陣列)像

public double[] max() { 
    int maxIndex = 0; // <-- start with the first 
    for (int i = 1; i < mdarray.length; i++) { // <-- start with the second 
     double maxValue = getMaxValue(mdarray[maxIndex]); 
     double curValue = getMaxValue(mdarray[i]); 
     if (curValue > maxValue) { 
      maxIndex = i; // <-- The current value is greater, update the index. 
     } 
    } 
    return Arrays.copyOf(mdarray[maxIndex], mdarray[maxIndex].length); 
} 

最後,構建你的時候,你MDArray還可使用Arrays.copyOf來簡化邏輯,如

public MDArray(double[][] a) { 
    mdarray = new double[a.length][]; 
    for (int i = 0; i < a.length; i++) { 
     mdarray[i] = Arrays.copyOf(a[i], a[i].length); 
    } 
} 
+0

在一分鐘過去之前接受的答案。哇。 – Gendarme

+0

@Gendarme我也在撓我的腦袋。我想分解問題是OP所需的全部幫助。 –