Java, program dodający i wyjmujący książki z półki

0

Cześć, to mój pierwszy post, więc nie bądźcie surowi;)
Piszę program, który ma dodawać i wyjmować książki z półki. Coś jest nie tak, jak próbuję wydrukować książki na półce nic się nie dzieje. Możecie mi pomóc? Co robię źle?
Klasa Bookshelf:

 

public class Bookshelf {
	String name;
	int size;
	Books[] books;
	int freeSpace;
	
	public Bookshelf(String name, int size){
		books=new Books[size];
		this.name=name;
		freeSpace=size;
	}

	public void put(Books b){
	if (freeSpace>0){
	freeSpace-=1;
	b.setBookshelf(this);
	for(int i=0;i<size;i++){
		 if (books[i]!=null) continue;
			books[i]=b;
		}
	}
	else
	{System.out.println("No free space.");
	}
	
	}
	
	
	public void take(Books b){
		freeSpace+=1;
		b.setBookshelf(null);
		for(int i=0;i<size;i++){
			 if (books[i].equals(b)==false) continue;
				books[i]=null;
			}
	}
	
	public void booksOnTheShelf(){
		System.out.println(name + " shelf: ");
		for(int i=0;i<size;i++){
			System.out.println(books[i].getName());
				
			}
		}
	}

Klasa Book:

 
public class Books {
	
	String author;
	String title;
	Bookshelf bookshelf;
	
public Books(String author, String title, Bookshelf bookshelf){
	this.author=author;
	this.title=title;
	this.bookshelf=bookshelf;
}
	public void setBookshelf(Bookshelf b) {
	    bookshelf = b;
}
	public String getName(){
		return title;
	}
	
}

Klasa Main:

import java.util.Scanner;

public class Main2 {

	public static void main(String[] args) {
Books[] books={new Books("Tolkien", "Lord of the Rings",null), new Books("Martin", "Game of Thrones",null), new Books("Grzędowicz", "Pan lodowego ogrodu",null)};
Bookshelf[] bookshelf={new Bookshelf("First",2), new Bookshelf("Second",2)};
int decision=0;
Scanner sc=new Scanner(System.in);
do{
System.out.println("What you want to do? 1 - Insert a book, 2 - Take a book, 3 - What is on the shelf?, 4 - Exit");

decision=sc.nextInt();
sc.nextLine();
switch(decision){
case 1:
	System.out.println("Which book do you want to insert? Choose a number.");
	for(int i=0;i<books.length;i++){
	System.out.println(i+" "+books[i].getName());
	}
	int decision2=sc.nextInt();
	System.out.println("Which shelf?");
	int decision3=sc.nextInt();
	bookshelf[decision3-1].put(books[decision2]);
	
	break;
case 2:
	System.out.println("Which book do you want to take? Choose a number.");
	for(int i=0;i<books.length;i++){
		System.out.println(i+books[i].getName());
		}
	int decision4=sc.nextInt();
	books[decision4].bookshelf.take(books[decision4]);
		
	break;
case 3:
	System.out.println("Which shelf?");
	int decyzja5=sc.nextInt();
	sc.nextLine();
	bookshelf[decyzja5-1].booksOnTheShelf();
	
	break;
case 4:
	break;
}
}
while(decision!=4);
sc.close();	
}
	}
0

Popraw konstruktor klasy Bookshelf

    public Bookshelf(String name, int size){
        books = new Books[size];
        this.name = name;
        this.size = size;
        freeSpace = size;
    }

Metody put, take i booksOnTheShelf też są błędne (np. put wstawia książkę wielokrotnie).
Metoda put powinna wyglądać raczej tak:

            for(int i=0;i<size;i++)
            {
                if (books[i] == null)
                {
                    books[i] = b;
                    break;
                }
            }

P.S. Nie zamykaj Scannera, który czyta z klawiatury.

0
import java.util.Scanner;
public class Test
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        sc.close();
        sc = new Scanner(System.in);
        s = sc.nextLine();        
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1