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

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

Δημοσ.

παδια θελω να κανω ενα προγραμμα με θερμοκρασιες στην JAVA !θελω να υπολογιζει μεγιστο ελαχιστο και Μ.Ο θερμοκρασιων για διαφορες πολεις.Αρχικα ο χρηστης θελω να εισαγει εναν αριθμο ο οποιος θα υποδηλώνει τον αριθμο των δεδομενων που θα εισαχθουν. καθε δεδομενο θα ειναι το ονομα μιας πολης και η θερμοκρασια της. για παραδειγμα τετοια δεδομενα μπορει να ειναι

athina 25.4

lamia 20.5

kalamata 10.3

athina 5.2

athina 9.1

kalamata 14.5

οποτε θα εμφανιζει

athina max 25.4,min 5.2 M.O. 13.2

lamia max 20.5 min 20.5 M.O. 20.5

kalamata max 14.5 min 10.3 M.O. 12.4

 

καταρχας χρειαζεται ενας μονοδιαστατος πινακας για τα ονομα,για τις θερμοκρασιες ομως τι να χρησιμοποιήσω μονοδιαστατο ή δισδιάστατο;

Σημειωση μια πολη μπορει να εμφανιζεται περισσοτερο απο 1 φορα, και σε τυχαια θεση(οπως στο παραδειγμα)

 

καμια ιδεα?? :fear:

Δημοσ.

Μια καλή ιδέα ήταν να χρησιμοποιείς ArrayList<Entry<String, Double>>.

Αν δεν ξέρεις τι είναι αυτό που έγραψα, τότε χρησιμοποίησε έναν πίνακα από String για τις πόλεις (όπως σωστά είπες) κι έναν πίνακα από double για τις θερμοκρασίες.

 

Επίσης μια καλή ιδέα είναι να κανείς μια κλάση πχ City, που θα έχει ένα παιδιο για το όνομα και ένα για τη θερμοκρασία.

Δημοσ.

Θα κάνεις ενα class City με instance variables String name και ArrayList<Float> temperature για τις θερμοκρασίες.

Στη συνέχεια θα κάνεις παλι ενα ArrayList<City> cities όπου θα εισάγεις City objects.

 

Επίσης θέλεις ένα ArrayList<String> tokens όπου θα αποθηκεύεις τα tokens απο τη γραμμή εντολών. Π.χ. athina(token 0) 15(token 1) και θα τα διαβάζεις με τη κλάση Scanner ή ένα String array size 2 έστω.

 

Μετα θα λες, αν στο Arraylist με τα Cities δεν υπάρχει το "athina" το δημιουργώ (new City("Athens")) και προσθέτω στο Arraylist temperatures τη θερμοκρασία. Αν υπάρχει, απλά προσθέτω στο ArrayList temperatures με τις θερμοκρασίες τη θερμοκρασία της αντίστοιχης πολης.

 

Όλα αυτά προυποθέτουν κάποια εξοικείωση με το ArrayList αλλά είναι πιο εύκολο απο τα arrays...απλα το syntax ορισμένες φορές ξεφεύγει.

Δημοσ.

Στο συγκεκριμένο πρόγραμμα καμία διαφορά για να πώ την αλήθεια. Απλά δεν φαντάζομαι να χρειάζεται την ακρίβεια που προσφέρουν οι Double, οπότε αν είχε ξέρω γω, κανα array με 100.000 elements θα είχε ένα μικρό performance gain. Αλλα οκ πρακτικά στη περίπτωσή μας δεν έχει διαφορά.

Δημοσ.

Καταρχας ξεχασα να πω οτι ειμαι αρχάριος ακομα στην java,για την ακριβεια κανω 2 μηνες και αυτο ειναι το 2 μου προγραμμα. επισεις δεν σας ειπα οτι δεν μπορω να χρησιμοποιησω ετοιμες συναρτησεις ή μεθοδους που λυνουν το προβλημα.

 

απο εκει και περα...

Senior Member

τι ειναι το ArrayList<Entry<String, Double>> και για την θερμοκρασιες ειναι καλυτερο μονοδιαστατο;

Junior Member

τι ειναι

instance variables, και το ArrayList

αν μπορειτε εξηγηστε μου τι ειναι το ArrayList τι κανει και πως συντασεται γιατι απο οτι βλεπω ειναι βολευει αρκετα...ευχαριστω

Δημοσ.

Ti junior και senior member βρε :P τα ονόματά μας είναι πάνω απο αυτό. Λοιπόν απο τις δευτερες ερωτήσεις σου συμπεραίνω ότι είσαι εντελώς αρχάριος.

 

Το instance variable είναι βασικός όρος π.χ. Πολύ σύντομα...ένα αντικείμενο ορίζεται απο το όνομά του, την κατάσταση του (τα instance variables) και τη συμπεριφορά του (τα methods). Τα instance variables είναι μεταβλητές λοιπόν οι οποίες έχουν διαφορετικές τιμές για κάθε αντικέιμενο μιας κλάσης. Απο την άλλη έχεις τα class variables τα οποία έχουν κοινή τιμή για όλα τα αντικείμενα της συγκεκριμένης κλάσης.

 

Το ArrayList είναι μια έτοιμη κλάση της Java η οποία ουσιαστικά είναι ένα array το οποίο μεταβάλλει αυτόματα το μέγεθός του καθώς προσθέτεις elements. Αρα βολεύει όταν δεν ξέρεις πόσα Elements έχεις....όπως στη περίπτωσή σου που δεν ξέρεις πόσες θερμοκρασίες θα εισάγει ο χρήστης.

 

Επειδή είσαι όμως αρχάριος θα σου έλεγα να παίξεις με τα arrays για αρχή για να δεις πως λειτουργούν και τις ιδιαιτερότητές τους κτλ. Επίσης κάνε κάτι πιο απλό γιατί ο τρόπος που σου είπα θα σε ζορίσει λίγο.

 

Απλά θα έλεγα βάλε ένα 2 dimensional array απο Strings ξέρω γω 25x25 και στη πρώτη στήλη θα βάζεις πάντα τη πόλη και σε όλες τις άλλες τις θερμοκρασίες σε μορφή String. Οπότε όταν θα δέχεσαι το user input θα κοιτάς αν υπάρχει στο array to String. Αν όχι θα το προσθέτεις και μετά τη θερμοκρασία. Αν υπάρχει ήδη το String θα βρίσκεις ποια στήλη είναι κενή και θα βάζεις το επόμενο temperature. Όταν θα θέλεις να υπολογίσεις to avg απο τα temperature απλά θα κάνεις Float.valueOf(String) για να μετατρέψεις το String σε Float και να μπορείς να κάνεις υπολογισμούς.

 

Αυτό νομίζω είναι ευκολότερο για να μη μπλέξεις με ArrayLists και ιστορίες προς το παρόν.

Δημοσ.

sorry για τα ονοματα, λαθος copy...οπως ειπα και στο πρωτο μου σχολιο ο χρηστης μου δινε πρωτα εναν αριθμο ο οπιος δειχνει ποσα ονοματα πολεων θα εισαχθουν και κατα συνεπεια ποσες θερμοκρασιες(αφου για καθε ενα ονομα μιας πολης υπάρχει και μια θερμοκρασια) αρα ξερω εκ των προτερων ποσα δεδομενα θα εισαχθουν.ξανα λεω οτι για παραδειγμα η πολη αθηνα μπορει να εισαχθει πχ 3 φορες αλλα δεν ειναι απαραίτητο να διαβαστουν ολες μαζι δηλαδη θα ειναι καπως ετσι

athina 25.4

lamia 20.5

kalamata 10.3

athina 5.2

athina 9.1

kalamata 14.5

 

 

 

Τωρα εγω απαγορευεται να χρησιμοποιησω αλλες βιβλιοθηκες ή πακετα εκτος απο τα προκαθορισμενα πακετα της JAVA και το acm.program.*αλλα ουτε μπορω να χρησιμοποιησω ετοιμες συναρτησεις ή μεθοδους που λυνουν το προβλημα.. το ArrayList ειναι κατι απο τα παραπανω ωστε να απαγορευεται να το χρησιμοποιήσω;

Δημοσ.

Το ArrayList ανήκει στο πακέτο java.util. το οποίο πρέπει να το κάνεις import. Τώρα δεν ξέρω τι εννοείς με το προκαθορισμένο. Πάντως δεν είναι external library. Πάντως με βάση την εκφώνηση δεν σου χρειάζεται το ArrayList

Δημοσ.

Η άσκηση μπορεί να λυθεί αρκετά "κομψά" (ας πούμε) με έναν πίνακα και ένα class, το πιο tricky τμήμα της είναι η καταχώρηση των μίνιμουμ & μάξιμουμ θερμοκρασιών αν σε αυτές μπορούν να δηλωθούν και τιμές υπό το μηδέν.

Δημοσ.

Directx τι ακριβως εννοεις με τα μινιμουμ και τα μαξιμουμ; υπαρχει καποιο προβλημα αν αυτες ειναι κατο απο το μηδεν;

Απλά κατά την πρώτη καταχώρηση της πόλης στον πίνακα φρόντισε οι σταθερές στις οποίες αποθηκεύεις την ελάχιστη & μέγιστη θερμοκρασία της να λάβουν κοινή τιμή (την πρώτη μέτρηση θερμοκρασίας) ώστε μετά να μπορείς να συγκρίνεις άνετα τις τυχών νέες θερμοκρασίες που μπορεί να ορίσει ο χρήστης ανεξαρτήτως πρόσημου. Μπορεί να ακούγεται τετριμμένο αλλά θέλει προσοχή καθώς κυκλοφορούν διάφορες συνταγές (πχ. αρχικοποίηση τιμών ως μηδέν ή ως .MIN_VALUE/.MAX_VALUE) που λειτουργούν θαυμάσια για θετικούς αριθμούς αλλά δεν διαχειρίζονται επιτυχώς περιπτώσεις εισαγωγής αρνητικών τιμών -και επειδή έχω συναντήσει κόσμο που μπλοκάρει με αυτό το θέμα έκρινα σκόπιμο να το αναφέρω.

 

Πέραν αυτού, η άσκηση δεν έχει κάποια ιδιαίτερη δυσκολία.

Δημοσ.

Ξερει κανεις μπορεις να εισαγεις τα δεδομενα στο προγραμμα, αλλα οχι απο το πληκτρολογιο αλλα απο ενα αποθηκευμενο κειμενο(txt), στο οποιο σε καθε σειρα εχεις τα δεδομενα που θα σου ζητησει? :unsure:

Δημοσ.

συγκεκριμενα το τρεχω απο το τερματικο, αλλα εχω ubuntu(δεν ξερω αν εχει σημασια..)

τελος παντων......δινω αυτην την εντολη-----> java thermokrasia2.class < thermo.txt

 

και μου βγαζει αυτο το μυνημα ------>

 

Exception in thread "main" java.lang.NoClassDefFoundError: thermokrasia2/class

Caused by: java.lang.ClassNotFoundException: thermokrasia2.class

at java.net.URLClassLoader$1.run(URLClassLoader.java:217)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:205)

at java.lang.ClassLoader.loadClass(ClassLoader.java:321)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)

at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

Could not find the main class: thermokrasia2.class. Program will exit.

 

τι ακριβως παει λαθος?

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

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

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

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

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

Σύνδεση

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

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