ALLisCHAOS Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 hi guys!!! λοιπον εχω ενα θεματακι στη java...επειδη ο κωδικας ειναι πολυ μεγαλος και θα χαθουμε αν τον γραψω εδω...θα προσπαθησω να σας δωσω να καταλαβετε που ακριβως χανομαι...εχω μια κλαση την book και 2 ακομα : την science και την dictionary οι οποιες κληρονομουν την book... οι δυο κλασεις εχουν σαν εξτρα μεταβλητη τα αντιτυπα (δν τα κληρονομουν απο τη book) στη Main τωρα δημιουργω εναν πινακα τυπου Book... οταν γινεται μια πωληση ενος βιβλιου καλειται μια μεθοδος στην οποια στελνω σαν παραμετρο τον πινακα book ... θελω ομως οταν γινεται η πωληση να μειωνεται κ τα αντιτυπα κατα 1 απο το συγκεκριμενο βιβλιο... ομως τα πως μπορω να στειλω καπως τα αντιτυπα κ να τα μειωσω αφου δν υπαρχουν στη book? ελπιζω να καταλαβατε...αλλιως κανω ενα παραδιγμα σ κωδικα κ στελνω...ευχαριστω..
albNik Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 Ο πιο γρηγορος τρόπος ειναι μια static μεταβλητη στην Book που να μετράει τα Book instances. Μπορει να έχει αρχική τιμή πχ 100 και να μειώνεται κατα 1 σε κάθε κληση Sell καποιου αντικείμενου Βοοκ. EDIT Λαθος , εσυ θες για καθε βιβλίο το δικό του μετρητή
MitsakosGR Δημοσ. 7 Ιουνίου 2013 Δημοσ. 7 Ιουνίου 2013 Φτιάξε μία abstract method στην book η οποία στην υλοποίησή της στις άλλες κλάσεις να μειώνει τα αντίτυπα. Αν μία υποκλάση δεν έχει αριθμό αντιτύπων απλά θα την υλοποιεί κενή. 1
ALLisCHAOS Δημοσ. 8 Ιουνίου 2013 Μέλος Δημοσ. 8 Ιουνίου 2013 // η κλαση book class Book { private String eidos; private String titlos; private String Onoma; private String ISBN; private String Ek_Oikos; private int ar_sel; private int etos; private long timh; Book(String eidos,String titlos,String Onoma,String ISBN,String Ek_Oikos,int ar_sel,int etos,long timh){ this.eidos=eidos; this.titlos=titlos; this.Onoma=Onoma; this.ISBN=ISBN; this.Ek_Oikos=Ek_Oikos; this.ar_sel=ar_sel; this.etos=etos; this.timh=timh; } } // η κλαση science που κληρονομει τη Book και κανει Implements την ProsPolisi class Science extends Book implements ProsPolisi { private String perioxh; private int antitipa; Science(String eidos,String titlos,String Onoma,String ISBN,String Ek_Oikos,int ar_sel,int etos,long timh,String perioxh,int antitipa){ super(eidos,titlos,Onoma,ISBN,Ek_Oikos,ar_sel,etos,timh); this.perioxh=perioxh; this.antitipa=antitipa;} public int getNumbersOfCopies(){return antitipa;} public void setNumbersOfCopies(int copies){ antitipa=copies;} } // η κλαση dictionary που κληρονομει τη Book και κανει Implements την ProsPolisi class Dictionary extends Book implements ProsPolisi { private int limata; private int antitipa; Dictionary(String eidos,String titlos,String Onoma,String ISBN,String Ek_Oikos,int ar_sel,int etos,long timh,int limata,int antitipa){ super(eidos,titlos,Onoma,ISBN,Ek_Oikos,ar_sel,etos,timh); this.limata=limata; this.antitipa=antitipa;} public int getLimata(){ return limata;} public void setLimata(int limata){ this.limata=limata;} public String toString(){ return (limata +" " + super.toString() +" "+ antitipa); } public int getNumbersOfCopies(){return antitipa;} public void setNumbersOfCopies(int copies){ antitipa=copies;} } // η ProsPolisi public interface ProsPolisi{ int getNumbersOfCopies(); void setNumbersOfCopies(int copies); } //η Daysales class DaySales { static Book Sales[]=new Book[10]; static int Antitipa[]=new int[10]; public static void kataxwrhsh(Book pinakas[],int m){ if(m<11){ if(Sales[m]!=null){ Antitipa[m]++; } else{Sales[m]= pinakas[m]; Antitipa[m]=1; } } } } λοιπον αυτος ειναι ο κωδικας (σχεδον) απλα λειπουν οι get και οι set μεθοδοι απο την book... το θεμα τωρα ειναι πως θα μπορω οταν καλλω την daysales να αφερειται ενα αντιτυπο...ελπιζω να βοηθεισα καπως
Re4cTiV3 Δημοσ. 8 Ιουνίου 2013 Δημοσ. 8 Ιουνίου 2013 Γιατί τα αντίτυπα να μην είναι στην κλάση Book;; καιεχωντας μια μέθοδο να τα μειώνεις;; 1
ZAKKWYLDE Δημοσ. 8 Ιουνίου 2013 Δημοσ. 8 Ιουνίου 2013 Γιατί τα αντίτυπα να μην είναι στην κλάση Book;; καιεχωντας μια μέθοδο να τα μειώνεις;; Αυτό, και μέσα στη DaySales όπου υποθέτω το Book array είναι η "παραγγελία" θα κάνεις ένα loop και θα κάνεις: pinakas[i].antitipa--; Είναι λάθος σχεδιασμός να έχεις τα αντίτυπα ως μεταβλητή των subclass, αφού είναι μια γενική έννοια. Αλλά και έτσι όπως είναι, και Βοοκ[] να έχεις μπορείς να κάνεις pinakas = new Science(); ή pinakas = new Dictionary(); Αν και είναι χαζός λόγος να χρησιμοποιήσεις polymorphism σε αυτή τη περίπτωση.
ALLisCHAOS Δημοσ. 8 Ιουνίου 2013 Μέλος Δημοσ. 8 Ιουνίου 2013 sorry δεν τν εξηγησα εγω καλα μαλλν την ολη ασκηση....τα αντιτυπα δεν τα εχω ως γενικη εννοια στην book γιατι τα βιβλια μπορει να ειναι ή τυπου scince ή τυπου dictionary τα οποια είναι κ για πωληση... ο αλλος τυπος ειναι μονο για αναγνωση οποτε και δν εχει αντιτυπα...αρα μαλλν θα χρειαστω τον πολυμορφισμο...θα το κοιταξω αυτο που ειπε ο ZAKKWYLDE και επιστρεφω...ευχαριστω παντως για το ενδιαφερον
Re4cTiV3 Δημοσ. 8 Ιουνίου 2013 Δημοσ. 8 Ιουνίου 2013 Για τους λόγους που είπες πρέπει τα αντίτυπα να είναι στο book
tr3quart1sta Δημοσ. 8 Ιουνίου 2013 Δημοσ. 8 Ιουνίου 2013 εγω θα τοκανα καπως ετσι public class BookShop { public static void main(String[] args) { BookStore bs = new BookStore(); //System.out.println(bs.books.length); bs.addBook(new ScienceBook("George R.R. Martin", "ASOIAF", 123, "Westeros")); bs.printBooks(); } } public class BookStore { public BookSet[] books; private int index; private final int BOOKSTORE_SIZE = 10; public BookStore() { this.books = new BookSet[BOOKSTORE_SIZE]; index = 0; } public void addBook(Book newBook){ if(!isFull()){ if(bookSetExists(newBook.getISBN())){ books[findBookSetIndex(newBook.getISBN())].incNOC(); } else { books[index++] = new BookSet(newBook, 1); } } else { System.out.println("Bookstore is full!"); } } public void removeBook(Book book){ if(!isEmpty()){ if(!bookSetExists(book.getISBN())){ System.out.println("BookSet doesn't exist!"); } else { if(books[findBookSetIndex(book.getISBN())].onlyOneCopy()){ index--; } else { books[findBookSetIndex(book.getISBN())].decNOC(); } } } else { System.out.println("BookStore is empty!"); } } public void printBooks(){ if(!isEmpty()){ for(int i = 0; i < index; i++){ System.out.println(books[i].getBook().toString()); } } else { System.out.println("BookStore is empty!"); } } public boolean bookSetExists(int ISBN){ return(findBookSetIndex(ISBN) != -1); } public boolean isFull(){ return index == books.length; } public boolean isEmpty(){ return index == 0; } public int findBookSetIndex(int ISBN){ for(int i = 0; i<books.length - 1; i++){ if(books[i] != null && books[i].getBook().getISBN() == ISBN){ return i; } } return -1; } } public class BookSet { private Book book; private int nOfCopies; public BookSet(Book book, int nOfCopies) { this.book = book; this.nOfCopies = nOfCopies; } public Book getBook() { return book; } public int getnOfCopies() { return nOfCopies; } public void incNOC(){ //increase number of copies nOfCopies++; } public void decNOC(){ // decrease number of copies if(nOfCopies > 0){ nOfCopies--; } } public boolean onlyOneCopy(){ return nOfCopies == 1; } } public abstract class Book { private String author; private String title; private int ISBN; public Book(String author, String title, int ISBN) { this.author = author; this.title = title; this.ISBN = ISBN; } public String getAuthor() { return author; } public String getTitle() { return title; } public int getISBN() { return ISBN; } } public class DictionaryBook extends Book { private String eidos; public DictionaryBook(String author, String title, int ISBN, String eidos) { super(author, title, ISBN); this.eidos = eidos; } public String getEidos() { return eidos; } @Override public String toString() { return "DictionaryBook [eidos=" + eidos + ", getEidos()=" + getEidos() + ", getAuthor()=" + getAuthor() + ", getTitle()=" + getTitle() + ", getISBN()=" + getISBN() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]"; } } public class ScienceBook extends Book { private String perioxh; public ScienceBook(String author, String title, int ISBN, String perioxh) { super(author, title, ISBN); this.perioxh = perioxh; } public String getPerioxh() { return perioxh; } @Override public String toString() { return "ScienceBook [perioxh=" + perioxh + ", getPerioxh()=" + getPerioxh() + ", getAuthor()=" + getAuthor() + ", getTitle()=" + getTitle() + ", getISBN()=" + getISBN() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]"; } }
ZAKKWYLDE Δημοσ. 8 Ιουνίου 2013 Δημοσ. 8 Ιουνίου 2013 sorry δεν τν εξηγησα εγω καλα μαλλν την ολη ασκηση....τα αντιτυπα δεν τα εχω ως γενικη εννοια στην book γιατι τα βιβλια μπορει να ειναι ή τυπου scince ή τυπου dictionary τα οποια είναι κ για πωληση... ο αλλος τυπος ειναι μονο για αναγνωση οποτε και δν εχει αντιτυπα...αρα μαλλν θα χρειαστω τον πολυμορφισμο...θα το κοιταξω αυτο που ειπε ο ZAKKWYLDE και επιστρεφω...ευχαριστω παντως για το ενδιαφερον Εντάξει εκεί μπορείς να έχεις ένα boolean forsale = false, και να κάνει έναν έλεγχο αν διατίθεται για πώληση ή όχι. Γιατί μπορεί να έχεις ταυτόχρονα 5 αντίτυπα για ανάγνωση αλλά να μην είναι κανένα για πώληση 1
ALLisCHAOS Δημοσ. 8 Ιουνίου 2013 Μέλος Δημοσ. 8 Ιουνίου 2013 @Re4cTiV3 εφοσον τα βιβλια που θα ειναι μονο για αναγνωση δεν θα εχουν αντιτυπα δεν μπορω να τα βαλω κ στη Book τα αντιτυπα :/ ... φιλε tr3quart1sta θα κοιταξω τον κωδικα σου κ θα επανελθω
ZAKKWYLDE Δημοσ. 8 Ιουνίου 2013 Δημοσ. 8 Ιουνίου 2013 @Re4cTiV3 εφοσον τα βιβλια που θα ειναι μονο για αναγνωση δεν θα εχουν αντιτυπα δεν μπορω να τα βαλω κ στη Book τα αντιτυπα :/ ... φιλε tr3quart1sta θα κοιταξω τον κωδικα σου κ θα επανελθω Δεν μπορεί να έχεις 5 αντίτυπα απο το ίδιο βιβλίο, το 1 να είναι για ανάγνωση και τα 4 για πώληση;
Re4cTiV3 Δημοσ. 8 Ιουνίου 2013 Δημοσ. 8 Ιουνίου 2013 Τότε βάλε στον constructor μια boolean...αν είναι για ανάγνωση βάλε αντίτυπα όσα έχει η βιβλιοθήκη.. όπως λεει ο ΖΑΚΚWYLDE
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα