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

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

Δημοσ. (επεξεργασμένο)

Καλησπέρα. Θα ήθελα την βοήθεια σας σε μια άσκηση που πρέπει να κάνω

Η γλώσσα προγραμματισμού που χρησιμοποιώ είναι η C# αλλά όσοι ξέρετε και java πιστεύω μπορείτε να βοηθήσετε καθώς μοιαζουν πολύ

Πρέπει να φτιάξω κάτι σε παραγγελία ενός καταστήματος. Πχ ο πελάτης να κάνει μια παραγγελία που αγοράζει κάποια προϊόντα και όταν τελειώσει την παραγγελία να εμφανιστούν στην οθόνη τα προϊόντα που επέλεξε αλλά και η ποσότητα τους. Προφανώς τα προϊόντα είναι αντικείμενα και αποθηκευονται σε μια λίστα με 3 παραμέτρους(όνομα προϊόντος, τιμή και id). 

Στην main δημιουργώ τα προϊόντα/αντικειμενα. 

Πρέπει όμως στο τέλος όταν φαίνονται τα αποτελέσματα, να εμφανίζει και την ποσότητα ενός προϊόντος που επέλεξε. Όπως γίνεται δηλαδή και στις κανονικές παραγγελίες που κάνουμε σε καταστήματα. Να εμφανίζει σε κάθε προϊόν την ποσότητα. Δηλαδή αν βάλω 2 ίδια αντικείμενα στην main, την ώρα που θα που διατρεχω την λίστα, τα όμοια πρέπει να εμφανιστούν μια φορά και δίπλα να γράφει την ποσότητα.

 

Σκεφτηκα την διπλή for και έναν counter να το κάνω αλλά δεν βγαίνει. Κάπου κάνω λάθος. Μόνο αυτό το κομμάτι κώδικα θα ήθελα αν μπορείτε. Ευχαριστώ πολύ! 

Επεξ/σία από FarCry1
Δημοσ.

Να ξεκαθαρίσω ότι δεν έχω γράψει γραμμή C#, αλλά απ' ό,τι βλέπω έχει δομή dictionary, οπότε μπορείς όταν "μπαίνει νέος πελάτης", να κάνεις τα εξής:

1) Φτιάχνεις/reset το dictionary που ουσιαστικά θα είναι το καλάθι σου

2) Όταν ο πελάτης αγοράζει κάτι κάνεις search στο dictionary το id του προϊόντος, αν υπάρχει αυξάνεις το value (ποσότητα) κατά ένα, αν δεν υπάρχει δημιουργείς νέο ζεύγος <key, value> με τιμές <id, 1>

3) Στο τέλος υποθέτω μπορείς να κάνεις iterate το dictionary για να printάρεις τα προϊόντα, δεν ξέρω αν θα εμφανιστούν με την σειρά που τα έβαλες στο καλάθι (αν υπάρχει τέτοια απαίτηση). Αν υπάρχει η απαίτηση αυτή, μάλλον θα χρειαστείς ordered dictionary.

Δημοσ.

Εν τάχει, η παραγγελία θα είναι αντικείμενο κλάσης Παραγγελία (π.χ.). Θα φροντίζει αυτή να αποθηκεύει και να διατηρεί την λίστα με τα προϊόντα.

Κάθε προϊόν θα είναι αντικείμενο αντίστοιχης κλάσης και όλες αυτές οι κλάσεις θα κληρονομούν την abstract class Προϊόν. Έτσι θα έχεις ένα κοινό interface και functionality για να βλέπει η παραγγελία και ο πελάτης. 

Η παρουσίαση των προϊόντων θα φροντιστεί από μία μέθοδο μέσα στην Παραγγελία, π.χ. printOrderToCMD

Δημοσ.
Στις 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 ανα τύπο και έχεις το πλήθος.

 

Δημοσ. (επεξεργασμένο)

Καλησπερα. Ευχαριστω για τις απαντησεις. Τελικα το βρηκα με αλλον τροπο γιατι αυτα που ειπατε δεν τα πολυ καταλαβα επειδη δεν ειχαν κωδικα. 

Στην κλαση παραγγελιας ειχα μια μεθοδο που επαιρνε τα αντικειμενα απο την 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, θα το  εβρισκα μετα και με αντικειμενα. Αλλα τελικα με μπερδεψε.

Επεξ/σία από FarCry1
Δημοσ.

Και εγώ άσχετος από 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 που αυξάνουν τις πιθανότητες να κάνεις λάθος.


 
  • Like 1
Δημοσ.
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.

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

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

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

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

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

Σύνδεση

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

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