2017-03-12 53 views
-3

所以我必须制作Java降雨计划。事情是我的教授要我使用myprogramminglab来提交它,如果你没有得到完全相同的mpl输出,它会被标记为错误,而这一点非常敏感。我已经完成了程序的大部分工作,但实际上我遇到的问题是将最大月份和最小月份输出为字符串和输入验证。需要关于Java降雨计划的帮助

这里的任务:

编写具有以下领域的降雨量等级:

•双打的阵列存储降雨量为每个12 个月的一年(其中第一指数与一月, 第二,今年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↵ 

这里是我的代码

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()); 
    } 
} 

我唯一的错误是不好的操作数类型的if语句和返回语句在getLargest()

+1

如果你的条件没有逻辑意义 - 一个String,'rain [i]'如何大于'numbers',一个double?你想在那里做什么?你究竟在想你在测试什么? –

+2

你甚至没有按照指示 - 你的双打在哪里? –

回答

0

我在麻烦的是输出最大月份和最小月份作为一个字符串

这将是真的很难得到考虑你不存储任何一个月的降雨量。你只有这笔钱。

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[]