需要有关Java Rainfall计划的帮助

时间:2017-03-12 03:06:56

标签: java

所以我必须制作Java降雨计划。问题是我的教授希望我使用myprogramminglab提交它,如果你没有得到完全相同的mpl输出它会被标记为错误所有向下到间距是非常敏感的。我已经完成了大部分程序只是我遇到了麻烦,输出最大月份和最小月份作为字符串和输入验证。

这是作业:

  

编写一个具有以下字段的RainFall类:

     

•一系列双打,用于存储12个中每个的降雨量   一年中的几个月(第一个指数与1月相对应,   第二次与二月等。)

     

该课程还应具备以下方法:

     

•返回全年总降雨量的方法
  •一种返回当年平均月降雨量的方法
  •将雨量最多的月份作为字符串返回的方法
  •一种方法,以降雨量最少的月份作为字符串返回

     

在一个程序中展示该类,该程序需要12个双打   用户(按照一年中的几个月的顺序进行双打比赛   首先对应1月份的降雨量等)。做输入   验证:如果用户输入负数,则忽略它   继续要求他们输入,直到你有12个非负双打   。

     

一旦用户提供了所有12个双打,请创建一个实例   RainFall类并调用它的方法,打印出总数   降雨量,月平均降雨量,降雨量最多的月份,   和降雨量最少的月份,每个月都在一条单独的线路上。

这里的输出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()中的return语句

1 个答案:

答案 0 :(得分: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[]