方法:
public boolean addItem(MediaItem item) {
if (Library.size() == 0) {
item.setCopyNumber(1);
Library.add(item);
return true;
} else {
for (int count = 0; count < Library.size(); count++) {
String callNum = Library.get(count).getCallNumber();
if (item.getCallNumber().compareToIgnoreCase(callNum) == 0) {
int copyNum = item.getCopyNumber();
int LibraryNum = Library.get(count).getCopyNumber();
while (copyNum <= LibraryNum) {
copyNum = item.getCopyNumber();
++copyNum;
item.setCopyNumber(copyNum);
}
Library.add(item);
return true;
} else if (item.getCallNumber().compareToIgnoreCase(callNum) != 0) {
item.setCopyNumber(1);
Library.add(item);
return true;
}
}
}
return false;
}
测试:
AnytownLibrary newlib = new AnytownLibrary();
assertNotNull(newlib);
MediaItem newItem = new Book();
MediaItem nextItem = new Book();
assertNotNull(nextItem);
assertNotNull(newItem);
newItem.setCallNumber("1");
nextItem.setCallNumber("1");
newlib.addItem(newItem);
assertTrue(newlib.addItem(newItem));
newlib.addItem(nextItem);
assertTrue(newlib.addItem(nextItem));
assertEquals(2, nextItem.getCopyNumber());
assertEquals(1, newItem.getCopyNumber());
在assertEquals(2)处,我无法理解其实际值为3 由于只有两个对象,因此,该数字应为2作为其加数秒,我认为问题出在while循环中,但我找不到它,
首先输入反对-大小为零,因此复制1 输入的第二个对象-与对象1比较,并使copy>第一个对象
我已经调试了这一点,据我所知,while循环的结尾copyNum是== 2,所以为什么说实际值是3而while的结尾应该是任何类型的结尾修改复制循环,
如果遇到返回true的结果,我根本不希望for循环运行 说它发现大小为零,只需将copy设置为1然后添加,然后在此处停止, 在运行for循环时,如果它找到匹配的结果,我只是希望它停止,否则,如果它没有找到具有该调用号的第一个对象,则将其设置为复制一个 但是,如果确实找到匹配结果,则有多个具有该调用编号的对象,并将副本编号的值设置为第一个对象之后的下一个编号
删除while循环,我得到0作为项目的默认副本号 用copyNum ++添加while循环,我得到3
如果我在copynum之前添加一个简单的-1到copynum之前将其设置为循环外,我只会得到1,而在while循环之前将libraryNum设置为1