【问题标题】:How to catch incorrect input using JOptionPane?如何使用 JOptionPane 捕获不正确的输入?
【发布时间】:2014-12-08 10:16:47
【问题描述】:

嘿,我必须使用 JOptionPane 向用户询问购买金额,如果他们输入多于两位小数、没有输入、字符或多于一位小数,程序必须显示错误消息并停止。

我该怎么做?

我不希望有人为我编写程序,只是一个解释我将如何做的链接

如果用户输入“12.526”或“”或“1.3.25”或“abc”,我希望程序显示错误消息并停止。

因为这似乎是一个令人困惑的问题,或者我问错了,所以这些是我老师的指导:

  1. 程序必须要求用户输入购买金额,使用 JOptionPane.showInputDialog
  2. 程序必须要求用户输入支付金额,使用 JOptionPane.showInputDialog
  3. 程序必须捕获不正确的输入(空、空、字符、多于一位小数、多于两位小数(即 3.567))显示错误消息并停止程序执行。
  String PurchaseAmount = JOptionPane.showInputDialog(null, String.format("What is your purchase amount?")); 
  double PurchaseTotal = Double.parseDouble(PurchaseAmount);
  String PaymentAmount = JOptionPane.showInputDialog(null, "What is the payment amount?");
  double PaymentGiven = Double.parseDouble(PaymentAmount);

【问题讨论】:

    标签: java


    【解决方案1】:

    检查输入的格式是否正确的第一部分就像您所做的那样:使用Double.parseDouble()String 转换为double。执行此操作时,您可以使用 try/catch 块来捕获 NumberFormatException,如果输入根本无法转换为浮点数,则会发生这种情况。

    但您还被要求检查小数点后的位数是否不超过两位。这有点棘手。我建议您使用String.indexOf() 查找输入字符串中的小数点,然后检查该点之后是否有不超过两个字符(其中包括数字)。

    还有其他选项,但如果您不熟悉它们可能会比较棘手:

    1. 使用正则表达式。
    2. 转换为 BigDecimal,然后检查是否四舍五入到小数点后两位,最终得到的 BigDecimal 与开始时相同。

    注意:不要使用double 尝试第二种方法。 double 不能总是准确地表示十进制数字,因此四舍五入到小数点后两位并检查它是否未更改可能会给您带来误报(似乎没有错误的错误)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 2017-05-12
      相关资源
      最近更新 更多