我创建了一个BookCollection类,其中包含Books(我制作的另一个类)。我正在尝试将两个BookCollections合并在一起,以使其成为collection3。如果他们有重复的书籍,我会添加其库存并以最低的价格出售。如果不是重复的书,则将这本书添加到collection3。我知道如何处理重复的书籍,但是我的循环不适用于独特的书籍。这是我的代码,我想您可以了解我的目标而无需查看所有其他相关代码:
public static BookCollection merge(BookCollection collection1,
BookCollection collection2){
//Make sure the collection is big enough
int collection1Size = collection1.getSize();
int collection2Size = collection2.getSize();
int collection3Size = collection1Size + collection2Size;
BookCollection collection3 = new BookCollection(collection3Size);
//loop through collection one and add it to collection 3
for (int i = 0; i < collection1Size; i++){
Book collection1Book = new Book(collection1.objectAt(i));
collection3.addBook(collection1Book);
}
//loop through collection two and add certain books to collection 3
for (int q = 0; q < collection3Size; q++){
if (collection3.objectAt(q) != null){
Book collection3Book = new Book(collection3.objectAt(q));
for (int j = 0; j < collection2Size; j++){
if (collection2.objectAt(j) != null){
Book collection2Book = new Book(collection2.objectAt(j));
// if the book at collection 2 is the same as a book already in collection 3
if (collection2Book.getIsbn().equals(collection3Book.getIsbn())){
String BookISBN = collection2Book.getIsbn();
//Handles the price of the book
double price1 = collection2Book.getPrice();
double price2 = collection3Book.getPrice();
if (price1 > price2){
collection3.changePrice(BookISBN, price2);
}
if (price1 < price2){
collection3.changePrice(BookISBN, price1);
}
// Handles the stock of the book
int stock1 = collection2Book.getStock();
collection3.changeStock(BookISBN, stock1);
}
// adds the rest of the new books from collection 2 to collection
if (!(collection2Book.getIsbn().equals(collection3Book.getIsbn()))){
if (collection3.getSize() < collection3Size){
collection3.addBook(collection2Book);
}
}
}
}
}
}
return collection3;
}
首先,我将所有书籍从collection1添加到collection3。然后,我创建循环以检查collection2和collection3中是否有重复的书籍。
伪代码很好,我只是不知道如何让我的程序看到collection2中的一本书是唯一的。谢谢!
最佳答案
这是您的代码采用的方法:
for each B3 in collection 3
for each B2 in collection 2
if B2 and B3 are the same book, then make some changes to the book
if B2 and B3 are not the same book, then add it
end
end
这不能满足您的要求。为了确定集合2中的一本书是否唯一,您必须首先将该书与所有现有书进行比较。只有遍历了第3册中的所有书籍之后,您才知道是否应该将其添加为新书籍。您的代码无法执行此操作-因为“不一样的书”逻辑发生得太早了。
正确的方法是
for each B2 in collection 2
for each B3 in collection 3
if B2 and B3 are the same book, then make some changes to the book--and make a note that B2 has been found
end
if B2 has not been found then add it
end
注意,最后的检查必须在内部循环之外。
关于java - 如果书还没有,我该如何将它添加到我的 Collection 中? (java),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35547133/