首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >由于nextDouble(),我得到了一个异常,我怎样才能避免这种情况?

由于nextDouble(),我得到了一个异常,我怎样才能避免这种情况?
EN

Stack Overflow用户
提问于 2015-11-06 12:38:07
回答 2查看 775关注 0票数 0

我是美联社的计算机科学专家,我正在编写java代码。我可以使用的方法和类的数量是有限的。例如,我不被允许使用hasNextLine()。这是当我输入“多少欧元等于一美元”的值时,它给我的错误。它允许我输入该值,然后要求输入美元值。然而,在我输入它之前,这个错误就出现了:

Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)   
at java.lang.Double.parseDouble(Double.java:538)
at CurrencyConverter.main(CurrencyConverter.java:20)
public class Currency
{
    private double rate;

    public Currency()
    {
        rate = 0.0;
    }

    public Currency(double newRate)
    {
        rate = newRate;
    }

    public double convert(double dollar)
    {
        double euro = dollar * rate;
        return euro;
    }
}
import java.util.Scanner;
import java.util.Scanner;
public class CurrencyConverter
{
    public static void main(String [] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.println("How many euros is one dollar?");
        double exchangerate = input.nextDouble();
        System.out.println("Dollar value (Q to quit):");
        String dollarvalue = input.nextLine();
        double dv = 0.0;
        String bvalue = "";
        String bvaluetwo = "Q";
        if (dollarvalue.equals(bvalue))
        {
            dollarvalue = "test";
        }
        else if (!dollarvalue.equals(bvaluetwo))
        {   
            dv = Double.parseDouble(dollarvalue);
        } 

        Currency exchange = new Currency(exchangerate);

        while (dollarvalue != "Q")
        {
            double eurovalue = exchange.convert(dv);
            System.out.println(dv + " dollar = " + eurovalue + " euro");
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-06 13:22:40

尝试将此代码放入您的main方法中:

        public static void main(String [] args)
    {
        Scanner input = new Scanner(System.in);
        System.out.println("How many euros is one dollar?");
        double exchangerate = input.nextDouble();
        //You have to put this in order to continue
        input.nextLine();
        System.out.println("Dollar value (Q to quit):");
        String dollarvalue = input.nextLine();
        double dv = 0.0;
        String bvalue = "";
        String bvaluetwo = "Q";
        if (dollarvalue == bvalue)
        {
            dollarvalue = "test";
        }
        else if ((dollarvalue != bvaluetwo))
        {   
            dv = Double.parseDouble(dollarvalue);
        } 

        Currency exchange = new Currency(exchangerate);

        while (!dollarvalue.equals("Q"))
        {
            double eurovalue = exchange.convert(dv);
            System.out.println(dv + " dollar = " + eurovalue + " euro");
            System.out.println("Dollar value (Q to quit):");
            dollarvalue = input.nextLine();
             if (!dollarvalue.equals("Q")) {     
             dv = Double.parseDouble(dollarvalue);
             eurovalue = exchange.convert(dv);
                System.out.println(dv + " dollar = " + eurovalue + " euro");
            } 

        }
        System.out.println("You pressed Q, have a nice day");
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-11-06 12:43:26

如果没有输入,这将给出异常,在调用任何next方法之前,请始终使用扫描器的hasNext()方法

这是你的罪魁祸首:

   System.out.println("Dollar value (Q to quit):");
            String dollarvalue = input.nextLine();
            double dv = 0.0;
            String bvalue = "";
            String bvaluetwo = "Q";
            if (dollarvalue == bvalue) {
                dollarvalue = "test";
            } else if ((dollarvalue != bvaluetwo)) {
                dv = Double.parseDouble(dollarvalue);
 }

您存储的是"Q“的String或用户输入的其他字符串值,然后在dv = Double.parseDouble(dollarvalue);中,您正在将其解析(转换)为抛出java.lang.NumberFormatException异常的double

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33559589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档