程序在抛出异常时不能工作



例如,我有:

    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();
        }
    }
}

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

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

在开始循环之前应该检查输入,只有在输入无效时才抛出IAE。

你需要在entries.remove(i)后添加"break";

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

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();
  }
如果您的目的是找到符合条件的第一个条目并删除,那么

应该可以工作,如果没有找到则抛出异常。除非所有条目符合您的条件,否则您的方法将无法工作。

相关内容

  • 没有找到相关文章

最新更新