抛出异常时程序不起作用

时间:2014-05-02 10:59:46

标签: java exception linked-list

例如,我有:

    private List<Entry> entries = new LinkedList<Entry>();

@Override
public void addEntry(Entry entry) {
    entries.add(entry);
    Collections.sort(entries);
}

@Override
public void deleteEntry(String input) throws IllegalArgumentException {
    for (int i = 0; i < entries.size(); i++) {
        if (entries.get(i).getName().equalsIgnoreCase(input) || entries.get(i).getExtension().equalsIgnoreCase(input)) {
            entries.remove(i);
        }
    }
}

我已经对此代码进行了测试,它运行得非常好。只要我在delete方法中添加一个else块来抛出异常,该方法就会在调用异常时始终抛出异常。

@Override
public void deleteEntry(String input) throws IllegalArgumentException {
    for (int i = 0; i < entries.size(); i++) {
        if (entries.get(i).getName().equalsIgnoreCase(input) || entries.get(i).getExtension().equalsIgnoreCase(input)) {
            entries.remove(i);
        } else {
            throw new IllegalArgumentException();
        }
    }
}

即使输入不正确,上面的代码也会抛出异常。你对此有什么想法吗?谢谢

4 个答案:

答案 0 :(得分:1)

你需要添加&#34; break&#34;在entry.remove(i)之后;

答案 1 :(得分:1)

如果条目不匹配,则抛出异常。

您应该在开始循环之前检查输入,如果输入无效,则只抛出IAE。你不应该需要一个循环来进行这项检查。

答案 2 :(得分:0)

除非满足列表中每个条目的条件,否则您的方法将抛出异常。

答案 3 :(得分:0)

public void deleteEntry(final String input) throws IllegalArgumentException
  {
    for (int i = 0; i < entries.size(); i++)
    {
      if (entries.get(i).getName().equalsIgnoreCase(input) || entries.get(i).getExtension().equalsIgnoreCase(input))
      {
        entries.remove(i);

        return;
      }
    }

    throw new IllegalArgumentException();
  }

这应该有效,如果您的意图是找到匹配条件的第一个条目并删除,并且如果找不到则抛出异常。除非所有条目都符合您的条件,否则您的方法将无效。