将字符串转换为双打并再次返回

时间:2014-09-08 18:42:36

标签: java casting double

我正在编写一个程序来计算一些基本值,如温度,压力和密度。它首先获取变量温度,压力,高度和密度的用户输入。这些存储为字符串,因为如果值未知,用户需要输入值“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);
    }

}

2 个答案:

答案 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