对于此类,我该如何解决“可能的从双精度到整数的有损转换?”

问题描述 投票:0回答:3

此类的目标是能够从用户那里获得降雨总量的输入。接受输入后,程序将显示当年的降雨总量,平均每月降雨量,降雨最多的月份和降雨量最少的月份。这是我的代码:

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)]);

我不确定如何继续。应该更改什么才能使这两行没有错误?

java java.util.scanner
3个回答
1
投票

您的方法返回一个双精度,将其更改为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;
}

0
投票

数组查找表达式的索引(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(...,它就可以正常工作。


0
投票

类似于其他答案-您希望该方法返回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方法进行相同的更改。

© www.soinside.com 2019 - 2024. All rights reserved.