Я пытаюсь объединить два массива объектов типа «BookCollection» в один массив BookCollection. Я начинаю с создания нового пустого BookCollection с размером, эквивалентным сумме двух других BookCollections.Слияние двух массивов объектов, Java
код работает с первым "collection1":
public static BookCollection merge(BookCollection collection1, BookCollection collection2) {
BookCollection mergedCollection = new BookCollection(collection1.getSize() + collection2.getSize());
int collectionSize = 0;
// Add books from collection1 to mergedCollection.
// This loop works, 2/21/15, 3:30
for (int c1 = 0; c1 < collection1.getSize(); c1++) {
Book bookCopy = new Book(collection1.objectAt(c1));
mergedCollection.addBook(bookCopy);
collectionSize += 1;
}
Теперь я бегу в неприятности. Мое намерение состоит в том, чтобы пропустить следующий BookCollection (collection2), и если книга существует, просто обновите цену и запас. Если этого не существует, я хочу добавить книгу в BookCollection.
// Loop through collection2
for (int c2 = 0; c2 < collection2.getSize(); c2++) {
// Create a copy of the current book.
Book bookCopy = new Book(collection2.objectAt(c2));
String copyIsbn = bookCopy.getIsbn();
// Loop through mergedCollection
for (int m = 0; m < mergedCollection.getSize(); m++) {
Book mergedBook = new Book(mergedCollection.objectAt(m));
String mergedIsbn = mergedBook.getIsbn();
// If the current book is already in mergedCollection.
// NOT GETTING THROUGH THE LOGIC HERE.
if (copyIsbn.equals(mergedIsbn)) {
// Variables to update values in mergedCollections
double price = bookCopy.getPrice();
int stock = bookCopy.getStock();
// If the mergedBook's price is larger than the collection's, change it.
if (mergedBook.getPrice() > price) {
mergedBook.setPrice(price);
}
// Update stock in mergedCollection
mergedCollection.changeStock(mergedBook.getIsbn(), bookCopy.getStock() + mergedBook.getStock());
// If the current book is not in mergedCollection.
} else {
mergedCollection.addBook(bookCopy);
collectionSize += 1;
}
}
}
return mergedCollection;
}
Я попытался прокомментировать это хорошо, и есть комментарий заглавных букв, где я считаю, что проблема есть. Теперь я думаю, что это уместно знать, что addBook(), используемый здесь:
mergedCollection.addBook(bookCopy);
в основном говорит, если я разобрать через массив, и получить ненулевой возврат, то я могу добавить книгу.
Теперь, когда я запускаю этот код, компилятор сообщает мне, что книга, которую я пытаюсь добавить, существует и останавливается. Так что я знаю, что а) addBook это найти ненулевое значение, и б) это немного логики:
if (copyIsbn.equals(mergedIsbn))
не работает, как я хочу, чтобы это.
Почему моя программа не улавливает объекты книги, которые происходят дважды и обновляют информацию?
Потому что вы хотите [Установить] (http: //java.sun.com/javase/6/docs/api/java/util/Set.html), в частности [TreeSet] (http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html) 'addAll. – hd1
Мне не нужен набор, поскольку я хотел бы узнать, почему этот метод не работает. Спасибо, что ознакомили меня с этой идеей, и я попытаюсь реализовать ее с этим, когда выясню, почему мой подход не работает. – camerow
* «не работает, как я хочу» * Это не полезное описание проблемы. Что происходит? – Radiodef