BETA

Μαθαίνοντας την Java-Εισαγωγή στους μεγάλους αριθμούς [μάθημα 13]

Εικόνα Michail

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

Στο σημερινό μάθημα θα ολοκληρώσουμε την αναφορά μας στα Primitive Data Types, θα αναφερθούμε στους Big Numbers, που αν και δεν ανήκουν στην κατηγορία των Primitive μας δίνουν την δυνατότητα να διαχειριζόμαστε αριθμούς με πολλά ψηφία, θα κάνουμε μια περίληψη στην θεωρία που έχουμε αναφερθεί μέχρι τώρα και τέλος θα προχωρήσουμε στην ενότητα που αναφέρεται στους operators (τελεστές).

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

Βρισκόμαστε, σύμφωνα με το online tutorial της Java, στο κεφάλαιο Summary of Variables που μας προσφέρει μια περίληψη των όσων έχουμε αναφέρει μέχρι στιγμής για την δημιουργία και την χρήση των μεταβλητών.

Η γλώσσα προγραμματισμού Java χρησιμοποιεί το όνομα “fields” αλλά και το όνομα “variables” ως τμήμα της ορολογίας της για να αναφερθεί γενικότερα σε μεταβλητές που χρησιμοποιούνται σε κλάσεις.
Σε αυτό το πρώτο μέρος των μαθημάτων δεν θα μιλήσουμε καθόλου για την έννοια της κλάσης και γενικότερα του αντικειμενοστραφή προγραμματισμού.
Οπότε δεν υπάρχει ιδιαίτερος λόγος να πανικοβάλλεστε εάν η πιο κάτω εξήγηση δεν είναι καθόλου κατανοητή. Απλά με βάση το online tutorial θεωρεί αναγκαίο γεγονός η Oracle να σας δώσει μια πρώτη γεύση της διαφοροποίησης μεταξύ του ορισμού των fields και των variables.

Μια κλάση έχει την δυνατότητα να δημιουργεί αντικείμενα τα οποία έχουν σαν ιδιότητες τους τις μεταβλητές που έχουν οριστεί στην κλάση.
Για παράδειγμα, εάν μέσα σε μια κλάση TEST έχουμε ορίσει δυο μεταβλητές με τα ονόματα variable1 και variable2 και μετά δημιουργήσουμε ένα αντικείμενο object1 από αυτή την κλάση, το αντικείμενο που θα δημιουργηθεί θα έχει σαν ιδιότητες του τις δύο μεταβλητές.
Αυτό ισχύει για κάθε αντικείμενο που θα δημιουργηθεί.
Οπότε και το αντικείμενο object2 που θέλουμε να δημιουργήσουμε αργότερα από την ίδια κλάση TEST θα έχει αποκτήσει και αυτό τις μεταβλητές variable1 και variable2 σαν ιδιότητες του.
Η δημιουργία αντικειμένου στην Java ονομάζεται instance και οι μεταβλητές τις κλάσης οι οποίες περνάνε σαν ιδιότητες στα αντικείμενα που δημιουργούνται ονομάζονται instance variables .

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

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

Μέχρι τώρα, έχουμε μιλήσει και αναφερθεί στα οκτώ primitive types που είναι byte, short, int, long, float, double, boolean και char.
Πολλοί από εσάς ίσως αναρωτιούνται γιατί το data type String δεν βρίσκεται μέσα στα προηγούμενα που αναφέραμε.
Η απάντηση είναι απλή: το data type String με τον οποίο ορίζουμε περισσότερους από έναν χαρακτήρα (π.χ. String name = “michail”;) δεν είναι primitive αλλά χρησιμοποιεί την έννοια δημιουργίας αντικειμένου από την κλάση String. Για τα Strings θα αφιερώσουμε ένα ολόκληρο μάθημα αργότερα για να δείτε πως μπορείτε να διαχειριστείτε ονόματα. Επίσης, ένα άλλο είδος που είδαμε σε προηγούμενο μάθημα και έχει συμπεριφορά αντικειμένου και όχι primitive type είναι ο πίνακας (array).

Εάν τώρα η ακριβής περιγραφή ενός αριθμού δεν μπορεί να πραγματοποιηθεί ούτε με το γνωστό integer data type αλλά ούτε και με το float data type, μπορούμε να χρησιμοποιήσουμε τις δύο κλάσεις BigInteger και BigDecimal από το πακέτο java.math .
Αυτές οι δύο κλάσεις έχουν δημιουργηθεί αποκλειστικά και μόνο για την διαχείριση αριθμών που αποτελούνται πραγματικά από έναν αρκετά μεγάλο αριθμό ψηφίων. Όπως έχετε ήδη καταλάβει, η κλάση BigInteger θα είναι υπεύθυνη για την διαχείριση των ακεραίων αριθμών, ενώ η κλάση BigDecimal θα είναι υπεύθυνη για τους δεκαδικούς αριθμούς.

Μπορούμε πολύ εύκολα να αλλάξουμε έναν απλό ακέραιο αριθμό σε έναν big number χρησιμοποιώντας την μέθοδο valueOf.
Η συγκεκριμένη μέθοδος δέχεται σαν μεταβλητή τον αρχικό ακέραιο αριθμό και αφού τον μετατρέψει σε big number, θα αναθέσει την τιμή με το νέο data type σε μια καινούργια μεταβλητή:

BigInteger a = BigInteger.valueOf(100);

Ίσως το μόνο άβολο πράγμα που έχετε να αντιμετωπίσετε όταν κάνετε μαθηματικές πράξεις με τους big numbers είναι ότι δεν μπορείτε να χρησιμοποιήσετε τα γνωστά μαθηματικά σύμβολα ( π.χ + και / ) αλλά θα πρέπει να πραγματοποιήσετε τις πράξεις με την χρήση μεθόδων που αντιπροσωπεύουν τις αριθμητικές πράξεις. Για παράδειγμα, για την πρόσθεση υπάρχει η μέθοδος add, ενώ για τον πολλαπλασιασμό υπάρχει η μέθοδος multiply.

BigInteger a = BigInteger.valueOf(100);
BigInteger c = a.add(b);

// Είναι το αντίστοιχο του c = a + b
Δείτε περισσότερες πληροφορίες όσον αφορά το πακέτο java.math.

-Ας δούμε όμως ένα συγκεκριμένο παράδειγμα:

Στο τρίτο και τελευταίο μέρος του σημερινού μας μαθήματος θα κάνουμε μια εισαγωγή στους operators (τελεστές).
Σαν operators ορίζουμε τα σύμβολα με τα οποία μπορούμε να κάνουμε διάφορες πράξεις με δύο ή και περισσότερες μεταβλητές. Για παράδειγμα με τον operator σύμβολο ( + ) μπορούμε να κάνουμε αριθμητικές πράξεις.
Οι δύο μεταβλητές οι οποίες βρίσκονται αριστερά και δεξιά από το σύμβολο και οι οποίες συμμετέχουν στην διαδικασία της πρόσθεσης ονομάζονται operands.
Το πρώτο πράγμα που μαθαίνουμε όταν ασχολούμαστε με τους operators δεν είναι η λίστα με τα σύμβολα τα οποία έχουμε διαθέσιμα, αλλά η σειρά προτεραιότητας η οποία ακολουθείται από την java για να μας δώσει το τελικό αποτέλεσμα:

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

Οι operators όμως που βρίσκονται στο ίδιο επίπεδο (όπως για παράδειγμα εκείνοι της πρόσθεσης + και της αφαίρεσης -) έχουν την ίδια προτεραιότητα. Αυτό σημαίνει ότι θα πρέπει να υπάρξει και ένας δεύτερος κανόνας για να ορίσει την σωστή σειρά των πράξεων.
Ο κανόνας υπάρχει και είναι πολύ απλός: Όλοι οι operators, με εξαίρεση το σύμβολο της ισότητας, αξιολογούνται από αριστερά προς τα δεξιά. Για παράδειγμα η πράξη 3+12-5+9 θα έχει σαν αποτέλεσμα τον αριθμό 19.
Για να δώσουμε ένα πιο ολοκληρωμένο παράδειγμα τώρα, βεβαιώστε ότι το αποτέλεσμα της πιο κάτω πράξης είναι ο αριθμός 18:
Ας δούμε πρώτα τον αναλυτικό πίνακα που προέρχεται από το επίσημο site της Java και μετά θα επεκτείνουμε περισσότερο σε αυτή την θεωρία μας:

34 / 2 – 5 +3 * 2

Το σύμβολο της ισότητας είναι το μόνο σύμβολο που διαφέρει από αυτόν τον κανόνα γιατί η αξιολόγηση γίνεται από τα δεξιά προς τα αριστερά.
Με άλλα λόγια όταν έχουμε την ισότητα α = 5 αυτό σημαίνει ότι θα αναθέσουμε την τιμή 5 στην μεταβλητή α.
Δηλαδή ξεκινάμε την αξιολόγηση από την δεξιά πλευρά της ισότητας.

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

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

  • Σχόλια

0 Comments:

Scroll to Top