FarCry1 Δημοσ. 22 Οκτωβρίου 2021 Δημοσ. 22 Οκτωβρίου 2021 (επεξεργασμένο) Καλησπέρα. Θα ήθελα την βοήθεια σας σε μια άσκηση που πρέπει να κάνω Η γλώσσα προγραμματισμού που χρησιμοποιώ είναι η C# αλλά όσοι ξέρετε και java πιστεύω μπορείτε να βοηθήσετε καθώς μοιαζουν πολύ Πρέπει να φτιάξω κάτι σε παραγγελία ενός καταστήματος. Πχ ο πελάτης να κάνει μια παραγγελία που αγοράζει κάποια προϊόντα και όταν τελειώσει την παραγγελία να εμφανιστούν στην οθόνη τα προϊόντα που επέλεξε αλλά και η ποσότητα τους. Προφανώς τα προϊόντα είναι αντικείμενα και αποθηκευονται σε μια λίστα με 3 παραμέτρους(όνομα προϊόντος, τιμή και id). Στην main δημιουργώ τα προϊόντα/αντικειμενα. Πρέπει όμως στο τέλος όταν φαίνονται τα αποτελέσματα, να εμφανίζει και την ποσότητα ενός προϊόντος που επέλεξε. Όπως γίνεται δηλαδή και στις κανονικές παραγγελίες που κάνουμε σε καταστήματα. Να εμφανίζει σε κάθε προϊόν την ποσότητα. Δηλαδή αν βάλω 2 ίδια αντικείμενα στην main, την ώρα που θα που διατρεχω την λίστα, τα όμοια πρέπει να εμφανιστούν μια φορά και δίπλα να γράφει την ποσότητα. Σκεφτηκα την διπλή for και έναν counter να το κάνω αλλά δεν βγαίνει. Κάπου κάνω λάθος. Μόνο αυτό το κομμάτι κώδικα θα ήθελα αν μπορείτε. Ευχαριστώ πολύ! Επεξ/σία 22 Οκτωβρίου 2021 από FarCry1
SOADNICK Δημοσ. 22 Οκτωβρίου 2021 Δημοσ. 22 Οκτωβρίου 2021 Να ξεκαθαρίσω ότι δεν έχω γράψει γραμμή C#, αλλά απ' ό,τι βλέπω έχει δομή dictionary, οπότε μπορείς όταν "μπαίνει νέος πελάτης", να κάνεις τα εξής: 1) Φτιάχνεις/reset το dictionary που ουσιαστικά θα είναι το καλάθι σου 2) Όταν ο πελάτης αγοράζει κάτι κάνεις search στο dictionary το id του προϊόντος, αν υπάρχει αυξάνεις το value (ποσότητα) κατά ένα, αν δεν υπάρχει δημιουργείς νέο ζεύγος <key, value> με τιμές <id, 1> 3) Στο τέλος υποθέτω μπορείς να κάνεις iterate το dictionary για να printάρεις τα προϊόντα, δεν ξέρω αν θα εμφανιστούν με την σειρά που τα έβαλες στο καλάθι (αν υπάρχει τέτοια απαίτηση). Αν υπάρχει η απαίτηση αυτή, μάλλον θα χρειαστείς ordered dictionary.
antbyron Δημοσ. 22 Οκτωβρίου 2021 Δημοσ. 22 Οκτωβρίου 2021 Για το συγκεκριμένο κομμάτι, δεν μπορείς να φτιάξεις μία στατική μεταβλητή και να την αυξάνεις με τον κατασκευαστή;
DrKo Δημοσ. 22 Οκτωβρίου 2021 Δημοσ. 22 Οκτωβρίου 2021 Εν τάχει, η παραγγελία θα είναι αντικείμενο κλάσης Παραγγελία (π.χ.). Θα φροντίζει αυτή να αποθηκεύει και να διατηρεί την λίστα με τα προϊόντα. Κάθε προϊόν θα είναι αντικείμενο αντίστοιχης κλάσης και όλες αυτές οι κλάσεις θα κληρονομούν την abstract class Προϊόν. Έτσι θα έχεις ένα κοινό interface και functionality για να βλέπει η παραγγελία και ο πελάτης. Η παρουσίαση των προϊόντων θα φροντιστεί από μία μέθοδο μέσα στην Παραγγελία, π.χ. printOrderToCMD
jcoder21 Δημοσ. 24 Οκτωβρίου 2021 Δημοσ. 24 Οκτωβρίου 2021 Στις 22/10/2021 στις 8:41 ΜΜ, FarCry1 είπε Καλησπέρα. Θα ήθελα την βοήθεια σας σε μια άσκηση που πρέπει να κάνω Η γλώσσα προγραμματισμού που χρησιμοποιώ είναι η C# αλλά όσοι ξέρετε και java πιστεύω μπορείτε να βοηθήσετε καθώς μοιαζουν πολύ Πρέπει να φτιάξω κάτι σε παραγγελία ενός καταστήματος. Πχ ο πελάτης να κάνει μια παραγγελία που αγοράζει κάποια προϊόντα και όταν τελειώσει την παραγγελία να εμφανιστούν στην οθόνη τα προϊόντα που επέλεξε αλλά και η ποσότητα τους. Προφανώς τα προϊόντα είναι αντικείμενα και αποθηκευονται σε μια λίστα με 3 παραμέτρους(όνομα προϊόντος, τιμή και id). Στην main δημιουργώ τα προϊόντα/αντικειμενα. Πρέπει όμως στο τέλος όταν φαίνονται τα αποτελέσματα, να εμφανίζει και την ποσότητα ενός προϊόντος που επέλεξε. Όπως γίνεται δηλαδή και στις κανονικές παραγγελίες που κάνουμε σε καταστήματα. Να εμφανίζει σε κάθε προϊόν την ποσότητα. Δηλαδή αν βάλω 2 ίδια αντικείμενα στην main, την ώρα που θα που διατρεχω την λίστα, τα όμοια πρέπει να εμφανιστούν μια φορά και δίπλα να γράφει την ποσότητα. Σκεφτηκα την διπλή for και έναν counter να το κάνω αλλά δεν βγαίνει. Κάπου κάνω λάθος. Μόνο αυτό το κομμάτι κώδικα θα ήθελα αν μπορείτε. Ευχαριστώ πολύ! Καλησπέρα, Με μια προχειρη ανάγνωση , σε απλή java η παραγγελία είναι ένα Object έστω Order και μέσα σε αυτό μπορεί αν έχεις List από Items.Άρα ένα δεύτερο Object σου θα είναι η Item class με ότι attributes χρειάζεσαι , έστω String name, int id , String type .... .Με κάθε add στο Order προσθέτεις στο ArrayList<Item> και από ένα ένα Item obj. Στο τέλος αθροίζεις τα Items ανα τύπο και έχεις το πλήθος.
FarCry1 Δημοσ. 24 Οκτωβρίου 2021 Μέλος Δημοσ. 24 Οκτωβρίου 2021 (επεξεργασμένο) Καλησπερα. Ευχαριστω για τις απαντησεις. Τελικα το βρηκα με αλλον τροπο γιατι αυτα που ειπατε δεν τα πολυ καταλαβα επειδη δεν ειχαν κωδικα. Στην κλαση παραγγελιας ειχα μια μεθοδο που επαιρνε τα αντικειμενα απο την main και τα εβαζε στην λιστα και χρησιμοποιησα την εντολη Contains για να βλεπει καθε φορα αν υπαρχει το αντικειμενο στην λιστα. Στην αρχη εβαζα for, συγκρινα με ID καθε προιοντος κλπ. Και στο τελος δεν εβγαζε σωστα αποτελεσματα. Φαινεται κατι μου ξεφευγε καθε φορα. Δεν το ηξερα οτι ειναι τοσο απλο τελικα. public void apothikeusi(Proion p) { if (!pin.Contains(p)) { pin.Add(p); // Προσθετει το αντικειμενο "p"(που ερχεται απο την main οταν καλειται η συγκεκριμενη μεθοδος) στην λιστα "pin" αν δεν υπαρχει } else { p.setPosotita(); // Εαν υπαρχει ηδη το αντικειμενο στην λιστα, τοτε καλειτε η μεθοδος της κλασης "Proion" και αυξανει την μεταβλητη "posotita" κατα 1 μοναδα } } Βεβαια θα ηθελα να μαθω και πως γινεται με αλλον τροπο χωρις την συγκεκριμενη εντολη(Contains). Να δω δηλαδη τον αλγοριθμικο τροπο. Ουσιαστικα ειναι παρομοιο με ασκησεις που καναμε στην σχολη του τυπου " εχουμε εναν πινακα πχ χαρακτηρων και που πρεπει να τυπωσουμε στην οθονη ποσες φορες εμφανιζεται καποιος χαρακτηρας". Αν το εβρισκα αυτο χωρις το Contains, θα το εβρισκα μετα και με αντικειμενα. Αλλα τελικα με μπερδεψε. Επεξ/σία 24 Οκτωβρίου 2021 από FarCry1
k33theod Δημοσ. 25 Οκτωβρίου 2021 Δημοσ. 25 Οκτωβρίου 2021 Και εγώ άσχετος από java οπότε ίσως έχω κάτι λάθος στο σκεπτικό μου. Όπως έγραψε και ο @SOADNICK το pin που χρησιμοποιείς εφόσον είναι πίνακας είναι "λάθος" πρέπει να είναι dictionary ή όπως είδα και στο documentation https://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html το dictionary είναι obsolete και υπάρχει τώρα το map. Μετά μπορείς να χρησιμοποιήσεις μεθόδους της map για να βάλεις προιόντα ή να κάνεις update στο καλάθι σου. Εφόσον το αφήσεις έτσι όπως το έχεις πρέπει να βάλεις κατά τη γνώμη μου την ποσότητα μέσα στις μεθόδους σου. Δηλαδή pin.Add(p, posotita); p.setPosotita(allagi); που αλλάζει την ποσότητα στην υπάρχουσα + αλλαγή. Σκέψου μετά ότι ένα προιόν υπάρχει μόνο σε συσκευασία των 6 ή δεν μετριέται σε τεμάχια αλλά σε κάτι άλλο γραμμάρια, λίτρα κλπ. 19 ώρες πριν, FarCry1 είπε Βεβαια θα ηθελα να μαθω και πως γινεται με αλλον τροπο χωρις την συγκεκριμενη εντολη(Contains). Γενικά το να χρησιμοποιείς την κατάλληλη μέθοδο για το datastructure που έχεις είναι το καλύτερο δηλαδή contains ή containsKey(Object key) για Map. Αλλιώς πάς στα βασικά for, while klp που αυξάνουν τις πιθανότητες να κάνεις λάθος. 1
SOADNICK Δημοσ. 25 Οκτωβρίου 2021 Δημοσ. 25 Οκτωβρίου 2021 31 λεπτά πριν, k33theod είπε Όπως έγραψε και ο @SOADNICK το pin που χρησιμοποιείς εφόσον είναι πίνακας είναι "λάθος" πρέπει να είναι dictionary ή όπως είδα και στο documentation https://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html το dictionary είναι obsolete και υπάρχει τώρα το map. Μετά μπορείς να χρησιμοποιήσεις μεθόδους της map για να βάλεις προιόντα ή να κάνεις update στο καλάθι σου. Μια μικρή διόρθωση μόνο, γράφει C# οπότε μάλλον είναι εντάξει το dictionary.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα