Julo Opublikowano 1 Kwietnia 2008 Zgłoś Opublikowano 1 Kwietnia 2008 (edytowane) 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 1 Kwietnia 2008 przez Crack Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 3 Kwietnia 2008 Zgłoś Opublikowano 3 Kwietnia 2008 słyszał kiedyś o debugerze i pracy krokowej? :wink: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Julo Opublikowano 3 Kwietnia 2008 Zgłoś Opublikowano 3 Kwietnia 2008 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) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Julo Opublikowano 3 Kwietnia 2008 Zgłoś Opublikowano 3 Kwietnia 2008 Ok, w klasie Bookshelf nie wiem jak to zrobić, aby wywołując zmienną Book b w klasie TestBook otrzymać pożądany komunikat? Ktoś pomoże? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 5 Kwietnia 2008 Zgłoś Opublikowano 5 Kwietnia 2008 a co ma kompilowanie wspólnego z debugerem.. Twój problem występuje w czasie działania aplikacji a nie w czasie kompilowania. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Julo Opublikowano 5 Kwietnia 2008 Zgłoś Opublikowano 5 Kwietnia 2008 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... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Prog Opublikowano 6 Kwietnia 2008 Zgłoś Opublikowano 6 Kwietnia 2008 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 7 Kwietnia 2008 Zgłoś Opublikowano 7 Kwietnia 2008 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 :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Julo Opublikowano 10 Kwietnia 2008 Zgłoś Opublikowano 10 Kwietnia 2008 (edytowane) 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 10 Kwietnia 2008 przez Crack Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 12 Kwietnia 2008 Zgłoś Opublikowano 12 Kwietnia 2008 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
thuGG Opublikowano 30 Kwietnia 2008 Zgłoś Opublikowano 30 Kwietnia 2008 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 30 Kwietnia 2008 Zgłoś Opublikowano 30 Kwietnia 2008 tylko nie rozpłacz się z tego powodu, że nie lubię javy :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
thuGG Opublikowano 1 Maja 2008 Zgłoś Opublikowano 1 Maja 2008 Nie mam zamiaru, każdy lubi to co chce, ale chyba przyznasz, że oceniane języka na podstawie jakiegoś IDE jest trochę niedorzeczne. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 4 Maja 2008 Zgłoś Opublikowano 4 Maja 2008 całkiem być może. Potraktowałem to jako śmiechowy argument przecie :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...