我该如何为这个 class 修复 "Possible Lossy Conversion from Double to Int"?
How would I fix "Possible Lossy Conversion from Double to Int" for this class?
这个 class 的目标是能够从用户那里获取降雨总量的输入。输入后,程序将显示当年的降雨总量、月平均降雨量、降雨最多的月份和降雨最少的月份。这是我的代码:
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;
}
}
编译时,以下行出现错误 "Possible lossy conversion from double to int":
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)]);
我不确定如何进行。应该更改什么以使这两行没有错误?
数组查找表达式(expressionOfTypeArray[idx]
中的 idx
)的索引必须是 int 类型,但您提供的是双精度型。该错误试图告诉您的是,也许 double 可能是 5.5
或 2^100;这两个数字都没有等效的 int
值。也许你分析了代码并得出了这不可能发生的结论,但编译器并不知道这一点,所以出于防御原则它不会默默地尝试将 double 的方钉砸入 an 的圆孔int 只是因为这是唯一在这里起作用的东西。
您可以简单地.. 告诉编译器,是的,将其粉碎:months[(int) maxRainfall(rainfall)]);
- 这将通过删除任何小数部分来舍入数字,因此,5.5 变成 5,无提示。
但是,我会修正你的方法。 maxRainfall 方法 returns 最大降雨量发生月份的索引。绝对没有任何理由应该是 double
;毕竟,没有“第 5.5 个月”。只需要 public static int minRainfall(...
就可以了。
您的方法返回一个双精度值,将其更改为 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;
}
这个 class 的目标是能够从用户那里获取降雨总量的输入。输入后,程序将显示当年的降雨总量、月平均降雨量、降雨最多的月份和降雨最少的月份。这是我的代码:
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;
}
}
编译时,以下行出现错误 "Possible lossy conversion from double to int":
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)]);
我不确定如何进行。应该更改什么以使这两行没有错误?
数组查找表达式(expressionOfTypeArray[idx]
中的 idx
)的索引必须是 int 类型,但您提供的是双精度型。该错误试图告诉您的是,也许 double 可能是 5.5
或 2^100;这两个数字都没有等效的 int
值。也许你分析了代码并得出了这不可能发生的结论,但编译器并不知道这一点,所以出于防御原则它不会默默地尝试将 double 的方钉砸入 an 的圆孔int 只是因为这是唯一在这里起作用的东西。
您可以简单地.. 告诉编译器,是的,将其粉碎:months[(int) maxRainfall(rainfall)]);
- 这将通过删除任何小数部分来舍入数字,因此,5.5 变成 5,无提示。
但是,我会修正你的方法。 maxRainfall 方法 returns 最大降雨量发生月份的索引。绝对没有任何理由应该是 double
;毕竟,没有“第 5.5 个月”。只需要 public static int minRainfall(...
就可以了。
您的方法返回一个双精度值,将其更改为 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;
}