Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

hi guys!!! λοιπον εχω ενα θεματακι στη java...επειδη ο κωδικας ειναι πολυ μεγαλος και θα χαθουμε αν τον γραψω εδω...θα προσπαθησω να σας δωσω να καταλαβετε που ακριβως χανομαι...εχω μια κλαση την book και 2 ακομα : την science και την dictionary οι οποιες κληρονομουν την book... οι δυο κλασεις εχουν σαν εξτρα μεταβλητη τα αντιτυπα (δν τα κληρονομουν απο τη book) στη Main τωρα δημιουργω εναν πινακα τυπου Book... οταν γινεται μια πωληση ενος βιβλιου καλειται μια μεθοδος στην οποια στελνω σαν παραμετρο τον πινακα book ... θελω ομως οταν γινεται η πωληση να μειωνεται κ τα αντιτυπα κατα 1 απο το συγκεκριμενο βιβλιο... ομως τα πως μπορω να στειλω καπως τα αντιτυπα κ να τα μειωσω αφου δν υπαρχουν στη book? ελπιζω να καταλαβατε...αλλιως κανω ενα παραδιγμα σ κωδικα κ στελνω...ευχαριστω..

Δημοσ.

Ο πιο γρηγορος τρόπος ειναι μια static μεταβλητη στην Book που να μετράει τα Book instances. Μπορει να έχει αρχική τιμή πχ 100 και να μειώνεται κατα 1 σε κάθε κληση Sell καποιου αντικείμενου Βοοκ.

 

EDIT 

Λαθος , εσυ θες για καθε βιβλίο το δικό του μετρητή 

Δημοσ.

Φτιάξε μία abstract method στην book η οποία στην υλοποίησή της στις άλλες κλάσεις να μειώνει τα αντίτυπα. Αν μία υποκλάση δεν έχει αριθμό αντιτύπων απλά θα την υλοποιεί κενή.

  • Like 1
Δημοσ.
// η κλαση 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 να αφερειται ενα αντιτυπο...ελπιζω να βοηθεισα καπως

Δημοσ.

Γιατί τα αντίτυπα να μην είναι στην κλάση Book;; καιεχωντας μια μέθοδο να τα μειώνεις;;

 

Αυτό, και μέσα στη DaySales όπου υποθέτω το Book array είναι η "παραγγελία" θα κάνεις ένα loop και θα κάνεις:

pinakas[i].antitipa--;

Είναι λάθος σχεδιασμός να έχεις τα αντίτυπα ως μεταβλητή των subclass, αφού είναι μια γενική έννοια.

 

Αλλά και έτσι όπως είναι, και Βοοκ[] να έχεις μπορείς να κάνεις pinakas = new Science(); ή pinakas = new Dictionary(); 

Αν και είναι χαζός λόγος να χρησιμοποιήσεις polymorphism σε αυτή τη περίπτωση.

Δημοσ.

sorry δεν τν εξηγησα εγω καλα μαλλν την ολη ασκηση....τα αντιτυπα δεν τα εχω ως γενικη εννοια στην book γιατι τα βιβλια μπορει να ειναι ή τυπου scince ή τυπου dictionary τα οποια είναι κ για πωληση... ο αλλος τυπος ειναι μονο για αναγνωση οποτε και δν εχει αντιτυπα...αρα μαλλν θα χρειαστω τον πολυμορφισμο...θα το κοιταξω αυτο που ειπε ο ZAKKWYLDE και επιστρεφω...ευχαριστω παντως για το ενδιαφερον :D

Δημοσ.

εγω θα τοκανα καπως ετσι

 

 

 

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

 

 

Δημοσ.

sorry δεν τν εξηγησα εγω καλα μαλλν την ολη ασκηση....τα αντιτυπα δεν τα εχω ως γενικη εννοια στην book γιατι τα βιβλια μπορει να ειναι ή τυπου scince ή τυπου dictionary τα οποια είναι κ για πωληση... ο αλλος τυπος ειναι μονο για αναγνωση οποτε και δν εχει αντιτυπα...αρα μαλλν θα χρειαστω τον πολυμορφισμο...θα το κοιταξω αυτο που ειπε ο ZAKKWYLDE και επιστρεφω...ευχαριστω παντως για το ενδιαφερον :D

 

Εντάξει εκεί μπορείς να έχεις ένα boolean forsale = false, και να κάνει έναν έλεγχο αν διατίθεται για πώληση ή όχι. Γιατί μπορεί να έχεις ταυτόχρονα 5 αντίτυπα για ανάγνωση αλλά να μην είναι κανένα για πώληση ;)

  • Like 1
Δημοσ.

@Re4cTiV3

 

εφοσον τα βιβλια που θα ειναι μονο για αναγνωση δεν θα εχουν αντιτυπα δεν μπορω να τα βαλω κ στη Book τα αντιτυπα :/ ... φιλε tr3quart1sta

 

θα κοιταξω τον κωδικα σου κ θα επανελθω

Δημοσ.

@Re4cTiV3

 

εφοσον τα βιβλια που θα ειναι μονο για αναγνωση δεν θα εχουν αντιτυπα δεν μπορω να τα βαλω κ στη Book τα αντιτυπα :/ ... φιλε tr3quart1sta

 

θα κοιταξω τον κωδικα σου κ θα επανελθω

 

 

Δεν μπορεί να έχεις 5 αντίτυπα απο το ίδιο βιβλίο, το 1 να είναι για ανάγνωση και τα 4 για πώληση; 

Δημοσ.

Τότε βάλε στον constructor μια boolean...αν είναι για ανάγνωση βάλε αντίτυπα όσα έχει η βιβλιοθήκη..

 

όπως λεει ο ΖΑΚΚWYLDE

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...