Treść zadania:
Mamy półki. Każda półka ma swoją nazwę i rozmiar (liczbę książek, które może pomieścić)
Mamy książki. Opis książki to: autor, tytuł.
Inicjalnie każda książka jest poza jakąkolwiek półką.
Można ją wstawić na wybraną półkę, albo zdjąć z półki, na której się znajduje.
Stworzyć klasy Book i Bookshelf, opisujące książki i półki w taki sposób, aby następujący program:
public class TestBook {
public static void main(String[] args) {
Book b1 = new Book("A", "bbb");
Book b2 = new Book("B", "ccc");
Book b3 = new Book("C", "ddd");
Bookshelf bs1 = new Bookshelf("P1", 10);
Bookshelf bs2 = new Bookshelf("P2", 2);
try {
bs1.insert(b1);
bs1.insert(b2);
bs1.insert(b3);
System.out.println(bs1);
for (Book b : bs1.getBooks()) System.out.println(b);
bs2.insert(b1);
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
try {
for (Book b : bs1.getBooks()) bs1.remove(b);
bs2.insert(b1);
bs2.insert(b2);
System.out.println(bs2);
for (Book b : bs2.getBooks()) System.out.println(b);
bs2.insert(b3);
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
try {
bs2.remove(b3);
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
}
}
wyprowadził następujące wyniki:
Półka P1
A bbb
B ccc
C ddd
Nie mogę wstawić książki na półkę (Półka P2) - jest już na półce: Półka P1
Półka P2
A bbb
B ccc
Nie mogę wstawić książki na półkę (Półka P2) - brak miejsca
Nie mogę zdjąć książki z półki (Półka P2) - nie jest na tej półce
Mój kod:
import java.util.ArrayList;
public class TestBook {
public static void main(String[] args) {
Book b1 = new Book("A", "bbb");
Book b2 = new Book("B", "ccc");
Book b3 = new Book("C", "ddd");
Bookshelf bs1 = new Bookshelf("P1", 10);
Bookshelf bs2 = new Bookshelf("P2", 2);
try {
bs1.insert(b1);
bs1.insert(b2);
bs1.insert(b3);
System.out.println(bs1);
for (Book b : bs1.getBooks()) System.out.println(b);
bs2.insert(b1);
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
try {
for (Book b : bs1.getBooks()) bs1.remove(b);
bs2.insert(b1);
bs2.insert(b2);
System.out.println(bs2);
for (Book b : bs2.getBooks()) System.out.println(b);
bs2.insert(b3);
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
try {
bs2.remove(b3);
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
}
}
class Book {
private String autor, tytul;
public String polka = null; // Inicjalnie każda książka jest poza jakąkolwiek półką.
public Book(String a, String t){
autor = a;
tytul = t;
}
public String toString(){
String daneKsiazki=(autor+" "+tytul);
return daneKsiazki;
}
}
class Bookshelf {
private String nazwaPolki;
private int iloscMiejsca;
ArrayList<Book> Books = new ArrayList<Book>();
Bookshelf(String n, int ilosc){
nazwaPolki = n;
iloscMiejsca = ilosc;
}
public ArrayList<Book> getBooks(){
return Books;
}
public void insert(Book b) throws Exception{
if(b.polka != null){
throw new Exception("Nie moge wstawic ksiazki na polke (Polka" + nazwaPolki + ") - jest już na polce: " + b.polka);
}
else {
if(Books.size()>=iloscMiejsca){
throw new Exception("Nie moge wstawic ksiazki na polke (Polka " + nazwaPolki + ") - brak miejsca");
}
Books.add(b);
}
}
public void remove(Book b) throws Exception{
boolean mozna = Books.remove(b);
if(mozna==true){b.polka=null;}
else{
throw new Exception("Nie moge zdjac ksiazki z polki (Polka " + nazwaPolki + ") - nie jest na tej polce");
}
}
public String toString(){
return "Polka " + nazwaPolki;
}
}
Wynik mojego programu:
Półka P1
A bbb
B ccc
C ddd
null
Nie mogę zdjąć książki z półki (Półka P2) - nie jest na tej półce
Mam takie pytanie: dlaczego w wyniku programu pojawia się null i nie ma drugiej półki (P2)?
Przyznam, że korzystałam ze wskazówek na tym forum, m.in. by skorzystać tutaj z ArrayList.
Widziałam też, że polecano użycie Iteratora i metody hasNext(), ale czy bez tego zadanie też może być wykonane poprawnie? Czy lepiej byłoby go użyć?