2016-12-08 11 views
1

この割り当ての目標は、2D配列を作成し、最大値を持つ行を配列に戻すことです。私は、メインメソッドでメソッドを呼び出すしようとすると、私は次を得る: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

コードが上書きする場合、入力2D配列を受け入れるコンストラクタの目的は何ですか? –

+1

本当に上書きされているのですか、単に 'mdarray = a;'の代わりに手動で各値をコピーしていますか? – Gendarme

+0

@Gendarme right right –

答えて

2

、私はその後、あなたが持つrowを決定するためにそれを使用することができます

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. 
} 

ようdouble[]から最大値を取得するための方法で開始しますあなたを構築するときに最後に

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あなたもを使用することができますのように論理を簡略化

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

1分が経過する前に回答が受け入れられました。ワオ。 – Gendarme

+0

@Gendarme私も頭が痛いです。私はこの問題を分解することが、OPが必要とするすべての助けだと思う​​。 –

関連する問題