Aztec Δημοσ. 1 Ιανουαρίου 2017 Δημοσ. 1 Ιανουαρίου 2017 Άσχετα με το αν συνδυάζεται το 6 με το 7, όταν καλείς την getIterator με την υλοποίηση που έχεις κάνει απλά θα παίρνεις πίσω πάντα έναν κενό ListIterator. Δεν κάνει compile το πρόγραμμα εφόσον δεν υπάρχει ο αντίστοιχος constructor
tsofras Δημοσ. 1 Ιανουαρίου 2017 Δημοσ. 1 Ιανουαρίου 2017 Δεν κάνει compile το πρόγραμμα εφόσον δεν υπάρχει ο αντίστοιχος constructor Γιατί ποιός τον χρειάζεται? Η κλάση κάνει implement τον Iterator , οπότε χρειάζεται υλοποιήσεις απλά για τις hasNext(), next() και remove() Εκτός αν χάνω πάλι κάτι απο την άσκηση που όπως είπα και πρίν δεν έχω πάρει χαμπάρι τι ακριβώς συζητάμε
Aztec Δημοσ. 1 Ιανουαρίου 2017 Δημοσ. 1 Ιανουαρίου 2017 Γιατί ποιός τον χρειάζεται? Η κλάση κάνει implement τον Iterator , οπότε χρειάζεται υλοποιήσεις απλά για τις hasNext(), next() και remove() Εκτός αν χάνω πάλι κάτι απο την άσκηση που όπως είπα και πρίν δεν έχω πάρει χαμπάρι τι ακριβώς συζητάμε Στο 7 έχει οριστεί constructor για την κλαση . Αυτός είναι ο ένας και μοναδικός constructor. Στο 6 ο φιλος δημιουργεί αντικείμενο λανθασμένα καθώς πρέπει να χρησιμοποιήσει αυτόν τον constructor . Δηλαδη το 6 πρεπει να γίνει Return new ListIterator(this) public interface Iterator { public Integer getNext(); public boolean hasNext(); } public interface ICollector { public Iterator getIterator(); } public class ListIterator implements Iterator { private Mylist alist; private int index= 0; private int size=-1; public ListIterator(Mylist alist){ this.alist=alist; size=this.alist.getSize(); } public Integer getNext(){ return alist.getItem(index++); } public boolean hasNext(){ return (index<size); } } public class Mylist implements ICollector { private List<Integer> Integers=new ArrayList<Integer>(); // Aztec - added constructor to provide some values start public Mylist() { Integers.add(1); Integers.add(2); Integers.add(3); Integers.add(4); } // Aztec - added constructor to provide some values end public Iterator getIterator(){ return new ListIterator(this); } public int getSize() { return Integers.size(); } public Integer getItem(int i) { return Integers.get(i); } } Οπότε αν κάνουμε ενα μικρό τεστ public static void main(String[] args) { Mylist mylist=new Mylist(); for(Iterator iter = mylist.getIterator(); iter.hasNext(){ System.out.println(iter.getNext());} } έχουμε run: 1 2 3 4 BUILD SUCCESSFUL (total time: 0 seconds)
tsofras Δημοσ. 1 Ιανουαρίου 2017 Δημοσ. 1 Ιανουαρίου 2017 οκ την εκφώνηση την βλέπεις κάπου εσύ? Τώρα καταλαβαίνω ότι δημιουργεί τον δικό του Iterator και φτιάχνει υλοποίηση για αυτόν, είναι λίγο αχταρμας το ποστ. (σορρυ TS)
doug2006 Δημοσ. 28 Ιανουαρίου 2017 Μέλος Δημοσ. 28 Ιανουαρίου 2017 στα interface τα δυο που έχουμε μόνο οι μέθοδοι public Integer getNext(); public boolean hasNext(); public Iterator getIterator(); πρέπει να γραφτούν???? οι μέθοδοι public int getSize(), public Integer getItem(int i) δεν θα πρεπε να γραφτούν κ αυτές σε κάποιο interface?
Aztec Δημοσ. 30 Ιανουαρίου 2017 Δημοσ. 30 Ιανουαρίου 2017 Τεχνικα θα μπορούσες να φτιάξεις ενα νέο interface με τις μεθόδους και η Mylist να κάνει implement ΚΑΙ αυτο το interface. Θα μπορούσες επίσης να θεωρήσεις ότι o Iterator είναι super interface ενός custom δικού σου και η Μylist να κάνει implement το τελευταίο. Θεωρητικά και πρακτικά στο θέμα σου δεν νομίζω να υπάρχει λογος και σίγουρα δεν πρέπει να τις βάλεις στα interfaces που έχεις ήδη υλοποιήσει (Iterator,ICollector)
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα