例如,我有:
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();
}
}
}
即使输入不正确,上面的代码也会抛出异常。你对此有什么想法吗?谢谢
答案 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();
}
这应该有效,如果您的意图是找到匹配条件的第一个条目并删除,并且如果找不到则抛出异常。除非所有条目都符合您的条件,否则您的方法将无效。