Розв"язок - під катом.
Спершу я створила 2 масиви List ListName= new ArrayList(); . Працювала з ними, але виникла проблема прив"язки користувача до книги, так як метод remove "Видаляє перше входження необхідного елемента зі списку, якщо цей елемент є в наявності. Якщо в списку нема цього елементу, все залишається незмінним"(взято з документації Oracle)
Як другий варіант - створила два об"єкти: user та book в окремому внутрішньому класі. Є ідея перевизначити метод equals та таким чином реалізувати прив"язку. Реалізація нижче.
Отже, поїхали:
1.Власне, сама бібліотеки:
package library;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Lib {
String book, user;
List<String> listBooks = new ArrayList<String>(); // here are only books
List<String> listUsers = new ArrayList<String>(); // here are only users
List listUsers2 = new ArrayList<String>();
List listBooks2 = new ArrayList<String>();
List<Card> forch = new ArrayList<Card>(); // book and user
List<String> inRent = new ArrayList<String>();
List<String> inRent2 = new ArrayList<String>();
// public void checkCard(String ab, String bc) {
// Card forcheck = new Card(book, user);
// }
// register book in a listBooks - add in main
public void regBooks(String book) {
listBooks.add(book);
}
// register user in a listUsers - add in main
public void regUser(String user) {
listUsers.add(user);
}
// return list listBooks - only show, print - in main
public List listOfBooks() {
listBooks2 = Collections.unmodifiableList((List) listBooks);
return listBooks2;
}
// return list listUsers - only show, print - in main
public List listOfUsers() {
listUsers2 = Collections.unmodifiableList(listUsers);
return listUsers2;
}
// remove book from a list of cards
public void getBook(String a, String b) {
if (!listUsers.contains(b))
System.out.println("Register, please!");
else if (!listBooks.contains(a))
System.out.println("Choose another book!");
else {
listBooks.remove(a); // but user is still in system, one user
inRent.add(a);
Card c = new Card(a, b);
forch.add(c);
}
}
// add book to a list of cards
public void returnBooks(String a, String b) {
if (!listUsers.contains(b))
System.out.println("Register, please!");
else if (!inRent.contains(a))
System.out.println("This book is from another library!");
else {
listBooks.add(a); // but user is still in system
inRent.remove(a);
System.out.println(inRent);
Card d = new Card(a, b);
// need an @override, because equals (in remove) compares by links, not by data forch.remove(d);
System.out.println(forch);
}
}
public List rentBooks() {
inRent2 = Collections.unmodifiableList(inRent);
// show in main a list of rent books
return inRent2;
}
}
2. Щоб прив"язати видану книгу до користувача - створений окремий клас.
package library;
import java.util.ArrayList;
import java.util.List;
public class Card {
private String book_name;
private String user_name;
public Card(String book_name2, String user_name2) {
this.book_name = book_name2;
this.user_name = user_name2;
}
@Override
public String toString() { // Say to the Card object, that we want String!
return book_name + " - " + user_name;
}
@Override
// of equals method
public boolean equals(Object localname) {
// check does the localname is in the Card class
if (localname.getClass() == Card.class)
// (об"єкт в якого виконується метод equals.поле, що порівнюється.equals(((явне приведення типу ) об"єкта).поле, що порівнюється))
return ((this.book_name.equals(((Card) localname).book_name)) && ((this.user_name
.equals(((Card) localname).user_name))));
return false;
}
}
3. Тестер:
package library;
public class Main {
public static void main(String args[]) {
Lib lib = new Lib();
lib.regBooks("Hobbit");
lib.regBooks("Java");
lib.regUser("Ivanov");
lib.regUser("Petrov");
System.out.println(lib.listOfBooks());
System.out.println(lib.listOfUsers());
lib.getBook("Java", "Petrov");
lib.getBook("Hobbit", "Ivanov");
lib.returnBooks("Java", "Petrov");
System.out.println(lib.rentBooks());
}
}
[Hobbit, Java]
[Ivanov, Petrov]
[Hobbit]
[Hobbit - Ivanov]
[Hobbit]
Сподіваюсь, задача виявиться для вас корисною. Якщо є власні варіанти розв"язку - пропонйте в коментарях.
Немає коментарів:
Дописати коментар