Skocz do zawartości
Julo

[java] Program Biblioteka

Rekomendowane odpowiedzi

JAVA

Witam,

jako że stosunkowo niedawno zacząłem przygodę z Java, postanowiłem założyć topic, w którym co jakiś czas będę mógł się podpytać o kilka rzeczy.

 

1szy problem: piszę program imitujący bibliotekę z książkami. Jest klasa Book, jest klasa Bookshelf.

Polecenie do zadania jest następujące:

 

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:

{tu zawartość klasy TestBook}

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

 

Oto zawartość klasy TestBook:

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());	  	}  }}

Napisane przeze mnie pozostałe klasy, Book:

public class Book{	private String autor=null;	private String tytul=null;	private Bookshelf gdzie=null;		public Book(String autor, String tytul)	{		this.autor=autor;		this.tytul=tytul;	}	public String getAutor()	{		return autor;	}	public String getTytul()	{		return tytul;	}	public Bookshelf getGdzie()	{		return gdzie;	}	public void setGdzie(Bookshelf gdzie)	{		this.gdzie=gdzie;	}	public String toString()	{		String ksiazka=""+autor+" "+tytul+" ";		return ksiazka;	}}

I zawartość klasy Bookshelf:

class Bookshelf {	private int licznik=0;	private Book ksiazki[]=null;	private String dzial="beznazwy";		public Bookshelf(String dzial, int pojemnosc)	{		this.dzial=dzial;		ksiazki=new Book[pojemnosc];	}		public int size()	{		return ksiazki.length;	}		public void setDzial(String dzial)	{		this.dzial=dzial;	}		public String getDzial()	{		return dzial;	}		public boolean zawiera(Book b)	{		for (int i=0; i<ksiazki.length; i++)			if (ksiazki[i]==b) return true;				return false;	}		public void insert(Book b) throws Exception	{		if (zawiera(b)) throw new Exception("jest juz na polce");		for (int i=0; i<ksiazki.length; i++)			if (ksiazki[i]==null)			{				ksiazki[i]=b;				b.setGdzie(this);				licznik++;				return;			}		//throw new Exception("brak miejsca");	}		public void remove(Book b) throws Exception	{		for (int i=0; i<ksiazki.length; i++)			if (ksiazki[i]==b)			{				ksiazki[i]=null;				b.setGdzie(null);				licznik--;				return;			}		throw new Exception("nie jest na tej polce");	}		public Book[] getBooks()	{		return ksiazki;		}	public String toString()	{		String napis="Polka "+dzial+'\n';		for (int i=0; i<ksiazki.length; i++)			if (ksiazki[i]!=null) napis+=(""+ksiazki[i]+'\n');		return napis;	}}

Na chwilę obecną efekt działania programu jest następujący:

Polka P1A bbb B ccc C ddd A bbb B ccc C ddd nullnullnullnullnullnullnullnullnie jest na tej polce

Nulle są efektem szukania w którymś momencie elementów poza tablicą ?

Komunikaty nie są jeszcze zrobione, chcę się nimi zająć w zasadzie na końcu.

Otrzymałem podpowiedź, że prościej byłoby gdybym użył Vector'a, ponieważ ma zaimplementowane metody, ale pomyślałem że skoro już tyle się napisałem to mógłbym to zrobić tym sposobem.

Chciałbym Was prosić o jakieś wskazówki.

Dlaczego po pierwszym wymienieniu półek i książek nie następuje wyświetlenie odpowiedniego komunikatu, tj "Nie mogę wstawić książki na półkę (Półka P2) - jest już na półce: Półka P1" pomimo metody boolean zawiera(Book b) w klasie Book?

 

Jeszcze jedno: czy w JCreatorze (LE) jest możliwość, aby przy uruchomieniu automatycznie ładowała się ostatnia workspace ?

Edytowane przez Crack

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

słyszał kiedyś o debugerze i pracy krokowej? :wink:

Hmm, no tak, ale jak go wykorzystać w momencie gdy program się kompiluje? ;]

W tym problem, że mi się wydaje, że to powinno działać (na moim poziomie znajomości javy :D)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W takim razie nie wiem jak działa debugger. Możliwe, żeby w JCreatorze nie bylo debugger'a? Nie widze go ani nic co mogłoby nim być. W eclipsie i netbeansie była po prostu opcja debug jeśli dobrze pamiętam...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W takim razie nie wiem jak działa debugger. Możliwe, żeby w JCreatorze nie bylo debugger'a? Nie widze go ani nic co mogłoby nim być. W eclipsie i netbeansie była po prostu opcja debug jeśli dobrze pamiętam...

Raczej będzie. Debugowanie to jedna z najważniejszych elementów pracy nad programem. Jeżeli jeszcze nie potrafisz korzystać z debuggera to najlepiej zaraz się tego naucz, bo bez niego długo nie pociągniesz. Może przy programie z jedną, dwoma klasami jakoś wpadniesz na rozwiązanie problemu, ale przy większym projekcie będziesz miał kłopoty.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

być może mylisz kompilowanie w wersji DEBUG i RELEASE, nie wiem jak tam z javą to wygląda, bo nie piszę w tym języku. Natomiast nie ma takiej możliwości, żeby do tak popularnego języka nie było debugera :)

 

W skrócie.. debuger umożliwia np wyłapywanie wyjątków, a przede wszystkim pracę krokowa programu. Ustawiasz sobie w kodzie tzw breakpoint, a program po dojściu do tej linii kodu zostaje zatrzymany i możesz sobie linijka po linijce wykonywać program, śledząc jego przebieg (czy Twoje algorytmy działają tak jak zaplanowałeś) oraz podglądając wartości zmiennych (obiektów etc).

 

Bez tego nie da się pisać programów. Jak mówi Prog, jest to najważniejsze narzędzie pracy programisty, to jest taki stetoskop jak ma lekarz do słuchania serca ino 512x bardziej rozbudowany :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki za 'pomoc' - w końcu poradziłem sobie z tym programem, wszystko działa jak należy. W metodzie getBooks użyłem ArrayList'a i wrzucałem do niego wszystko co nie było null a w metodzie remove danego indeksu w ksiazki[] nie zamieniałem na null'a.

 

Ależ jestem szczęśliwy :]

 

Btw. w JCreatorze LE nie ma debugger'a :/

Edytowane przez Crack

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

rzeczywiście nie ma... http://www.jcreator.com/features.htm

 

To jakaś porażka z tą javą... MS dał wersję darmową VS Express ale tam jest przynajmniej porządny debuger, chyba identyczny w funkcjonalności jak w wersji professional. No to kolejny argument za tym, czemu nie lubię javy :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak to kolejny argument? Co ma JCreator do Javy? Najpopularniejszym środowiskiem dla Javy jest Eclipse, jest jeszcze NetBeans, IntelliJ IDEA czy JDeveloper, zgadnij co? Wszystkie mają debugger, nadal taka porażka z tą Java? Równie dobrze mógłbym napisać, że C++ to jakaś porażka bo nam w szkole kazali pisać w VI.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...