当前位置: 首页 > 知识库问答 >
问题:

如何使用JOptionPane捕获不正确的输入?

连曜灿
2023-03-14

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

我该怎么做?

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

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

由于这似乎是一个令人困惑的问题,或者我问错了,这些是我的老师的指示:

  1. 程序必须要求用户输入购买金额,使用 JOptionPane.showInputDialog
  2. 程序必须要求用户输入付款金额,使用 JOptionPane.showInputDialog
  3. 程序
  4. 必须捕获不正确的输入(空,null,字符,多个小数点,超过两个小数位(即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);

共有1个答案

淳于凯
2023-03-14

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

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

还有其他选择,但如果你不熟悉它们,它们可能更棘手:

    < li >使用正则表达式。 < li >转换为< code>BigDecimal,然后检查是否舍入到两位小数,最后是否与开始时的< code>BigDecimal相同。

注意:不要用< code>double尝试第二种方法。一个< code>double不能总是精确地表示十进制数,所以舍入到两位小数并检查它是否不变可能会给你假阳性(在没有错误的地方看起来是错误)。

 类似资料:
  • 我有一些代码,其中多个方法使用键盘,并在主方法中连续调用。我正在做的练习特别要求使用4种不同的方法,所以我不能把它们放在一起。最初,我用键盘。在每个方法的末尾关闭(),但当第二个方法运行时,无论调用顺序如何,这都会导致NoTouchElementException。通过卸下键盘。close(),代码现在可以工作了,但是我现在收到了资源泄漏的警告,因为键盘没有关闭。有人能告诉我一种关闭输入而不出错的

  • 我正在尝试创建一个检查整数的函数,并将继续循环,直到用户正确输入17或更高的整数。但是,如果我输入错误的输入,例如“K”或“

  • 问题内容: 我有一个简单的表格。所有组件和状态都保存在Page组件中。有2个显示标题和3个输入字段。第一个输入应该是文本,第二个和第三个输入应该是整数。当用户输入错误的数据类型时,我想在输入字段旁边弹出一条错误消息。我的问题与React.JS的最佳做法有关 谁认为该值有效?我想输入字段的唯一工作就是将值引导回到保持状态的组件,这是否意味着只有Page可以确定值是否有效? 然后应该如何显示弹出窗口?

  • 问题内容: 我喜欢Typescript等中提供的新功能的平坦性。但是,我不确定我是否必须在块的外部声明要输入的变量以便以后使用,这一点我不确定。像这样: 如果我错了,请纠正我,但是似乎最好的做法是不要在主体中放置多行业务逻辑,因此,我只剩下在块外声明,在块中分配,以及然后使用它。 在这种情况下,最佳做法是什么? 问题答案: 似乎最好的做法是不要在try主体中放置多行业务逻辑 其实我会说是的。通常,

  • 问题内容: 说我有以下代码: 现在,如果抛出,我该如何捕捉?一种方法是提供自己的实现,并为其中的设置custom 。另一种方法是将其包装为包含try-catch -block 的本地(匿名)。也许还有其他类似的解决方法。但是…以某种方式感觉很脏,我觉得这不应该那么复杂。有没有干净的解决方案? 问题答案: 干净的解决方法是使用而不是。这将返回一个,您可以用来检索结果或任务异常:

  • 我有一个表单,在这个表单中,我希望处理文本输入上的更改事件,但在按下键触发更改时做出反应(与本机JS相反,当输入字段失去焦点时触发更改事件)。 有没有反应的方法来做我想做的?