最近,我接受了公司的采访,他们给了我一个编码问题。我得到了与纸牌有关的程序,其中一种方法是将纸牌洗牌。因此,我将该程序编写为:
/** 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
。在什么情况下实际上应该抛出运行时异常?我们是否应该实际抛出运行时异常?
谢谢
我们是否应该实际抛出运行时异常?
是的,我们应该。运行时异常有特定的用途-它们发出编程问题,只能通过更改代码来解决,而不是更改程序运行的环境。
在什么情况下实际上应该抛出运行时异常?
当使用类或方法的使用方式检测到错误时,将引发运行时异常。
通常,有两种情况需要抛出运行时异常:
从这个意义上讲,您的代码很好:它正好适合第一类,即传递无效的参数值。我要做的一件事稍有不同,就是添加一条消息,说明哪个参数具有无效值,但是在您的情况下这并不重要,因为那里只有一个参数。
我已经用Java编写代码一段时间了。但有时,我不知道什么时候应该抛出异常,什么时候应该捕获异常。我正在做一个有很多方法的项目。层次结构是这样的- 所以目前我正在做的是-我在所有方法中抛出异常并在方法A中捕获它,然后将其记录为错误。 但我不确定这是否是正确的方法?或者我应该开始在所有方法中捕获异常。这就是为什么这种混乱始于我的 - 我什么时候应该抓住异常与何时应该抛出异常。我知道这是一个愚蠢的问题,
问题内容: 在我的应用程序中,有时会引发以下异常: 很难找到错误,因为在stacktrace中没有列出我的方法。那么,有人知道何时抛出此异常吗?感谢您的任何提示。 问题答案: 您可以在stacktrace中看到错误: 适配器的内容已更改,但ListView没有收到通知。确保不从后台线程修改适配器的内容,而仅从UI线程修改。 您应该调查一个线程,并使其与UI线程同步。 在Android中执行此操作的
问题内容: 我担心这是运行时异常,因此应谨慎使用。 标准用例: 但这似乎会强制执行以下设计: 使它回到被检查的异常。 好的,但是让我们开始吧。如果输入错误,则会出现运行时错误。首先,这实际上是统一实施的相当困难的策略,因为您可能必须执行相反的转换: 更糟的是-虽然可以预期客户端代码将以静态方式进行检查,但对于更高级的数据(例如电子邮件地址)却并非如此,或更糟糕的是,必须对数据库进行检查,因此,一般
我担心这是一个运行时异常,所以应该谨慎使用。 标准用例: 但这似乎会迫使以下设计: 将其恢复为检查异常。 好吧,但我们还是继续吧。如果输入错误,则会出现运行时错误。因此,首先,这实际上是一个很难统一实施的政策,因为您可能需要进行相反的转换: 更糟糕的是,在检查
我们应该在什么时候选择抛出一个异常? 我们可以在try catch中捕获此异常。 在哪种情况下,我们选择使用投掷而不是立即接球?是否与设计模式相关?
问题内容: 什么时候应该创建一个检查异常,什么时候应该创建一个运行时异常? 例如,假设我创建了以下类: 我应该如何创建我的?它应该扩展还是?还是我应该只使用它? 问题答案: 在这个话题上有很多分歧。在我的上一份工作中,我们遇到了一些实际问题,运行时异常被遗忘了,直到它们出现在生产环境中(在ageswards.com上),因此我们决定只使用已检查的异常。 在我目前的工作中,我发现在很多情况下都有很多