一尘不染

什么时候抛出运行时异常?

java

最近,我接受了公司的采访,他们给了我一个编码问题。我得到了与纸牌有关的程序,其中一种方法是将纸牌洗牌。因此,我将该程序编写为:

/** Shuffle the list of cards so that they are in random order 
 * @param d Deck of cards*/
public  static void shuffle(Deck d)
{
    if(d == null)
        throw new IllegalArgumentException();
    Random randomGenerator = new Random();
    List<Card> cards = d.getDeckOfCards();   // cards is basically Linked List.. cards = new LinkedList<Cards>()
    for(int i=0;i<cards.size();i++)
    {
        int randomNumber = randomGenerator.nextInt(52);
        Card c1 = cards.remove(randomNumber);
        Card c2 = cards.remove(0);
        cards.add(0, c1);
        cards.add(randomNumber,c2);
    }

}

在上面的代码中,我引发了我最怀疑的 IllegalArgumentException
。在什么情况下实际上应该抛出运行时异常?我们是否应该实际抛出运行时异常?

谢谢


阅读 321

收藏
2020-12-03

共1个答案

一尘不染

我们是否应该实际抛出运行时异常?

是的,我们应该。运行时异常有特定的用途-它们发出编程问题,只能通过更改代码来解决,而不是更改程序运行的环境。

在什么情况下实际上应该抛出运行时异常?

当使用类或方法的使用方式检测到错误时,将引发运行时异常。

通常,有两种情况需要抛出运行时异常:

  • 传递无效的参数值 -这是运行时异常的最常见原因。大多数参数验证异常应为运行时异常。Java提供了几个子类来表示这些特定问题。
  • 以错误的顺序调用方法 -这是另一个常见原因。如果在类完成初始化或其他一些准备步骤之前无法调用某些方法,则在错误的时间调用将导致运行时异常。

从这个意义上讲,您的代码很好:它正好适合第一类,即传递无效的参数值。我要做的一件事稍有不同,就是添加一条消息,说明哪个参数具有无效值,但是在您的情况下这并不重要,因为那里只有一个参数。

2020-12-03