Java 将字符串转换为双精度并再次转换

Java 将字符串转换为双精度并再次转换,java,casting,double,Java,Casting,Double,我正在写一个程序来计算一些基本值,比如温度、压力和密度。它首先获取用户输入的变量温度、压力、高度和密度。这些存储为字符串,因为如果值未知,用户需要输入值“未知”的选项 System.out.println("What is the height in meters?"); height = reader.next(); System.out.println("What is the temperature in degrees celsius?"); temperature = reader.

我正在写一个程序来计算一些基本值,比如温度、压力和密度。它首先获取用户输入的变量温度、压力、高度和密度。这些存储为字符串,因为如果值未知,用户需要输入值“未知”的选项

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文件
可以找到日志。我在输入周围加上引号

请帮我找出我做错了什么。谢谢

以下是方法“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);
    }

}

使用
reader.nextDouble()
读取用户输入的双精度表单


检查文档。

您正在通过引用等式将输入值与常量
字符串进行比较,如下所示:

if(height == "unknown"){
这不是比较Java中
String
对象的正确方法。相反,您应该像这样使用
equals()
方法:

if ("unknown".equals(height)) {
还存在检查
温度
变量以确定其值是否设置为
“未知”
的问题。如果调用
Double.parseDouble()
并以非数字的
String
值传递它,将引发异常,正如您遇到的那样

我建议您也校对/组织一些代码的其他部分,因为您似乎有混淆/不匹配的变量名,至少基于假定的意图:

double temp = Double.parseDouble(height);
double hite = Double.parseDouble(temperature);

将代码的相关部分发布在您的问题中,而不是通过潜在问题解决者必须排序的链接。抱歉,我刚刚添加了它。旁注:不要将字符串与
==
进行比较,而是使用String.equals()方法。另外,我看到您解析
height
并将其提供给
temp
,还解析
temperature
并将其提供给
hite
。这真的是你想要的吗?在某些情况下,它的可能副本看起来可能会以Double.parseDouble(“未知”)结束。我认为这可能会导致您的错误。如果我这样做,用户就不能为未知值设置“未知”。我明白了。我会试着改变这个。