当前位置: 首页 > 面试题库 >

如何找出哪个变量引发异常?

景英杰
2023-03-14
问题内容

我正在编写一个程序,从账单和小费率中汇总小费和总计。

public void takeUserInput() {
    Scanner sc = new Scanner(System.in);    
    double billAmount;
    int tipRate;

    try {
        System.out.print("What is the bill? ");
        billAmount = sc.nextDouble();
        System.out.print("What is the tip percentage? ");
        tipRate = sc.nextInt();

        tc.calculate(billAmount, tipRate);
    } catch (InputMismatchException e1) {
        String errorMessage = "Please enter a valid number for the ";
        // errorMessage += billAmount or
        // errorMessage += tipRate ?
    }

我正在寻找一种找出哪个变量引发InputMismatchException的方法,因此可以将哪个变量名称添加到变量errorMessage中并打印到屏幕上。


问题答案:

变量不会引发异常,而是对变量赋值的右侧进行评估,因此在异常中没有任何信息可以说明将成功赋给哪个变量。

您可以考虑使用一种包含提示消息和重试的新方法:

billAmount = doubleFromUser(sc, "What is the bill? ", "bill");

哪里doubleFromUser是:

static double doubleFromUser(Scanner sc, String prompt, String description){
    while(true) { //until there is a successful input
        try {
            System.out.print(prompt); //move to before the loop if you do not want this repeated
            return sc.nextDouble();
        } catch (InputMismatchException e1) {
            System.out.println("Please enter a valid number for the " + description);
        }
    }
}

对于int和double,您将需要一个不同的变量,但是如果您有更多的提示,从长远来看,您将可以节省。



 类似资料:
  • 我是JRakNet的创建者,JRakNet是一个网络库,它实现了适用于Java的最新协议RakNet的基础知识。我制作了这个库,这样我就可以为使用RakNet的Minecraft:携带版制作一个多人游戏服务器。 然而,我在服务器和客户端遇到的一个问题是处理程序的异常处理。每当发送无效数据包时,数据就会被错误读取,异常就会像正常情况一样被抛出。然而,我需要找到一种方法来找出导致异常的外部地址。 通常

  • 问题内容: 我知道我可以使用以下技术找出Java中的变量是否为空: 如果->太多工作 ->它告诉我哪一行引发异常 手动使用调试器->太慢 考虑以下代码行: 我想知道是否有一种通用的方法来以编程方式找出是什么变量(而不仅仅是行)在特定的代码区域中引发了NullPointerException。在示例中,知道 问题答案: 由于有可能导致空指针异常而无需涉及变量: 我不得不说,没有通用方法可以将空指针异

  • 本文向大家介绍如何找出触发了哪些JavaScript事件?,包括了如何找出触发了哪些JavaScript事件?的使用技巧和注意事项,需要的朋友参考一下 要查看触发了哪些JavaScript事件,请按照以下步骤操作。我们正在Google Chrome网络浏览器上触发事件: 打开谷歌浏览器,然后按 F12键打开“开发工具”。 现在转到“源”选项卡 转到右侧的事件监听器断点: 单击事件并与目标元素进行交

  • 编辑似乎不可能在此刻归档一个问题。 我正在apache camel应用程序中使用log4j2。在骆驼中,可以通过这种方式配置文件名 编辑,非常容易在测试中重现: 它对美元{date:}至关重要--只有“data:now”起作用。所以这个问题完全独立于camel,但是camel使用了${date:...}几件事的模式。这里有一个重现问题的简单路线--异常将在骆驼设置阶段抛出--不需要测试代码--日志

  • 问题内容: 我想找出在纯JavaScript中以跨浏览器兼容的方式按下了哪些字符键。 问题答案: “清除” JavaScript: jQuery的: