我正在从书上练习,练习听起来像这样:
司机关心他们的汽车行驶里程。一名司机通过记录驾驶里程和每辆坦克使用的加仑数来跟踪几次行程。开发一个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
请帮帮我:(
答案 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显示INF
和Nan
时有区别。有关详细信息,请参阅此问题:Difference between infinity and not-a-number。
另外,请检查@ StephanC关于JAVA生成Nan
的案例的答案。