程序输出是NaN而不是float

时间:2016-08-13 04:09:47

标签: java

我正在从书上练习,练习听起来像这样:

司机关心他们的汽车行驶里程。一名司机通过记录驾驶里程和每辆坦克使用的加仑数来跟踪几次行程。开发一个Java应用程序,它将为每次旅行输入里程驱动和使用的加仑(均为整数)。该程序应计算并显示每次行程所获得的每加仑英里数,并打印到此时所有行程所获得的每加仑行驶里程数。所有平均计算都应产生浮点结果。使用类Scanner和sentinel控制的重复来获取用户的数据。

这是我的代码:

import java.util.Scanner;

public class consumption {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int miles = 0;
        int gallons = 0;
        int totalGallons = 0;
        int totalMiles = 0;
        float mpg = 0;
        float totalAverage = 0;

        System.out.println("Enter number of gallons or enter -1 to finish:");
        gallons = in.nextInt();
        while(gallons != -1)
        {
            gallons += totalGallons;
            System.out.println("Enter the number of miles driven:");
            miles = in.nextInt();
            miles += totalMiles;
            mpg = ((float)totalMiles/totalGallons);
            System.out.printf("Total Miles per Gallon on this trip is %.2f\n", mpg);
            System.out.println("Enter number of gallons:");
            gallons = in.nextInt();
        }

        if(totalGallons!=0)
        {
            totalAverage = (float) totalMiles/totalGallons;
            System.out.printf("Total consumption on all trips is %.2f\n", totalAverage);
        }
        else
            System.out.println("You did not enter a valid gallon quantity\n");
    }
}

出于某种原因,在我输入sentinel(-1)后,输出显示NaN而不是它应输出的浮点数。

此外,它不会计算totalAverage,甚至不会显示NaN

这是输出:

输入加仑数或输入-1表示完成:25

输入行驶里程数:5

这次旅行的每加仑总里程数为NaN

输入加仑数:-1

您没有输入有效的加仑数量

处理完成,退出代码为0

请帮帮我:(

1 个答案:

答案 0 :(得分:0)

在while循环中,编写语句

gallons += totalGallons;
miles += totalMiles;

totalGallons初始化为0,其值永远不会改变。 totalMiles也是如此。因此计算mpg

mpg = (float) totalMiles / totalGallons;

采用

的形式
(float) 0/0;

infinity。在Java中,infinity值的float表示为Nan : Not a number。所以只需将语句更改为

totalGallons += gallons;
totalMiles += miles;

修改

正如其他人所说,infinity不是Nan。 Java显示INFNan时有区别。有关详细信息,请参阅此问题:Difference between infinity and not-a-number

另外,请检查@ StephanC关于JAVA生成Nan的案例的答案。