我该如何为这个 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;
}