THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομές Δεδομένων => Topic started by: filip on November 06, 2016, 01:03:42 am



Title: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: filip on November 06, 2016, 01:03:42 am
Σχόλια και συζητήσεις σχετικά με το 1ο μέρος της εργασίας DS – Candy Crush 2016.

Η εκφώνηση εδώ:

http://alexander.ee.auth.gr:8083/eTHMMY/cms.downloadFile.data.do?method=jsplist&PRMID=1925

Edit: Tags.
Edit: sticky


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: Ap.Mor. on November 12, 2016, 19:06:59 pm
Για τη συνάρτηση GetNextMove μπορεί κάποιος να εξηγήσει τη μορφή του πίνακα availableMoves?
Έχετε καταλάβει που χρειάζεται το moves.size()?
Ο δείκτης κίνησης του getrandomMove (δηλ.το index)είναι κάποιος αριθμός από τον κώδικα κατευθύνσεων;

Γενικά,δεν έχω καταλάβει τα δεδομένα που μας δίνει ώστε να βρω μια υλοποίηση...
ΧΑΟΣ :o


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: filip on November 14, 2016, 09:44:25 am
Για τη συνάρτηση GetNextMove μπορεί κάποιος να εξηγήσει τη μορφή του πίνακα availableMoves?
Έχετε καταλάβει που χρειάζεται το moves.size()?
Ο δείκτης κίνησης του getrandomMove (δηλ.το index)είναι κάποιος αριθμός από τον κώδικα κατευθύνσεων;

Γενικά,δεν έχω καταλάβει τα δεδομένα που μας δίνει ώστε να βρω μια υλοποίηση...
ΧΑΟΣ :o

Τη μορφή του πίνακα availableMoves δεν την κατάλαβα ούτε εγώ αλλά υποθέτω πως είναι πραγματικά όλες οι διαθέσιμες κινήσεις μέσα στο ταμπλό όμως μόνο για τα tiles που με κάποια κίνηση θα φτιάξουν συνδυασμό. Δηλαδή αν ένα τέτοιο tile είναι στη μέση του ταμπλό έχει 4 διαθέσιμες κινήσεις ενώ αν είναι στην άκρη τότε έχει 3 και αν είναι στη γωνία τότε έχει μόνο 2. Αυτή είναι η μία θεωρία μου, η άλλη είναι πως είναι μόνο οι κινήσεις που κάνουν τον αποδεκτό συνδυασμό. Δεν ξέρω ας πει και κανένας άλλος για σίγουρα.

Για το size αυτό που παρατήρησα είναι ότι σου δίνει τον αριθμό των διαθέσιμων κινήσεων συνολικά οπότε αν έχεις 4 και πάνω δηλαδή αν έχεις tile με 4 διαθέσιμες κινήσεις κατεύθυνσης τότε είσαι άνετος. Αν τώρα έχεις size 3 και κάτω σημαίνει ότι έχεις κίνηση για tile σε άκρη οπότε εκεί θέλει προσοχή για να μην προκαλέσεις εξαίρεση προσπαθώντας να το μετακινήσεις εκτός ταμπλό. Πάλι με κάθε επιφύλαξη, απλά παρ το σαν μια άποψη.

Όσο για το index είναι αυτό που είπες.
CrushUtilities.getRandomMove (availableMoves, {0/1/2/3 ανάλογα την κατεύθυνση});


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: Ap.Mor. on November 14, 2016, 10:43:44 am
....
Για το size αυτό που παρατήρησα είναι ότι σου δίνει τον αριθμό των διαθέσιμων κινήσεων συνολικά οπότε αν έχεις 4 και πάνω δηλαδή αν έχεις tile με 4 διαθέσιμες κινήσεις κατεύθυνσης τότε είσαι άνετος. Αν τώρα έχεις size 3 και κάτω σημαίνει ότι έχεις κίνηση για tile σε άκρη οπότε εκεί θέλει προσοχή για να μην προκαλέσεις εξαίρεση προσπαθώντας να το μετακινήσεις εκτός ταμπλό. Πάλι με κάθε επιφύλαξη, απλά παρ το σαν μια άποψη.
...
To moves και το availiablemoves δεν αφήνει να εννοηθεί ότι είναι ο ίδιος πίνακας;
Για αυτό αναρωτιέμαι για τη χρησιμότητα του μεγέθους ενός πίνακα που δεν ξέρουμε καν τη δομή του.
Ευχαριστώ γενικά,θα προσπαθήσω να κάνω κκάποιο πείραμα μπας και βρω άκρη.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: trelonoobaki on November 14, 2016, 10:59:06 am
O availableMoves έχει όλες τις δυνατές κινήσεις στη μορφή 3 αριθμών (χ_αρχικό, ψ_αρχικό, κατεύθυνση) και έναν αριθμό που αντιστοιχεί σε κάθε κίνηση (από το 0 μέχρι το (μέγεθος του -1)). Η getRandomMove() θέλει ως όρισμα έναν πίνακα με τις κινήσεις σε μορφή 3 αριθμών και έναν (τυχαίο) αριθμό για να επιλέξει μια κίνηση.

Εμάς δεν μας ενδιαφέρει καθόλου να ελέγξουμε κατά πόσο είναι δυνατή μια κίνηση. Αυτό το έχει κάνει ο δημιουργός του availableMoves(). Το μόνο που έχουμε να κάνουμε είναι να πάρουμε τυχαία μια κίνηση από το getRandomMove(),δηλ σε μορφή 3 αριθμών, και να την μετατρέψουμε σε τεσσάρων (χ_αρχικό,ψ_αρχικό, χ_τελικό, ψ_τελικό)


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: filip on November 15, 2016, 22:22:41 pm
O availableMoves έχει όλες τις δυνατές κινήσεις στη μορφή 3 αριθμών (χ_αρχικό, ψ_αρχικό, κατεύθυνση) και έναν αριθμό που αντιστοιχεί σε κάθε κίνηση (από το 0 μέχρι το (μέγεθος του -1)). Η getRandomMove() θέλει ως όρισμα έναν πίνακα με τις κινήσεις σε μορφή 3 αριθμών και έναν (τυχαίο) αριθμό για να επιλέξει μια κίνηση.

Εμάς δεν μας ενδιαφέρει καθόλου να ελέγξουμε κατά πόσο είναι δυνατή μια κίνηση. Αυτό το έχει κάνει ο δημιουργός του availableMoves(). Το μόνο που έχουμε να κάνουμε είναι να πάρουμε τυχαία μια κίνηση από το getRandomMove(),δηλ σε μορφή 3 αριθμών, και να την μετατρέψουμε σε τεσσάρων (χ_αρχικό,ψ_αρχικό, χ_τελικό, ψ_τελικό)

Μπομπα... τωρα καταλαβα τι κανουμε. Τζαμπα καθομουν και εκανα χειρισμο εξαιρεσεων... :(


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: Ap.Mor. on November 16, 2016, 14:51:14 pm
...
Πολύ βοηθητικός!


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: amastron on November 17, 2016, 23:53:16 pm
Παιδια μια βοηθεια. Στην κλαση RandomPlayer implements AbstractPlayer μου βγαζει σαν λαθος
The type RandomPlayer must implement the inherited abstract method
 και αναφερεται στις μεθοδους της AbstractPlayer.
Τι πρεπει να κανω για αυτο?


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: Vlassis on November 17, 2016, 23:58:11 pm
Παιδια μια βοηθεια. Στην κλαση RandomPlayer implements AbstractPlayer μου βγαζει σαν λαθος
The type RandomPlayer must implement the inherited abstract method
 και αναφερεται στις μεθοδους της AbstractPlayer.
Τι πρεπει να κανω για αυτο?
Δεν ειμαι σιγουρος, αλλα ισως εχει να κανει με το αν οι μεθοδοι της abstract ειναι public, private κλπ;


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: amastron on November 18, 2016, 00:06:11 am
Δεν ειμαι σιγουρος, αλλα ισως εχει να κανει με το αν οι μεθοδοι της abstract ειναι public, private κλπ;

Οι μεθοδοι που ειναι στην κλαση αυτη ειναι ολες public.
Δεν καταλαβαινω τι ακριβως ενννοει το λαθος.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: geopas on November 18, 2016, 01:49:19 am
εχει καταλαβει κανενας που πρεπει να χρησιμοποιησουμε το number of rows-columns;


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: amastron on November 18, 2016, 01:54:28 am
εχει καταλαβει κανενας που πρεπει να χρησιμοποιησουμε το number of rows-columns;

Προς το παρόν δεν χρειάζεται.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: raptalex on November 22, 2016, 14:55:15 pm
Όλες οι συναρτήσεις get και set για τις μεταβλητές της κλάσης.
Μπορεί κάποιος να δώσει κάποια βοήθεια-επεξήγηση πάνω σε αυτά, πρακτικά τι να κάνουμε??


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: trelonoobaki on November 22, 2016, 15:08:39 pm
πρέπει να δημιουργήσεις 2 συναρτήσεις για κάθε μεταβλητή: η μια θα επιστρέφει την τιμή της μεταβλητής και άλλη θα αλλάζει την τιμή της μεταβλητής


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: geopas on November 22, 2016, 23:49:58 pm
κατι ακομα ,για την getnextmove οταν καλω την συναρτηση getrandommove βαζω ορισματα availableMoves,(int)(availableMoves.size()*Math.random()) για να επιλεξω μια τυχαια κινηση και μου βγαζει error: the method getRandomMove (ArrayList<int[]> , int ) is undefined for the type RandomPlayer. Ξερει κανενας τι παιζει;


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: Επίδοξος on November 23, 2016, 00:15:11 am
Η μέθοδος getRandomMove() είναι μέθοδος της κλάσης CrushUtilities. Συνεπώς για να την καλέσεις χρειάζεται ένα αντικείμενο της κλάσης αυτής.
Όμως είναι και static που σημαίνει πως αρκεί ένα CrushUtilities.getRandomMove(...) για να την καλέσεις.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: potis on November 23, 2016, 19:50:19 pm
Τελικά, moves και available moves είναι το ίδιο; Αν όχι, τι διαφορά έχουν;


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: persephonee on November 23, 2016, 20:56:54 pm
Τελικά, moves και available moves είναι το ίδιο; Αν όχι, τι διαφορά έχουν;

moves είναι το όνομα του ορίσματος που αντιστοιχεί στη λίστα, στη δήλωση της συνάρτησης getRandomMove.
availableMoves είναι το όνομα της Arraylist.
Εσύ όταν θα καλέσεις την getRandomMove θα δώσεις σαν πρώτο όρισμα την availableMoves και αυτή θα "περάσει" στη moves.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: alekosts on November 23, 2016, 21:09:04 pm
καλησπερα παιδιά!Μου εμφανιζει αυτο το μυνημα οταν παταω play ξερει κανεις τι φταει?

java.lang.NoSuchMethodException: gr.auth.ee.dsproject.crush.player.RandomPlayer.<init>(java.lang.Integer)
   at java.lang.Class.getConstructor0(Unknown Source)
   at java.lang.Class.getConstructor(Unknown Source)
   at gr.auth.ee.dsproject.crush.MainPlatform$3$1.run(MainPlatform.java:339)
   at java.lang.Thread.run(Unknown Source)
java.lang.NoSuchMethodException: gr.auth.ee.dsproject.crush.player.RandomPlayer.<init>(java.lang.Integer)
   at java.lang.Class.getConstructor0(Unknown Source)
   at java.lang.Class.getConstructor(Unknown Source)
   at gr.auth.ee.dsproject.crush.MainPlatform$3$1.run(MainPlatform.java:369)
   at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-2" java.lang.NullPointerException
   at gr.auth.ee.dsproject.crush.MainPlatform$3$1.run(MainPlatform.java:391)
   at java.lang.Thread.run(Unknown Source)


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: potis on November 23, 2016, 21:20:52 pm
moves είναι το όνομα του ορίσματος που αντιστοιχεί στη λίστα, στη δήλωση της συνάρτησης getRandomMove.
availableMoves είναι το όνομα της Arraylist.
Εσύ όταν θα καλέσεις την getRandomMove θα δώσεις σαν πρώτο όρισμα την availableMoves και αυτή θα "περάσει" στη moves.


Ωραία, ευχαριστώ. Τώρα το έχω τελειώσει, το τρέχω και δεν μπορώ να επιλέξω παίκτες. Μπορεί να φανταστεί κάποιος τι έχω κάνει λάθος;
Σαν error μου βγάζει το ίδιο με τον συνάδελφο από πάνω.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: Επίδοξος on November 23, 2016, 21:58:02 pm
Αλέκο, προσπάθησε να βάλεις τους κονστράκτορ σου πάμπλικ αν δεν τους έχεις έτσι.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: potis on November 23, 2016, 22:17:14 pm
Αλέκο, προσπάθησε να βάλεις τους κονστράκτορ σου πάμπλικ αν δεν τους έχεις έτσι.

Το δοκίμασα και δεν άλλαξε κάτι στο error που βγάζει


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: alekosts on November 23, 2016, 22:28:13 pm
Αλέκο, προσπάθησε να βάλεις τους κονστράκτορ σου πάμπλικ αν δεν τους έχεις έτσι.
Δεν εχω χρησιμοποιησει πουθενα το Board board δεν ξερω αν βοηθαει πουθενα αυτο.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: ChrisB999 on November 23, 2016, 22:50:37 pm
potis: Δεν επιλέγεις παίκτες. Και οι 2 οι παίκτες είναι ελεγχόμενοι από τον υπολογιστή. Εσύ απλά πατάς Play και αρχίζουν να παίζουν μόνοι τους.

alekosts: Είχα κι εγώ το ίδιο πρόβλημα, αλλά έκανα αυτό που πρότεινε ο Epido3os και έκανα τον constructor της RandomPlayer public και τώρα τρέχει κανονικότατα μόλις πατήσω το Play... τουλάχιστον μέχρι να τα φτήσει ξανά λόγω ενός IndexOutOfBoundsException σε κάποιο σημείο του GetNextMove().


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: SaltyMeatBalls on November 24, 2016, 00:09:50 am
... τουλάχιστον μέχρι να τα φτήσει ξανά λόγω ενός IndexOutOfBoundsException σε κάποιο σημείο του GetNextMove().

ποιο ηταν το σκορ πριν τα φτησει??


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: Vlassis on November 24, 2016, 01:39:10 am
τουλάχιστον μέχρι να τα φτήσει ξανά λόγω ενός IndexOutOfBoundsException σε κάποιο σημείο του GetNextMove().
καπου βγαινεις εκτος board  :)


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: ChrisB999 on November 24, 2016, 13:08:40 pm
Μια μικρή διόρθωση στη Math.random() χρειαζόταν (η μέγιστη τιμή έβγαινε 1 μονάδα πιο πάνω από ότι θα έπρεπε) και δούλεψε.

Την επικεφαλίδα που μας ζητάει με τα ονόματα και τα ΑΕΜ, κοκ., τη γράφουμε σε κάποια συγκεκριμένη θέση ή μπορούμε απλά να την βάλουμε στην αρχή της Tile ή της RandomPlayer;


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: raptalex on November 24, 2016, 17:47:50 pm
Πως μπορούμε να είμαστε σίγουροι ότι το index θα είναι πάντα μικρότερο από το size??


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: ChrisB999 on November 24, 2016, 18:08:26 pm
Η Math.random() επιστρέφει έναν αριθμό στο διάστημα [0,1).
Για να σου δώσει αριθμό σε διάστημα [α,β), χρησιμοποιείς την: α + Math.random()*(β-α).
Στη συγκεκριμένη περίπτωση, α=0, β=size, και θες μόνο ακέραιους, άρα:

index = (int)(Math.random()*size);

που θα επιστρέφει ακέραιους στο διάστημα [0, size-1].


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: raptalex on November 24, 2016, 18:36:51 pm
Η Math.random() επιστρέφει έναν αριθμό στο διάστημα [0,1).
Για να σου δώσει αριθμό σε διάστημα [α,β), χρησιμοποιείς την: α + Math.random()*(β-α).
Στη συγκεκριμένη περίπτωση, α=0, β=size, και θες μόνο ακέραιους, άρα:

index = (int)(Math.random()*size);

που θα επιστρέφει ακέραιους στο διάστημα [0, size-1].

Όπου size τι ορίζεις?? Πάλι το ίδιο πρόβλημα μου βγάζει και έτσι να το κάνω.. Κάτι δεν κατάλαβα.. Αν το βάλω να τρέχει με τους αριθμούς 0 ή 1 μου τρέχει κανονικά όμως προφανώς θέλω και το 2 και το 3 για να παέι δεξία ή πάνω , οπότε αν το βάλω σε διάστημα [0,4) σε int υπάρχει περίπτωση να έχω index>=size όπου και crusharei.


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: raptalex on November 24, 2016, 19:05:58 pm
Το έλυσα το πρόβλημα που είχα όταν το τρέχω τώρα τελειώνει κανονικά πάντα όσες φορές και αν το τρέξω, απλά στο τέλος μου πετάει αυτό :
Exception in thread "Thread-2" java.util.NoSuchElementException
   at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
   at gr.auth.ee.dsproject.crush.MainPlatform.showScore(MainPlatform.java:129)
   at gr.auth.ee.dsproject.crush.MainPlatform.access$21(MainPlatform.java:105)
   at gr.auth.ee.dsproject.crush.MainPlatform$4$1.run(MainPlatform.java:888)
   at java.lang.Thread.run(Thread.java:745)

Καμία ιδέα ??


Title: Re: [Δομές Δεδομένων] Εργασία Α 2016/2017 Προθεσμία 24/11/16
Post by: ChrisB999 on November 24, 2016, 19:25:02 pm
Το size είναι το μέγεθος της availableMoves, που δίνεται από την availableMoves.size().

Τη Math.random() τη χρησιμοποιείς για να επιλέξεις ένα τυχαίο στοιχείο της ArrayList<int[]> availableMoves, όχι για να επιλέξεις μια τυχαία κατεύθυνση κίνησης.