Post Pic

Μαθαίνοντας την JAVA – Μέρος 7

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

Οι Αριθμητικοί Τελεστές στη Java

Οι αριθμητικοί τελεστές που υπάρχουν στην Java, περιλαμβάνουν όλους τους γνωστούς τελεστές αριθμητικών πράξεων δηλαδή πρόσθεσης (+), αφαίρεσης (-), πολλαπλασιασμού (*), διαίρεσης (/) και υπολοίπου ή modulo (%). Ας δούμε αυτούς τους τελεστές στον πιο κάτω πίνακα.

lesson07-01

Χρησιμοποιώντας δηλαδή τους πιο πάνω τελεστές, μπορούμε να φτιάξουμε αριθμητικές προτάσεις και να δώσουμε τιμές στις μεταβλητές μας, κάπως έτσι:

int x

x = 5 + 5;

Μετά την εκτέλεση της πιο πάνω πρότασης, η τιμή της μεταβλητής x θα είναι 10.

Μπορούμε επίσης να εκτελέσουμε και πιο σύνθετες προτάσεις, οι οποίες να περιλαμβάνουν περισσότερους από ένα τελεστές, όπως για παράδειγμα:

Θέλουμε να υπολογίσουμε την τελική τιμή ενός προϊόντος, του οποίου η τιμή πώλησης χωρίς ΦΠΑ είναι 200 ευρώ. Το ποσοστό του ΦΠΑ είναι 19%.

double finalPrice;

finalPrice = 200 * (1 + 19/100);

Μετά την εκτέλεση της πιο πάνω πράξης, η τιμή της μεταβλητής finalPrice θα είναι 238.

Κατά την εκτέλεση αυτών των αριθμητικών προτάσεων, ισχύει απόλυτα η σειρά προτεραιότητας των τελεστών, ακριβώς όπως θα τους υπολογίζαμε και σε μια αριθμητική πράξη γράφοντας σε χαρτί.

Αυτό σημαίνει πως εκτελούνται πάντα με την εξής σειρά προτεραιότητας:

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

Γι’ αυτό και έτσι η πρόταση μας 200 * (1 + 19/100) θα υπολογιστεί με την εξής σειρά:

Πρώτα θα υπολογιστεί το αποτέλεσμα του 19/100, μετά θα προστεθεί 1, και τέλος το αποτέλεσμα θα πολλαπλασιαστεί επί 200, και έτσι θα έχουμε το τελικό αποτέλεσμα  238 στη μεταβλητή μας.

Δύο τελεστές οι οποίοι χρειάζεται να αναλύσουμε λίγο περισσότερο, είναι ο τελεστής του υπολοίπου (%) και ο τελεστής της διαίρεσης (/). Τον πρώτο θα τον εξηγήσουμε καθώς πολλοί ίσως να μην γνωρίσουν τη συγκεκριμένη αλγεβρική έννοια, ενώ για τον δεύτερο χρειάζεται να αναφέρουμε μερικά πράγματα καθώς η λειτουργία του στη Java κρύβει κάποιες ιδιαιτερότητες.

Τελεστής Υπολοίπου

Όσοι γνωρίζετε τη σημασία του τελεστή υπολοίπου, μπορείτε να προσπεράσετε αυτό το μέρος.

Ο τελεστής του υπολοίπου, υπολογίζει το υπόλοιπο που απομένει μετά από μια ακέραιη διαίρεση. Δηλαδή για παράδειγμα το αποτέλεσμα της πράξης 7%4 είναι 3, ενώ το αποτέλεσμα της πράξης 17%5 είναι 2.

Πως γίνεται αυτό; Ας πάρουμε το πρώτο παράδειγμα, το 7%4. Το αποτέλεσμα της ακέραιης διαίρεσης του 7 με το 4 είναι 1, ενώ το υπόλοιπο που απομένει είναι 3. Το 3 θα είναι και η τιμή που θα πάρει η μεταβλητή μας μετά από μια τέτοια πράξη. Είναι απλά μαθηματικά, δεν νομίζω πως χρειάζεται να επεκταθώ περισσότερο.

Τελεστής Διαίρεσης

Ας δούμε τώρα τον τελεστή διαίρεσης στη Java, και την ιδιαιτερότητα που έχει.

Θα γίνουν όλα περισσότερο κατανοητά, αν ξεκινήσω με ένα παράδειγμα..

Ας υποθέσουμε πως έχουμε 30 σοκολάτες, τις οποίες θέλουμε να μοιράσουμε σε 4 παιδάκια.

Για να υπολογίσουμε πόσες σοκολάτες θα δώσουμε σε κάθε παιδί και πόσες θα μας περισσέψουν, μπορούμε να χρησιμοποιήσουμε τους τελεστές διαίρεσης και υπολοίπου ως εξής:

int chocolatesToEachKid, chocolatesLeft;

chocolatesToEachKid = 30/4;

chocolatesLeft = 30%4;

Μετά την εκτέλεση τον πιο πάνω εντολών, η τιμή της μεταβλητής chocolatesToEachKid θα είναι 7 (ως αποτέλεσμα της διαίρεσης 30/4) ενώ η τιμή της μεταβλητής chocolatesLeft θα είναι 2. Ίσως τώρα να διερωτάσαι γιατί το αποτέλεσμα της διαίρεσης 30/4 μας κάνει 7 και όχι 7.5 όπως κανονικά θα έπρεπε.

Η απάντηση είναι η εξής.

Στη Java, το ίδιο σύμβολο της διαίρεσης χρησιμοποιείτε για δύο μορφές διαιρέσεων. Χρησιμοποιείτε τόσο για την πραγματοποίηση διαιρέσεων ακεραίων, όσο και για την πραγματοποίηση διαιρέσεων πραγματικών αριθμών.

Θα μπορούσε να υπήρχαν ξεχωριστοί τελεστές για αυτές τις δύο μορφές διαιρέσεων, όμως ο ίδιος τελεστής (/) χρησιμοποιείτε και για τις δύο μορφές. Αυτό σημαίνει πως ο τελεστής της διαίρεσης είναι υπερφορτωμένος (overloaded). Περισσότερα για το overloading θα μάθουμε σε μελλοντικά βοηθήματα, όμως για τώρα αυτό που χρειάζεται να ξέρεις είναι πως το overloading πάει να πει πως ο ίδιος τελεστής (σε αυτή την περίπτωση ο τελεστής της διαίρεσης), μπορεί να συμπεριφέρεται διαφορετικά υπό ορισμένες περιστάσεις.

Έτσι όσο αφορά τον τελεστή της διαίρεσης, ο compiler της Java ξέρει πότε θα πραγματοποιήσει διαίρεση ακεραίων, και πότε διαίρεση πραγματικών αριθμών.

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

Αυτό αποφασίζετε ανάλογα με τις τιμές οι οποίες διαιρούνται (ή αν θέλεις, με τον τύπο των μεταβλητών που διαιρούνται). Αν τουλάχιστο μία από τις διαιρούμενες τιμές είναι πραγματικός αριθμός, τότε θα γίνει διαίρεση πραγματικών αριθμών και το αποτέλεσμα μας θα είναι πραγματικός αριθμός (έτσι θα πρέπει να έχουμε φροντίσει η μεταβλητή η οποία θα δεκτεί την τιμή η οποία θα προκύψει, να είναι σε θέση να πάρει τιμές με δεκαδικά). Εάν η διαίρεση γίνεται μεταξύ ακέραιων αριθμών (όπως στο πιο πάνω παράδειγμα), τότε θα γίνει διαίρεση ακεραίων, και το όποιο υπόλοιπο περισσέψει θα «χαθεί». Αυτός είναι ο λόγος που το αποτέλεσμα της διαίρεσης 30/4 θα είναι 7 και όχι 7.5 (Υπάρχει βέβαια κάποιος τρόπος με τον οποίο μπορούμε να «αναγκάσουμε» την Java να χρησιμοποιήσει όποιο τρόπο διαίρεσης επιθυμούμε, όμως αυτό είναι κάτι που θα μάθουμε στο μέλλον).

Τελεστές Αύξησης και Μείωσης

Βέβαια, μια μεταβλητή στη Java, δεν μπορεί να χρησιμοποιηθεί μόνο στο αριστερό μέρος μιας πράξης. Μπορεί να χρησιμοποιηθεί εξίσου και στο δεξί.

Δηλαδή, εάν είχαμε δηλωμένη μια μεταβλητή με το όνομα x, της οποία θα θέλαμε να αυξήσουμε την τιμή κατά 1 μονάδα, τότε ο κώδικας μας θα ήταν ο εξής:

x = x + 1;

Με την πιο πάνω εντολή, η τιμή του x αυξήθηκε κατά 1 μονάδα. Μπορούμε όμως πιο εύκολα και γρήγορα να χρησιμοποιήσουμε την εξής συντομογραφία η οποία είναι διαθέσιμη στη Java και κάνει ακριβώς το ίδιο πράγμα:

x++;

Με τον ίδιο τρόπο, γράφοντας x–; παίρνουμε το ίδιο αποτέλεσμα σαν η εντολή να ήταν x = x -1;

Μπορούμε επίσης να κάνουμε και το εξής:

y = x++;

Με αυτό τον τρόπο, αυτό που γίνεται είναι το εξής, το y παίρνει την αρχική τιμή του x, και το x αυξάνεται κατά 1 μονάδα. Έτσι εάν το x ήταν 5, μετά την εκτέλεση του πιο πάνω, θα είχε γίνει 6, ενώ το y θα είχε πάρει προηγουμένως την τιμή 5.

Τα ++  και τα — μπορούν να χρησιμοποιηθούν όχι μόνο πίσω, αλλά και μπροστά από μια μεταβλητή, έτσι ακολουθώντας τον ίδιο τρόπο σκέψης, με την εντολή:

y = ++x;

θα συμβεί το εξής, η τιμή του x πρώτα θα αυξηθεί κατά μια μονάδα, και στη συνέχεια θα δοθεί η νέα τιμή στο y. Έτσι x και y θα έχουν την ίδια τιμή.

Ακόμη μια συντομογραφία που υπάρχει στην Java είναι η:

y += x;

και είναι η συντομογραφία για το

y = y + x;

Ανάλογες συντομογραφίες υπάρχουν για όλους τους τελεστές αριθμητικών πράξεων.

Αυτές οι συντομογραφίες χρησιμοποιούνται συχνά από τους προγραμματιστές, και θα τις χρησιμοποιούμε και εμείς στα προγράμματα μας. Ας τις δούμε όμως όλες μαζί στον πιο κάτω πίνακα.

lesson07-02

lesson07-03

Αυτά για σήμερα.

Την επόμενη φορά, θα μάθουμε πώς να τυπώνουμε τις τιμές των μεταβλητών μας στην οθόνη του υπολογιστή, έτσι ώστε να είμαστε σε θέση να παρουσιάζουμε δεδομένα στον χρήστη. Αυτό θα είναι το εύκολο μέρος. Το μεγαλύτερο κομμάτι θα το αναλώσουμε για να γράψουμε και να εξηγήσουμε το δεύτερο μας πρόγραμμα το οποίο θα περιλαμβάνει όλα όσα μάθαμε μέχρι σήμερα.

Θα τα πούμε και πάλι πάρα πολύ σύντομα.

Trackbacks - Pingbacks

Αφήστε ένα σχόλιο

* Το όνομα σας, το Email, και το σχόλιο είναι απαιτούμενα

Γραφτείτε στις Email Ενημερώσεις

Εισάγετε το email σας:

Powered by FeedBurner

Log In

Register

Lost your Password?

Tag Cloud

Οι Φίλοι μας στο Twitter

lennondtps
FORADA
papaki
gegenos
jsclavos
tophostGR
gkapraras
wdfgr
nfountas
zouri9
Th3Ag3nt
ThodorisV
thevoyager
techfansGR
wp2blog
St0iK
andreas_m68
herath72
Dimitraakis
silve992
kymagr
papano
amorphis_
g_argyrakis
gstam78
nikos171984
gkatsampirhs
GamesHellasGR
kalliophhhh
dimsim7
giorgioret
Zoitsa_2010
ultrathunder
Weird_AL
fotisk
payne4life
splusgr
Chrysanthospro
Serderides
LewisHowes
bartvii
hambos227
ideodoxeio
BeBestT
gamosgamos
Φίλοι: 271 Μας ακολουθούν: 221

To GreekTuts Στο Διαδύκτιο

Bookmark & Share

Γίνε Συνδρομητής Στο GreekTuts


Κερδίστε πρόσβαση σε επιπλέον υλικό και άρθρα, αλλά και πολλές άλλες παροχές και προσφορές αγοράζοντας μία απο τις συνδρομές που σας προσφέρει το GreekTuts.

Γράψτε Για Το GreekTuts


Θέλετε και εσείς να γράψετε άρθρα για το GreekTuts; Διαβάστε περισσότερα εδώ. Οποιοσδήποτε μπορεί να στείλει, γι'αυτό αδράξτε την ευκαιρία και στείλτε μας και εσείς.