2016-10-16 10 views
0

とエラーIは、Appクラスで、ループで助けを得ました。私は取得していますのJava - 2D配列 - メインとインスタンス化クラス - ループ

errrosは以下のとおりです。スレッド "メイン" java.lang.ArrayIndexOutOfBoundsExceptionで

例外:rainfall.Rainfall.compute で0 が参照:降雨で

sum[i] = rain[i][j] + sum[i]; 

。 RainfallApp.mainはを参照:

r.compute();) 

C:\ Users \ユーザー〜\ run.xml:53:Javaが返さ:1 BUILDのFAIをLED(合計時間:5秒)

インスタンス化可能クラス:

import java.util.Arrays; 
    import javax.swing.JOptionPane; 

    public class Rainfall { 
private int i; 
private int j; 
private int[][] rain = new int[4][7]; 
private int[] average = new int[4]; 
private int[] sum = new int[4]; 

public Rainfall(){ 
    i = 0; 
    j = 0; 
    rain = new int[][]{}; 
    average = new int[]{}; 
    sum = new int[]{}; 
} 

public Rainfall(int i, int j) { 
    this.i = i; 
    this.j = j; 
} 

public int getJ() { 
    return j; 
} 

public void setJ(int j) { 
    this.j = j; 
} 

public int getI() { 
    return i; 
} 

public void setI(int i) { 
    this.i = i; 
} 

public int[][] getRain() { 
    return rain; 
} 

public void setRain(int[][] rain) { 
    this.rain = rain; 
} 

public int[] getAverage() { 
    return average; 
} 

public void setAverage(int[] average) { 
    this.average = average; 
} 

public int[] getSum() { 
    return sum; 
} 

public void setSum(int[] sum) { 
    this.sum = sum; 
} 

public void compute(){ 

    for (i = 0; i < rain.length; i++) { 

     for (j = 0; j < rain[0].length; j++) { 
      rain[i][j] = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter value")); 

      sum[i] = rain[i][j] + sum[i]; 
     } 

     average[i] = sum[i]/rain[i].length; 

    } 
} 

public String returnAvg(){ 
    return Arrays.toString(average); 
} 
} 

APPファイル:

import javax.swing.JOptionPane; 
    import java.util.Arrays; 

    public class RainfallApp { 

    public static void main(String[] args) { 

    int[][] rain = new int[4][7]; 
    int[] average = new int[4]; 



    Rainfall r = new Rainfall(); 

    r.setRain(rain); 
    r.compute(); 
    average = r.getAverage(); 

    JOptionPane.showMessageDialog(null, "The average for each week is: "+Arrays.toString(average)); 

} 

答えて

1

あなたはRainfallクラスであなたのすべてのメンバーをオーバーライドしている。

public Rainfall(){ 
    i = 0; 
    j = 0; 
    rain = new int[][]{}; 
    average = new int[]{}; 
    sum = new int[]{}; // this is the problem 
} 

これには利点がありますか?コンストラクタが(メンバとして)呼び出される前に、それらの値をすでに与えているので、なぜそれをオーバーライドするのですか?

あとでrain配列が、sum配列を開始setRain()を呼び出すには、空の配列

残ります