我正在编写一个程序来计算一些基本值,如温度,压力和密度。它首先获取变量温度,压力,高度和密度的用户输入。这些存储为字符串,因为如果值未知,用户需要输入值“unknown”。
System.out.println("What is the height in meters?");
height = reader.next();
System.out.println("What is the temperature in degrees celsius?");
temperature = reader.next();
System.out.println("What is the pressure in kPa?");
pressure = reader.next();
System.out.println("What is the density in kg/m^3?");
density = reader.next();
然后,还有另一个变量询问用户想要计算的内容。
System.out.println("What would you like to find? (Enter a number)");
System.out.println("1) Temperature");
System.out.println("2) Pressure");
System.out.println("3) Density");
whatToFind = reader.next();
之后,我有一个switch语句来计算用户选择的任何值。根据输入值,它可以激活findTemp(),findPressure()或findDensity()并打印出最终值。我试图在此过程中使用它,我得到了这个错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "unknown"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at calculator.AerospaceCalculator.findTemp(AerospaceCalculator.java:73)
at calculator.AerospaceCalculator.main(AerospaceCalculator.java:44)
可以找到完整的AerospaceCalculator.java文件here。
可以找到日志here。我在输入中加上引号。
请帮我弄清楚我做错了什么。感谢。
以下是各种顺序的方法“findTemp()”,“findPressure()”和“findDensity()”。
public static void findTemp() {
if(height == "unknown"){
System.out.println("You cannot find temperature without height.");
} else {
double temp = Double.parseDouble(height);
double hite = Double.parseDouble(temperature);
temp = 15.04 - (0.00649 * hite);
temperature = Double.toString(hite);
}
}
public static void findPressure() {
if(temperature == "unknown"){
findTemp();
} else {
double press = Double.parseDouble(pressure);
double temp = Double.parseDouble(temperature);
press = 101.29 * (Math.pow((temp + 273.1) / (288.08), 5.256));
pressure = Double.toString(press);
}
}
public static void findDensity() {
if(pressure == "unknown") {
findPressure();
} else {
double dens = Double.parseDouble(density);
double press = Double.parseDouble(pressure);
double temp = Double.parseDouble(temperature);
dens = press / (0.2869 * (temp + 273.1));
density = Double.toString(dens);
}
}
答案 0 :(得分:2)
您通过引用相等性将输入值与常量String
进行比较,如下所示:
if(height == "unknown"){
这不是在Java中比较String
个对象的正确方法。相反,您应该使用equals()
方法,如下所示:
if ("unknown".equals(height)) {
还存在检查temperature
变量以确定其值是否设置为"unknown"
的问题。如果您调用Double.parseDouble()
并将其传递给非{数字的String
值,则会抛出异常,就像您遇到的那样。
我建议校对/组织你的其他一些代码段,因为你似乎有令人困惑/不匹配的变量名,至少基于假定的意图:
double temp = Double.parseDouble(height);
double hite = Double.parseDouble(temperature);
答案 1 :(得分:0)
使用reader.nextDouble()
读取用户输入的双重格式。
查看文档here。