例如,我有:
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();
}
如果您的目的是找到符合条件的第一个条目并删除,那么应该可以工作,如果没有找到则抛出异常。除非所有条目符合您的条件,否则您的方法将无法工作。