我创建了一个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/

10-10 21:47
查看更多