2016-10-15 6 views
0

それを把握することはできません私は尋ねた質問は次のとおりです。のJava - 2D配列 - 毎週の必要性の平均は、

4週間保存のために毎日ユーザーから受け取るアプリケーション、平均降雨量を開発それらを配列にします。アプリケーションは、毎週の平均降雨量を計算し、回答を別の配列に格納する必要があります。アプリケーションは、4つの平均値をユーザーに出力する必要があります。クラスをRainfallApp.javaとして保存します。

これは私がこれまで行ってきたものであり、動作させることができません。

sum[i] = sum[i] + rain[i][j]; //total of each week 

j == 7が実行を停止するforループが発生していますが、存在しないrain[i][7]の値にアクセスしよう: -

public class RainfallApp { 
    // int[rows ←→][colums ↑↓] num = new int[][]; 
    public static void main(String[] args) { 

    int[][] rain = new int[4][7]; //4 weeks, 7 days 
    int[][] average = new int[4][1]; //4 weeks, 1 average of week 
    int sum[] = new int[4]; //total rain per week 
    int i; 
    int j; 

    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")); //value 
     } 
     sum[i] = sum[i] + rain[i][j]; //total of each week 

     average[i][j] = sum[i]/rain[i][j]; 

    } 


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

     } 
    } 

答えて

0

問題は、次の行です。同様に、それに続く行(average[i][j] = sum[i]/rain[i][j];)。計算に追加のループを使用することができます。

1

ストリームでこれを行うことができます。

Stream.of(rain) 
    .map(week -> IntStream.of(week).average()) 
    .filter(OptionalDouble::isPresent) 
    .map(OptionalDouble::getAsDouble) 
    .forEach(System.out::println); 

もっと一般的には、または週番号が必要な場合はこれを行うことができます。

+0

単純に美しい –

+0

さらに綺麗です:Stream.of(rain).map(week - > IntStream.of(week).average())forEach(oa - > oa.ifPresent(System.out :: println )); '。 –

0

平均で1次元配列を使用すると、PEFが指摘している問題のいくつかが解消されます。あなたが平均のための2次元配列を好む場合

int[][] rain = new int[4][7]; // 4 weeks, 7 days 
    // use just a 1-dimensional array for average 
    int[] average = new int[4]; // 4 weeks, 1 average of week 
    int[] sum = new int[4]; // total rain per week 
    int i; 
    int j; 

    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")); // value 
      // to add each day’s rainfall, do it inside the loop 
      sum[i] = sum[i] + rain[i][j]; // total of each week 
     } 

     // obtain average by dividing by number of days 
     average[i] = sum[i]/rain[i].length; 

    } 

    // just printing out an array doesn’t give meaningful output. use: 
    JOptionPane.showMessageDialog(null, "The average for each week is: " + Arrays.toString(average)); 

、ちょうど読み取りおよび書き込み要素のためaverage[i][0]を使用しています。合計をdoubleに変換してから、値の切り捨てを避けるために、intに分割したい場合があります。

私は他の答えが嫌いではありません、私はちょうどあなたが他の素晴らしい試みで何が間違っていたの説明に値すると思った。

+0

ありがとうございます。それは本当に助けになりました。私の大学は初年度に配列を教えるわけではなく、明らかに2年目にそれを知ることを意味しています。だから、あなたは命の恩人です。どうもありがとうございます。私はまた、他の答えであなたに同意します。 –

関連する問題