无法弄清楚为什么这里应该是3,而应该是2

时间:2020-09-26 17:40:50

标签: java

方法:

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

0 个答案:

没有答案