2017-03-12 13 views
-3

Java rainfallプログラムを作成する必要があります。私の教授はmyprogramminglabを使用してそれを提出したいと思っています。これはmplの出力が同じにならないと非常に敏感です。私はプログラムのほとんどが本当に私が問題を抱えていることを行うには、文字列と入力の検証として最大の月と最小月を出力しています。ここで、(今年の12 ヶ月ごとに降雨を格納doubleの配列•Java Rainfallプログラムのヘルプが必要

次のフィールドを持つ降雨クラスを記述します。ここでは

は割り当てがあります最初のインデックスは1月、2月 と第2など)に対応し

クラスには、以下の方法を持っている必要があります。

を返すメソッド•文字列として
を最も雨と月を返すメソッド•年
月間平均降水量を返すメソッド•全体の年間
のための総雨量を返すメソッド•

文字列として少なくとも雨

( は最初の月に降雨に対応し、年の数ヶ月のためにダブルスを取る ユーザーからの12倍を取るプログラムでクラスを実証するとともに、月、など)。 の入力を行います。ユーザーが負の数を入力した場合はそれを無視して、 を入力します。 12個の非負の倍数が入力されます。

ユーザーは、あなたのすべての12倍を与え 降雨クラスのインスタンスを作成し、そのメソッドを呼び出して、総雨量 、月平均降雨量、最も雨、 と月と月をプリントアウトしていたら、最も少ない雨で、それぞれ別々の線に乗っています。

ここで出力MPLはフローティング期間はスペースと矢印

newlines: 
Enter·rainfall·for·month·1:1.12↵ 
Enter·rainfall·for·month·2:2.24↵ 
Enter·rainfall·for·month·3:3.36↵ 
Enter·rainfall·for·month·4:0.48↵ 
Enter·rainfall·for·month·5:2.00↵ 
Enter·rainfall·for·month·6:5.00↵ 
Enter·rainfall·for·month·7:12.12↵ 
Enter·rainfall·for·month·8:1.48↵ 
Enter·rainfall·for·month·9:3.12↵ 
Enter·rainfall·for·month·10:3.24↵ 
Enter·rainfall·for·month·11:6.6↵ 
Enter·rainfall·for·month·12:1.12↵ 
41.88↵ 
3.49↵ 
July↵ 
April↵ 

を表し、ここに私のコードは私の唯一のエラーはif文で悪いオペランドタイプです

public class rainFall 
{ 
Scanner input = new Scanner(System.in); 

String rain[] = {"January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "November", "December"}; 

     static double sum = 0; 
     static double avg = 0; 
     int m = 1; 
     double numbers = 0; 

     public void setSum() 
     { 
      while(m < 13) 
      { 
       System.out.print("Enter rainfall for month " + m + ":"); 
       numbers = input.nextDouble(); 
       sum+= numbers; 
       m++; 
      } 
     } 

     public double getSum() 
     { 
      return sum; 
     } 

     public void setAverage() 
     { 
      avg = sum/12; 
     } 

     public double getAverage() 
     { 
      return avg; 
     } 

     public String getLargest() 
     { 
      String largest = rain[0]; 
      int r = 0; 

      for(int i = 0; i < numbers; i++) 
      { 
       if(rain[i] > numbers) 
       { 
        r = i; 
       } 
      } 

      return r; 
     } 


    public static void main(String[] args) { 

     rainFall rf = new rainFall(); 
     rf.setSum(); 
     rf.setAverage(); 

     System.out.println(rf.getSum()); 
     System.out.println(rf.getAverage()); 
    } 
} 

だ望んだと返信文getLargest()

+1

あなたのif条件が理にかなっていない - 文字列 'rain [i]'が 'numbers'よりも大きいのはどうすればいいですか?何をしようとしていますか?あなたは何を正確にテストしていると思いますか? –

+2

あなたは指示にも従っていません - 二重の配列はどこにありますか? –

答えて

0

私は最大の月と最小の月が文字列として出力されています

これは、あなたが1ヶ月間降雨を保存しないと考えるのは本当に難しいでしょう。あなたはちょうどその合計を持っています。

public void setSum() 
    { 
     while(m < 13) 
     { 
      System.out.print("Enter rainfall for month " + m + ":"); 
      numbers = input.nextDouble(); 
      sum+= numbers; 
      m++; 
     } 
    } 

そしてまた、ここでは、このループは、あなたはそれがないと思うどのように動作しません。より良いあなたの変数の命名試してみてください、あなたはこの問題

double numbers = 0; // This is a singular value, not plural. 

for(int i = 0; i < numbers; i++) // This will loop, but not 'every month' 
{ 
    if(rain[i] > numbers) // Here you compare a `String > double` ... not going to work 
    { 
     r = i; 
    } 
} 

そして、あなたは月の名前、ないことrain配列のインデックスを返したいが表示されます。ここで


はその後HashMap<String, Double>

HashMap<String, Double> amounts = new HashMap<String, Double>(); 

    public void setSum() 
    { 
     for (int i = 0; i < rain.length; i++) { 
      String month = rain[i]; 
      if (!amounts.containsKey(month) { 
       amounts.put(month, 0); 
      } 

      System.out.print("Enter rainfall for month " + month + ":"); 
      double input = input.nextDouble(); 
      amounts.put(month, amounts.get(month) + input); 


      sum += numbers; 
     } 
    } 

のHashMapをループする方法を研究し、すべてのキーの最小/最大値を見つけると月の金額を取得する例を示します。

しかし、あなたの指示だから今年の12ヶ月

ごとに降雨を格納doubleの配列この

を言って、あなたはdouble[]

が必要になります