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

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

Δημοσ.

Καλησπέρα θέλω να κάνω αυτή την άσκηση σε java έχω κάνει ένα μέρος αλλά δεν μπορώ να κάνω της συναρτήσεις για την αναζήτηση και τον διαχωρισμό των θηλαστικών και των ψαριών σε διαφορετικές λίστες 

580491_413761548742828_1560004911_n.jpg?

public class Aquarium {
   protected ArrayList <Animals> list;
   protected ArrayList <Fish> listFish;
   protected ArrayList <Mammal> listMammal;
    
    public Aquarium(){
    list = new ArrayList <Animals>();
    listFish = new ArrayList <Fish>();
    listMammal = new ArrayList <Mammal>();
    }
    
    public void addAnimals(Animals a){
    list.add(a);
    }
    
    public void addFish(Fish a){
    list.add(a);
    }
    
    public void addMammal(Mammal a){
    list.add(a);
    }
    
    public void addFission(){
    int size = list.size();
        
    }
    
    public ArrayList<Animals> getAnumals(){
    return list;
    }
    
    public void removeAnumals(int i){
        list.remove(i);
    }
    
    public void removeAnumals(Animals i){
        list.remove(i);
    }
    
    public int sumAnimals(){
    return list.size();
    }
    
    
}
public abstract class Animals {
    protected String genre,origin,date_came,pump,discript;
    
    public Animals(String genre,String origin,String date_came,String pump,String discript){
    this.genre=genre;
    this.origin=origin;
    this.pump=pump;
    this.date_came=date_came;
    this.discript=discript;
    
    }
    
    public abstract void searchAnimal(String genre,String origin,String pump);
    
    public String toString(){
    return  "Genre :"+genre+" Origin :"+origin+" Date Comes :"+pump+" Discript :"+discript;}
    
    
}
public class Fish extends Animals{
    private boolean scales;
    
    public Fish(String genre,String origin,String date_came,String pump,String discript,boolean scales){
    super(genre,origin,date_came,pump,discript);
            this.scales=scales;
    
    }
    
    public void setScales(boolean scales){this.scales=scales;}
    public boolean getScales(){return scales;}
    
      public String toString(){
    return  "The Fish :"+super.toString()+" Have Scales :"+scales;}

    

    @Override
    public void searchAnimal(String genre, String origin, String pump) {
        
    }
}
public class Mammal extends Animals{
    private String name;
    private double weight;
    
    public Mammal(String genre,String origin,String date_came,String pump,String discript,String name,double weight){
    super(genre,origin,date_came,pump,discript);
            this.name=name;
            this.weight=weight;
    
    }
    
    public void setName(String name){this.name=name;}
    public String getName(){return name;}
    public void setWeight(double weight){this.weight=weight;}
    public double getWeight(){return weight;}
    
    public String toString(){
    return  "The Mamal Name:"+name+super.toString()+" Weight :"+weight;}



    
    public void searchAnimal(String genre, String origin, String pump,String name) {
        
    }

   
}
public static void main(String[] args) {
        Aquarium a = new Aquarium();
        Fish q = new Fish("1","1","1","1","1",true);
        Mammal m = new Mammal("2","2","2","2","2","2",2);
        a.addAnimals(q);
        a.addAnimals(m);
        
        System.out.println(a.getAnumals());
        System.out.println(a.sumAnimals());
    }
Δημοσ.

To

 

 (α) αναζήτηση με βάση τα {είδος,προέλευση,δεξαμενή} για τα ψάρια και {είδος,προέλευση,δεξαμενή,όνομα} για τα θαλλάσια θηλαστικά

 

θα πρέπει να γίνεται με methods στην class Aquarium μια για τα ψάρια και μία για τα θαλάσσια θηλαστικά.Θα μπορεί να ψάχνει μόνο με κάθε ένα απο τα πεδία και με όλα μαζί ή μόνο με όλα?

 

Στην πρώτη περίπτωση πρέπει να οριστεί μια μέθοδος για κάθε πεδίο αναζήτησης πχ για τα ψάρια.

public Fish searchFishByEidos(string fishEidos) 'αναζήτηση με το είδος
public Fish searchFishByProeleysh(string fishProeleysh) 'αναζήτηση με την προέλευση
public Fish searchFishByDeksamenh(string deksamenh) 'αναζήτηση με δεξαμενή

Αντίστοιχα πρέπει να ορίσεις συναρτήσεις και για τα θαλάσσια θηλαστικά.

 

Αν η αναζήτηση γίνεται με όλα τα πεδία και μόνο τότε θέλεις απλώς 2 συναρτήσεις (που τις έχεις ήδη γράψει σαν abstract)

public Fish searchFish(String genre, String origin, String pump)
public Mammal searchMammal(String genre, String origin, String pump,String name)

Η αναζήτηση δουλεύει με τον ίδιο τρόπο είτε είσαι στην πρώτη περίπτωση είτε στην δεύτερη.

 

Για κάθε στοιχείο του listFish ελέγχεις αν το genre,το origin και το pump του τρέχοντος αντικειμένου (τύπου Fish) είναι ίδια με τα ορίσματα της συνάρτησης αν ναι τότε επιστρέφεις το αντικείμενο Fish στο οποίο είσαι.

 

Για κάθε στοιχείο του listMammal ελέγχεις αν το genre,το origin,το pump και το name του τρέχοντος αντικειμένου (τύπου Mammal) είναι ίδια με τα ορίσματα της συνάρτησης αν ναι τότε επιστρέφεις το αντικείμενο Μammal στο οποίο είσαι.

 

Σημείωση:Αν η αναζήτηση μπορεί να σου επιστρέψει πάνω από ένα αποτελεσμα τότε πρέπει να βάλεις τις μεθόδους αναζήτησης να επιστρέφουν ArrayList με τα αντικείμενα που βρήκε.

 

Για το

 

(β) σύγκριση για το αν δύο ζώα είναι ίδια με χρήση των προηγούμενων χαρακτηριστικών

Μπορείς σε κάθε subclass Fish και Mammal να φτιάξεις μια συνάρτηση Compare που δέχεται σαν όρισμα ένα αντικείμενο Fish ή Mammal και επιστρέφει true αν είναι ίδια ή false αν δεν είναι.

 

Αυτο το αποφασίζει ελέγχοντας τα αντίστοιχα πεδία του αντικειμένου με αυτά που έχεις περάσει σαν όρισμα.

  • Like 2
Δημοσ.

Ευχάριστο πολύ για την βοήθεια το β ερώτημα κατάλαβα πως θα το κάνω το τελευταίο δεν μπορώ να καταλάβω πως θα διαχωρίσω από μια λίστα Animals σε 2 διαφορετικές Fish & Mammals ?

Δημοσ.

Ευχάριστο πολύ για την βοήθεια το β ερώτημα κατάλαβα πως θα το κάνω το τελευταίο δεν μπορώ να καταλάβω πως θα διαχωρίσω από μια λίστα Animals σε 2 διαφορετικές Fish & Mammals ?

 Προτείνω να χρησιμοποιήσεις τον operator instanceof,  για να βρείς τι τύπου κλάση είναι ένα Animal αντκείμενο.

Δημοσ.

Εναλλακτικά με το παραπάνω μπορείς να προστέσεις άλλο ένα protected πεδίο στην κλάσση Animals πχ το type.

public abstract class Animals {
     protected String genre,origin,date_came,pump,discript,type;
        
        public Animals(String genre,String origin,String date_came,String pump,String discript,String type){
        this.genre=genre;
        this.origin=origin;
        this.pump=pump;
        this.date_came=date_came;
        this.type = type;
        this.discript=discript;
        
        }
...
}

Kαι μετά απλώς να αλλάξεις τους constructors των Fish και Mammal σε αυτό.

public class Fish extends Animals {
    ...
        public Fish(String genre,String origin,String date_came,String pump,String discript,boolean scales){
        super(genre,origin,date_came,pump,discript,"Fish");
                this.scales=scales;
        
        }

      ....    
}
public class Mammal extends Animals {   
...  
    public Mammal(String genre,String origin,String date_came,String pump,String discript,String name,double weight){
    super(genre,origin,date_came,pump,discript,"Mammal");
            this.name=name;
            this.weight=weight;
    
    }
....
}

Μετά βάλε στην main αυτό

        for (Animals c: a.list) {
          System.out.println(c.type);
        }

και δες τι έξοδο σου βγάζει λογικά

 

Fish

Mammal

 

 

 

 

 

 

  • Like 1
Δημοσ.

χρησιμοποίησα την instanceof αλλά μου βγάζει πρόβλημα 


        for (Animals  c: a.list) {
        if(c  instanceof Fish){
        a.addFish(c);} 
        else {
        a.addMammal(c);
        }

αλλά μου βγάζει error 

 

Δημοσ.

χρησιμοποίησα την instanceof αλλά μου βγάζει πρόβλημα 


        for (Animals  c: a.list) {
        if(c  instanceof Fish){
        a.addFish(c);} 
        else {
        a.addMammal(c);
        }

αλλά μου βγάζει error 

Animal is not a Fish!

Κάνε type casting.

Δημοσ.

Animal is not a Fish!

Κάνε type casting.

for (Animals  c: a.list) {
        if(c  instanceof Fish){
        a.addFish((Fish) c);}
        else {
        a.addMammal((Mammal) c);
        }
        }

έκανα cast σε mammal & Fish

και μου βγάζει αυτό 

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
at java.util.ArrayList$Itr.next(ArrayList.java:791)
at thema2ianouar2013.Thema2ianouar2013.main(Thema2ianouar2013.java:25)
Java Result: 1
Δημοσ.
for (Animals  c: a.list) {
        if(c  instanceof Fish){
        a.addFish((Fish) c);}
        else {
        a.addMammal((Mammal) c);
        }
        }

έκανα cast σε mammal & Fish

και μου βγάζει αυτό 

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
at java.util.ArrayList$Itr.next(ArrayList.java:791)
at thema2ianouar2013.Thema2ianouar2013.main(Thema2ianouar2013.java:25)
Java Result: 1

 

 

Λογικό error μιας και λες για κάθε αντικείμενο c του τύπου Animals στο Arraylist list και μετά πας και προσθέτεις items στο ίδιο list (δες την υλοποίηση των addFish και addMammal)

.

a.addFish((Fish) c);}
else {
a.addMammal((Mammal) c);

Mην τα προσθέτεις στο list αλλά στα ξεχωριστά lists που έχεις ορίσει listFish και listMammal.

protected ArrayList <Animals> list;
protected ArrayList <Fish> listFish;
protected ArrayList <Mammal> listMammal;

Πρέπει να αλλάξεις την υλοποίηση των addFish και addMammal

Δημοσ.

Λογικό error μιας και λες για κάθε αντικείμενο c του τύπου Animals στο Arraylist list και μετά πας και προσθέτεις items στο ίδιο list (δες την υλοποίηση των addFish και addMammal)

.

a.addFish((Fish) c);}
else {
a.addMammal((Mammal) c);

Mην τα προσθέτεις στο list αλλά στα ξεχωριστά lists που έχεις ορίσει listFish και listMammal.

protected ArrayList <Animals> list;
protected ArrayList <Fish> listFish;
protected ArrayList <Mammal> listMammal;

Πρέπει να αλλάξεις την υλοποίηση των addFish και addMammal

Ευχαριστώ πολύ έκανα add στην Array τον animmals πάλι τώρα δουλεύει τέλεια ευχαριστώ πολύ όλους.

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

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

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

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

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

Σύνδεση

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

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