所以我必须制作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语句
答案 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[]