BETA

Μαθαίνοντας την Java-ASSIGNMENT-ARITHMETIC-και UNARY OPERATORS [μάθημα 14]

Εικόνα Michail

Συνεχίζουμε τα μαθήματα εκμάθησης της Java, έχοντας ήδη κάνει το πρώτο εισαγωγικό μάθημα και έχοντας δει,πως μπορούμε να εγκαταστήσουμε το NetBeans, προκειμένου να δημιουργήσουμε τις εφαρμογές μας και στη συνέχεια δημιουργώντας την πρώτη μας εφαρμογή.
Έχοντας δει κιόλας, σχετικά με τα LANGUAGE FUNDAMENTALS και στη συνέχεια, Ονομασία Μεταβλητών, και τα INTEGER TYPES, καθώς και τα Floating Point Types, μα και καθορισμό των Boolean και Char Data types, καθώς και για τα Arrays και την εισαγωγή δεδομένων μέσω κλάσης Scanner και την JOptionPane CLASS, όπως και τα Big Numbers,συνεχίζουμε με το 14ο μάθημα της σειράς.
[box color=blue]Σε αυτή την φάση για τα εκπαιδευτικά μαθήματα χρησιμοποιούμε το λειτουργικό σύστημα Windows, μα οι διαφορές είναι ελάχιστες, ως μηδαμινές και στα υπόλοιπα λειτουργικά[/box]
Στο σημερινό java μάθημα θα αναλύσουμε τον τελεστή ανάθεσης, τους τελεστές που μας προσφέρουν την δυνατότητα να πραγματοποιούμε τις κοινές αριθμητικές πράξεις, και τέλος τους τελεστές που δέχονται μόνο έναν όρο, αντί για δύο όρους όπως στις δύο προηγούμενες κατηγορίες, που συνήθως χρησιμοποιούνται για σύντομες διεργασίες επάνω στις μεταβλητές όπως η αύξηση μιας τιμής κατά έναν αριθμό.
Βρισκόμαστε στην κατηγορία του java tutorial που αναφέρεται σαν Assignment, Arithmetic, and Unary Operators.

Ας ξεκινήσουμε από τον πιο απλό τελεστή που είναι ο Assignment Operator και ο οποίος αντιπροσωπεύεται από το σύμβολο της ισότητας “ = “.
Αυτός ο τελεστής χρειάζεται δύο operands για την λειτουργία του, δηλαδή χρειάζεται να δει τιμές ή μεταβλητές και από τις δύο πλευρές του.
Για παράδειγμα, ο assignment operator χρησιμοποιείται κάθε φορά που θέλουμε να αναθέσουμε μια τιμή σε μια μεταβλητή.
Το όνομα της μεταβλητής θα βρίσκεται από τα αριστερά του τελεστή και η τιμή από τα δεξιά:

Αν και ακόμα είναι πολύ νωρίς για να μιλήσουμε για αντικείμενα, απλά αναφέρουμε ότι ο Assignment Operator μπορεί να χρησιμοποιηθεί και στο επίπεδο του αντικειμενοστραφή προγραμματισμού αναθέτοντας σε μια μεταβλητή την τοποθεσία του αντικειμένου (Object Reference).

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

Όπως βλέπουμε από την πιο πάνω εικόνα, οι arithmetic operators + – * / χρησιμοποιούνται στην Java για τις πράξεις της πρόσθεσης, αφαίρεσης, πολλαπλασιασμού και διαίρεσης αντίστοιχα. Συγκεκριμένα, ο τελεστής / θα μας δώσει αποτέλεσμα ακέραιου (integer) εφόσον και οι δύο όροι του τελεστή είναι ακέραιοι (integers), ενώ θα μας δώσει δεκαδικό αποτέλεσμα (float) για οποιαδήποτε άλλη περίπτωση.

Επίσης, το καινούργιο σύμβολο με το οποίο ίσως δεν είσαστε εξοικειωμένοι είναι ο τελεστής % ο οποίος μας επιστρέφει το υπόλοιπο της διαίρεσης.
Για παράδειγμα, εάν διαιρέσουμε το 15 / 2 τότε αυτό θα μας δώσει πηλίκο 7, ενώ αν χρησιμοποιήσουμε το modulus operator για τους ίδιους αριθμούς 15 % 2 αυτή η πράξη θα μας επιστρέψει τον αριθμό 1 που είναι το υπόλοιπο της διαίρεσης.

Σημειώστε εδώ ότι εάν διαιρέσουμε οποιονδήποτε ακέραιο (integer) αριθμό με το 0 τότε θα λάβουμε πίσω μήνυμα λάθους (exception), ενώ εάν διαιρέσουμε έναν δεκαδικό (float) αριθμό με το 0 τότε θα λάβουμε σαν αποτέλεσμα την λέξη infinite (άπειρο) ή ΝαΝ (Not a Number – Δεν είναι αριθμός).

Τέλος, υπάρχει και ο σύντομος τρόπος για να γράφουμε τους τελεστές κυρίως τους αριθμητικούς.
Για παράδειγμα, η έκφραση x += 4; ισούται με την έκφραση x = x + 4;. Με την ίδια λογική, η έκφραση

x *= 4; ισούται με την έκφραση x = x * 4; κτλ.

Ας δούμε όμως ένα πρακτικό παράδειγμα που χρησιμοποιεί τους Arithmetic Operators. Η κλάση ονομάζεται ArithmeticDemo και προέρχεται από τα παραδείγματα της Java:

Line 9 – 10: Αναθέτουμε στην μεταβλητή result το αποτέλεσμα της πρόσθεσης 1 + 2 και στην αμέσως επόμενη γραμμή κώδικα ζητάμε να δούμε την τιμή της μεταβλητής. Το αποτέλεσμα στο παράθυρο του output είναι ο αριθμός 3.

Line 13-14: Σε αυτό το σημείο αφαιρούμε τον αριθμό 1 από την τρέχον τιμή της μεταβλητής result και αμέσως μετά ζητάμε να δούμε την τελική τιμή στην οθόνη μας. Ο αριθμός 2 είναι ο αριθμός που εμφανίζεται στο output.

Line 17-18: Η τιμή της μεταβλητής result μετά τον πολλαπλασιασμό της με τον αριθμό 2 αυξάνει σε 4 και η καινούργια τιμή εμφανίζεται ξανά στο output παράθυρο.

Line 21-22: Η μεταβλητή result (που τώρα έχει τιμή 4) διαιρείται με τον αριθμό 2 οπότε η τιμή της ξαναγίνεται 2 και ζητάμε για ακόμα μια φορά να δούμε το αποτέλεσμα στην οθόνη μας.

Line 25-28: Η τρέχον τιμή της μεταβλητής result είναι 2 και μετά την πρόσθεση με τον αριθμό 8 αυξάνει σε 10. Στην αμέσως επόμενη γραμμή εφαρμόζουμε τον τελεστή modulus με τον οποίο ζητάμε να βρούμε το υπόλοιπο της διαίρεσης ανάμεσα στην μεταβλητή και τον αριθμό 7.
Το αποτέλεσμα είναι ο αριθμός 3 και αυτό φαίνεται στο output παράθυρο της οθόνης μας.

Ο τελεστής ( + ) μπορεί να χρησιμοποιηθεί όχι για την πρόσθεση δύο αριθμών αλλά και για την ένωση δύο ή και περισσοτέρων λέξεων ή φράσεων (strings). Ας δούμε όμως ένα ολοκληρωμένο παράδειγμα που εξηγεί αυτή την δεύτερη ιδιότητα του ( + ) τελεστή. Η κλάση ονομάζεται ConcatDemo και προέρχεται από το tutorial της Java.

Η πρώτη μεταβλητή firstString έχει οριστεί με data type (δηλαδή τι είδος δεδομένα θα δέχεται) String. Της αναθέτουμε την πρόταση “This is”. Με τον ίδιο τρόπο αναθέτουμε στην δεύτερη μεταβλητή με το όνομα secondString την πρόταση “ a concatenated string”. Η τρίτη μεταβλητή thirdString χρησιμοποιεί τον τελεστή ( + ) για να ενώσει τις δύο προτάσεις σε μια (“This is” + “ a concatenated String.”). Η πρόσθεση ανάμεσα σε String μεταβλητές πάντα καταλήγει στην απλή ένωση των τιμών τους. Η τελική μεταβλητή θα έχει την ολοκληρωμένη πρόταση “This is a concatenated String” όπως άλλωστε φαίνεται και στο αποτέλεσμα.

Ερχόμαστε τώρα στην τρίτη κατηγορία που αναφέρεται σαν Unary Operators. Η βασική διαφορά με τις υπόλοιπες δυο κατηγορίες επικεντρώνεται στο γεγονός ότι απαιτείται μόνο ένας όρος (ένας operand) αντί για δύο.
Οι Unary Operators προσφέρουν αρκετές υπηρεσίες όπως αύξηση/μείωση τιμής κατά ένα , αναστροφή μιας boolean τιμής κτλ. Ο παρακάτω πίνακας περιγράφει τους ρόλους που έχουν τα σύμβολα όταν χρησιμοποιούνται σαν Unary Operators.

-Ας δώσουμε όμως μια γρήγορη εξήγηση για κάθε ένα από αυτά:

  • + Όταν χρησιμοποιείται μπροστά από αριθμό δηλώνει ότι ο αριθμός είναι θετικός.
  • - Όταν χρησιμοποιείται μπροστά από αριθμό δηλώνει ότι ο αριθμός είναι αρνητικός.
  • ++ Η χρήση των δύο συμβόλων πρόσθεσης σε έναν αριθμό αυξάνει τον αριθμό κατά ένα.
  • Η χρήση των δύο συμβόλων της αφαίρεσης σε έναν αριθμό μειώνει τον αριθμό κατά ένα.
  • ! Αντιστρέφει την λογική τιμή ενός Boolean αριθμού ή δηλώνει άρνηση

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

Line 8- 9: Το σύμβολο μπροστά από τον αριθμό 1 δηλώνει απλά ότι ο αριθμός είναι θετικός. Και χωρίς αυτό το Unary Operator πάλι θα εξασφαλιζόταν η θετικότητα του αριθμού εξ ορισμού. Με την εντολή System.out.println απλά ζητάμε να δείξουμε το αποτέλεσμα στην οθόνη μας.

Line 11-12: Η τιμή της μεταβλητής result ήταν 1 αλλά μετά την εφαρμογή του Unary Operator ( — ) η τιμή μειώθηκε κατά 1 οπότε τώρα το αποτέλεσμα είναι 0.

Line 14-15: Η χρήση του Unary Operator ( ++ ) αυξάνει την μεταβλητή κατά ένα αριθμό με αποτέλεσμα η τρέχον τιμή να είναι τώρα 1.

Line 17-18: Αλλάζουμε την τιμή της μεταβλητής από θετική σε αρνητική προσθέτοντας το μονό σύμβολο ( – ) μπροστά από την μεταβλητή result.

Line 19-23: Ορίζουμε μια καινούργια μεταβλητή success με αρχική τιμή false και στην πρώτη println πρόταση ζητάμε απλά να δούμε την τιμή στην οθόνη μας. Στο δεύτερο όμως αίτημα, χρησιμοποιούμε το σύμβολο ( ! ) μπροστά από την μεταβλητή που αντιστρέφει την τιμή της και από false την αλλάζει σε true πριν την εμφανίσει στην οθόνη.

Πριν κλείσουμε αυτό το ενδιαφέρον κεφάλαιο στους Unary Operators πρέπει να εξηγήσουμε την μεγάλη διαφορά που παρουσιάζει στο αποτέλεσμα η χρήση των διπλών συμβόλων αύξησης/μείωσης αριθμών ( ++ / — ) όταν χρησιμοποιούνται πριν από τον αριθμό και μετά από τον αριθμό.
Για παράδειγμα, οι μεταβλητές result++ και ++result θα δώσουν το ίδιο αποτέλεσμα – δηλαδή την τιμή της μεταβλητής αυξημένη κατά ένα.
Η μεγάλη διαφορά όμως βρίσκεται στο πότε γίνεται η αύξηση της τιμής – πριν πραγματοποιηθεί η πράξη η μετά.
Βασικά η πρακτική λύση είναι εντελώς οπτική – βλέποντας τα σύμβολα να είναι μπροστά από την μεταβλητή πρώτα θα αυξάνεται/μειώνεται η τιμή της μεταβλητής και μετά ολοκληρώνεται οποιαδήποτε άλλη πράξη ή ανάθεση τιμής. Εάν ο τελεστής είναι μετά από την μεταβλητή τότε θα χρησιμοποιηθεί για την πράξη η αρχική τιμή της μεταβλητής και μετά θα γίνει η αύξηση/μείωση του αριθμού.
Ας δούμε αυτή την ιδιαιτερότητα του τελεστών αύξησης και μείωσης σε ένα πιο συγκεκριμένο παράδειγμα:


Line 6-9: Ορίζουμε μια μεταβλητή i με αρχική τιμή 3 και μετά με τον Unary Operator ( ++ ) αυξάνουμε την τιμή της κατά έναν αριθμό.
Σύμφωνα με την θεωρία που αναλύσαμε προηγουμένως, ο τελεστής ακολουθεί μετά από τον αριθμό.
Αυτό σημαίνει ότι πρώτα θα πραγματοποιηθεί οποιαδήποτε πράξη επάνω στην μεταβλητή και μετά η τιμή της θα αυξηθεί κατά έναν αριθμό.
Στην ίδια γραμμή κώδικα δεν ακολουθεί καμία άλλη πράξη, οπότε η αύξηση της τιμής γίνεται αμέσως. Στην αμέσως επόμενη γραμμή ζητάμε να δούμε την τρέχον τιμή της μεταβλητής που φυσικά θα είναι ο αριθμός 4.

Line 10-12: Ο τελεστής προηγείται της μεταβλητής οπότε η αύξηση της τιμής της θα πραγματοποιηθεί αμέσως.
Το αποτέλεσμα της μεθόδου println μας δείχνει ότι τώρα η μεταβλητή έχει τιμή 5.

Line 14: Εδώ ο τελεστής ( ++ ) προηγείται της μεταβλητής, οπότε πρώτα θα λάβει μέρος η αύξηση της τιμής και μετά θα γίνει η εμφάνισή της στην οθόνη. Η μεταβλητή έχει τρέχον τιμή 6 τώρα.

Line 16: Εδώ ο τελεστής ακολουθεί την μεταβλητή, που έχει σαν συνέπεια πρώτα να γίνει η πράξη επάνω στην μεταβλητή (δηλαδή η εμφάνιση της τιμής της αφού την καλεί η μέθοδο println) και μετά θα λάβει μέρος η αύξηση της τιμής της.
Οπότε εμείς στην οθόνη μας θα δούμε πάλι την τιμή 6 ενώ στην πραγματικότητα η τιμή εσωτερικά μετά την εμφάνιση της τιμής της έχει αυξηθεί σε 7. Και αυτό ακριβώς επιβεβαιώνουμε με την αμέσως επόμενη γραμμή κώδικα.

Line 18: Εδώ απλά ζητάμε να δούμε πια είναι η τρέχον τιμή της μεταβλητής και σύμφωνα με την ανάλυση που κάναμε στο προηγούμενο βήμα θα δούμε ότι πράγματι είναι η τιμή 7.

Μιχάλης Κασάπογλου(http://kassapoglou.com)

  • Σχόλια

0 Comments:

Scroll to Top