【问题标题】:Adding a user-defined exception and an exception handler添加用户定义的异常和异常处理程序
【发布时间】:2016-03-05 09:31:19
【问题描述】:

我得到了一个名为 Fibonacci Number 的程序,当程序的输入是负整数值时,没有输出。我尝试通过添加用户定义的异常和异常处理程序来修改它,以便在输入为负整数值时可以采取适当的操作。我仍然无法理解异常是如何工作的,以及如何修改这个程序来做到这一点。

public class FibonacciNumber {
    public static long fib(int n) {
        if (n <= 1) return n;
        else return fib(n-1) + fib(n-2);
    }

    public static void main(String[] args) {
        int N = Integer.parseInt(args[0]);
        System.out.println(N);
        for (int i = 1; i <= N; i++)
            System.out.println(i + ": " + fib(i));
    }

}

【问题讨论】:

  • 如果值为负数,你想发生什么?
  • 跟随斐波那契模式
  • “遵循斐波那契模式”是什么意思?如果用户输入负数?
  • 这里的问题是你还没有真正问过问题。请明确点。如果用户输入无效,你想做什么?

标签: java exception-handling fibonacci


【解决方案1】:

当您是 Java 新手时,我会用通俗易懂的语言来解释这一点。这就是您可以修改程序以计算斐波那契数的方法。首先你说你想使用异常来控制程序的行为,让用户知道出现了问题。当您抛出异常时,该异常将传播到调用者层次结构,直到它被显式异常处理程序捕获,或者如果没有找到处理程序来捕获它,程序将简单地退出。

在这种情况下,您希望抛出一个错误,以便下面的应用程序代码在被异常处理程序捕获之前不会被执行。

if (N < 0) {
  throw new IllegalArgumentException("Negative numbers are not allowed");
}

这将引发带有自定义消息的 IllegalArgumentException,您可以根据需要向用户显示该消息。

现在正如我所说,这个异常必须在异常处理程序中被捕获。由于您抛出此异常,因此不会立即执行代码。换句话说,如果您将上面的代码段放在下面的代码之上,下面的代码将不会被执行。

System.out.println(N);
for (int i = 1; i <= N; i++)
  System.out.println(i + ": " + fib(i));

现在您需要一个异常处理程序,否则您的程序将过早退出。 这就是您将它包含在 try catch 处理程序中的方式,

int N = Integer.parseInt(args[0]);
try {
   if (N < 0) {
     throw new IllegalArgumentException("Negative numbers are not allowed");
   }
   System.out.println(N);
   for (int i = 1; i <= N; i++) {
      System.out.println(i + ": " + fib(i));
   }
 } catch (IllegalArgumentException e) {
    System.out.println(e.getMessage());
 }

有了这个,当用户输入一个负数时,程序将在我们创建的异常中显示消息。当输入为负数时,您可能想通过引发异常来做其他事情,但您应该能够理解如何做到这一点。您可能还想使用自定义异常而不是 Java 平台提供的标准异常。有很多tutorials 可以学习自定义异常处理。

【讨论】:

  • 非常感谢,是的,我在编程方面有点新手,对此感到抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
相关资源
最近更新 更多