此类的目标是能够从用户那里获得降雨总量的输入。接受输入后,程序将显示当年的降雨总量,平均每月降雨量,降雨最多的月份和降雨量最少的月份。这是我的代码:
import java.util.Scanner;
public class Rainfall {
private static final String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
public static void main(String[] args){
Scanner input = new Scanner(System.in);
final int MONTHSINYEAR = 12;
double[] rainfall = new double[MONTHSINYEAR];
System.out.println("Enter the monthly rain fall amount: ");
int i = 0;
for (i = 0; i < MONTHSINYEAR; i++){
do {
System.out.println("Enter rainfall for month " + (i + 1) + ": ");
rainfall[i] = input.nextDouble();
}
while (rainfall[i] < 0);
}
System.out.println("The total rainfall for the year is: " + totalRainfall(rainfall));
System.out.println("The average monthly rainfall is: " + averageRainfall(rainfall));
System.out.println("The month with the most rain is: " + months[maxRainfall(rainfall)]);
System.out.println("The month with the least rain is: " + months[minRainfall(rainfall)]);
}
public static double totalRainfall(double[] arr){
double total = 0;
for (int i = 0; i < arr.length; i++){
total += arr[i];
}
return total;
}
public static double averageRainfall(double[] arr){
double average = 0;
average = totalRainfall(arr) / arr.length;
return average;
}
public static double maxRainfall(double[] arr){
double max = arr[0];
double maximum = 0;
for (int i = 0; i < arr.length; i++){
if (arr[i] > max){
max = arr[i];
maximum = i;
}
}
return maximum;
}
public static double minRainfall(double[] arr){
double min = arr[0];
double minimum = 0;
for(int i = 0; i < arr.length; i++){
if(arr[i] < min){
min = arr[i];
minimum = i;
}
}
return minimum;
}
}
[编译时,以下各行将显示一条错误消息,提示“可能从双精度转换为整数”:
System.out.println("The month with the most rain is: " + months[maxRainfall(rainfall)]);
System.out.println("The month with the least rain is: " + months[minRainfall(rainfall)]);
我不确定如何继续。应该更改什么才能使这两行没有错误?
您的方法返回一个双精度,将其更改为int
(和方法签名),以便它返回最大值的index
public static int maxRainfall(double[] arr){
double max = arr[0];
int maximum = 0;
for (int i = 0; i < arr.length; i++){
if (arr[i] > max){
max = arr[i];
maximum = i;
}
}
return maximum;
}
数组查找表达式的索引(idx
中的expressionOfTypeArray[idx]
)必须为int类型,但您要提供一个double。该错误试图告诉您的是,该倍数可能是5.5
或2 ^ 100。这两个数字都没有等效的int
值。也许您分析了代码并得出结论认为这不可能发生,但是编译器却不知道这一点,因此出于防御性原则,它不会默默地尝试将两倍于两倍的方钉粉碎成一个圆孔。只是因为那是唯一在这里起作用的东西。
[您可以简单地..告诉编译器,是的,将其粉碎到那里:months[(int) maxRainfall(rainfall)]);
-这将通过舍掉任何小数部分来舍入数字,因此5.5变为5,无提示。
但是,我会解决您的方法。 maxRainfall方法返回最大降雨发生月份的索引。绝对没有理由将其设为double
;毕竟没有“ 5.5th month”。只需将其设为public static int minRainfall(...
,它就可以正常工作。
类似于其他答案-您希望该方法返回int
值(为您提供正确月份的索引),因此应声明您的方法返回int
,并且变量的声明也应声明如int
,如下面的更正和注释代码所示:
// return int instead of double (index)
public static int maxRainfall(double[] arr){
double max = arr[0];
int maximum = 0; // declare as int
for (int i = 0; i < arr.length; i++){
if (arr[i] > max){
max = arr[i];
maximum = i;
}
}
return maximum;
}
您需要对minRainfall方法进行相同的更改。