Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών Δεδομένα – Μεταβλητές – Υπολογισμοί στη Java Βελώνης Γεώργιος – Καθηγητής Πληροφορικής ΠΕ20 Σχολ. Έτος 2015-16
Περιεχόμενα 1 Τι είναι τα αναγνωριστικά Μεταβλητές και δεδομένα της Java Σταθερές της Java Σχόλια Ακέραιοι τύποι δεδομένων Αριθμοί κινητής υποδιαστολής Τελεστές αριθμητικών πράξεων Αριθμητικές παραστάσεις Τελεστής εκχώρησης Άλλες δυνατότητες εκχώρησης Μοναδιαίοι τελεστές Λογικός τύπος δεδομένων Τελεστές σύγκρισης
Περιεχόμενα 2 Λογικοί τελεστές Τελεστές δυαδικών πράξεων Χαρακτήρες Αλφαριθμητικά Αρχικές τιμές για τις μεταβλητές-μέλη Μετατροπή τύπου δεδομένων Μαθηματικές συναρτήσεις Μετατροπή αλφαριθμητικών σε αριθμούς
Τι είναι τα αναγνωριστικά Τα αναγνωριστικά (Identifiers) είναι λέξεις που ορίζονται από τον προγραμματιστή και χρησιμοποιούνται σαν ονόματα μεταβλητών, κλάσεων, μεθόδων κ.ά. ενός προγράμματος της Java αλλά και γενικότερα. Είναι δηλαδή ονόματα των οποίων η λειτουργία τους σε ένα πρόγραμμα καθορίζεται από τον προγραμματιστή. Για τον σχηματισμό των αναγνωριστικών της Java πρέπει να ακολουθούνται οι παρακάτω κανόνες: Μπορούν να έχουν οποιοδήποτε μήκος χαρακτήρων. Μπορούν να αρχίζουν από γράμμα του λατινικού αλφαβήτου ή τα ειδικά σύμβολα «_» και «$». Μπορούν να περιέχουν ψηφία αλλά δεν επιτρέπεται να αρχίζουν με ψηφίο. Δε μπορούν να είναι δεσμευμένες λέξεις της γλώσσας.
Τι είναι τα αναγνωριστικά Μετά τον πρώτο χαρακτήρα ενός αναγνωριστικού, οι υπόλοιποι μπορεί να είναι είτε γράμματα, είτε άλλοι χαρακτήρες, όχι όμως κάποιοι από εκείνους που χρησιμοποιούμε για πράξεις (+,-,*,/,%,@, κ.λπ.). Προσοχή! Η Java είναι ευαίσθητη στα πεζά – κεφαλαία και γι’ αυτό θα πρέπει να είμαστε προσεκτικοί στις δηλώσεις μας. Άλλο το αναγνωριστικό name, άλλο το Name και άλλο το ΝΑΜΕ.
Μεταβλητές και δεδομένα της Java Ως μεταβλητή (variable) ορίζουμε μία περιοχή της μνήμης στην οποία έχουμε δώσει ένα συμβολικό όνομα και τη χρησιμοποιούμε για την αποθήκευση δεδομένων. Το περιεχόμενο μιας μεταβλητής μπορεί να μεταβάλλεται κατά τη διάρκεια εκτέλεσης του προγράμματος. Τα δεδομένα όμως που αποθηκεύονται στις μεταβλητές δεν έχουν όλα την ίδια μορφή και δεν μπορούμε να εκτελέσουμε σε όλα την ίδια επεξεργασία. Αν πρόκειται για αριθμητικό δεδομένο τότε είναι δυνατό να μετέχει σε αριθμητικές πράξεις, κάτι το οποίο δεν έχει νόημα για αλφαριθμητικά δεδομένα. Επιπλέον, ανάλογα με την μορφή και το μέγεθος των δεδομένων, ο υπολογιστής ακολουθεί και διαφορετικό τρόπο παράστασής τους στην μνήμη.
Μεταβλητές και δεδομένα της Java Συνοψίζοντας τα παραπάνω, μπορούμε να πούμε ότι οι μεταβλητές έχουν τρία χαρακτηριστικά : Τιμή : δηλαδή, το περιεχόμενο της μεταβλητής, το οποίο καταχωρείται με εντολές του προγράμματος. Η τιμή μίας μεταβλητής μπορεί να αλλάξει κατά την διάρκεια εκτέλεσής του προγράμματος. Όνομα : είναι ένα αναγνωριστικό , που χρησιμοποιείται για να αναφερόμαστε στην μεταβλητή μέσα από το πρόγραμμα. Τύπο : που καθορίζει το είδος αλλά και το εύρος των τιμών που μπορεί να πάρει η μεταβλητή, καθώς και τις πράξεις που μπορούν να εφαρμοστούν σε αυτήν.
Μεταβλητές και δεδομένα της Java Πριν χρησιμοποιήσουμε μια μεταβλητή πρέπει πρώτα να δηλώσουμε τον τύπο της και το όνομά της. Η δηλώσεις συνήθως γίνονται στην αρχή του προγράμματος, αν και μπορούν να γίνουν και σε οποιοδήποτε άλλο σημείο μέσα σε αυτό. Σύνταξη: τύπος_μεταβλητής όνομα_μεταβλητής = τιμή Η απόδοση αρχικής τιμής σε μεταβλητή είναι προαιρετική. Αν έχουμε περισσότερες από μία μεταβλητές του ιδίου τύπου, μπορούμε να τις δηλώσουμε στην ίδια γραμμή χωρισμένες με κόμμα. Παραδείγματα δηλώσεων μεταβλητών: int age; String name = "George"; boolean is_married; float x, y, z;
Μεταβλητές και δεδομένα της Java Παραλλαγή του προγράμματος που εμφανίζει το μήνυμα «Hello World!», κάνοντας χρήση δύο μεταβλητών τύπου string. class hello2{ public static void main(String args []) { String s1="Hello"; String s2 ="World!"; System.out.println(s1+" "+s2); }
Μεταβλητές και δεδομένα της Java Στην Java υπάρχουν δύο βασικές κατηγορίες μεταβλητών, οι μεταβλητές-μέλη των κλάσεων (member variables) και οι τοπικές μεταβλητές (local variables). Η πρώτη κατηγορία μεταβλητών, αν δε πάρει αρχική τιμή από τον προγραμματιστή ,τότε την παίρνει από το σύστημα, ενώ η δεύτερη, παίρνει τιμή αποκλειστικά από τον προγραμματιστή πριν από κάθε χρήση. Σε περίπτωση που ο προγραμματιστής παραλείψει να δώσει αρχική τιμή σε μια τοπική μεταβλητή, τότε ο μεταγλωττιστής θα εμφανίσει μήνυμα λάθους.
Σύνταξη: final τύπος_σταθεράς ΌΝΟΜΑ_ΣΤΑΘΕΡΑΣ = τιμή; Σταθερές της Java Οι σταθερές έχουν όλα τα χαρακτηριστικά των μεταβλητών, δηλαδή όνομα, τύπο και τιμή. Η διαφορά τους βρίσκεται στο ότι η τιμή μιας σταθεράς παραμένει αμετάβλητη κατά την διάρκεια εκτέλεσης του προγράμματος. Για να δηλώσουμε σταθερές σε ένα πρόγραμμα Java, χρησιμοποιούμε στην αρχή της δήλωσης τη λέξη κλειδί final και ακολουθεί ο τύπος, το όνομα και η τιμή που λαμβάνει, με τη χρήση της εντολής εκχώρηση τιμής (=). Οι προγραμματιστές της Java συνηθίζουν να χρησιμοποιούν κεφαλαίους χαρακτήρες για τις τιμές των σταθερών και αυτό είναι μία σύμβαση, που καλό θα ήταν να χρησιμοποιούμε, προκειμένου να γίνονται πιο ευανάγνωστα τα προγράμματά μας από τους άλλους. Σύνταξη: final τύπος_σταθεράς ΌΝΟΜΑ_ΣΤΑΘΕΡΑΣ = τιμή;
Σταθερές της Java Παραδείγματα δηλώσεων σταθερών: final double FPA= 0.23; final short MAX_NUMBER= 32767; final String MY_COUNTRY = "GR"; Παράδειγμα: public class price{ public static void main(String args[ ]) { final double FPA= 0.24; float p_value = 100; double total = p_value + p_value * FPA; System.out.println("total: " +total); }
Σχόλια Τα σχόλια σε ένα πρόγραμμα χρησιμοποιούνται για να δίνουμε διευκρινίσεις για την λειτουργία του προγράμματος, του περιεχομένου μιας μεταβλητής και γενικά για να κάνουμε πιο ευανάγνωστο και κατανοητό το πρόγραμμά μας. Τα σχόλια δεν δίνουν κάποια οδηγία στον μεταφραστή, γι’ αυτό και ο τελευταίος τα αγνοεί. Βοηθάνε όμως στην καλύτερη κατανόηση και τεκμηρίωση του προγράμματος. Ακόμη και αυτός που έγραψε ένα πρόγραμμα, συναντά δυσκολίες όταν ασχοληθεί με αυτό μετά από ένα χρονικό διάστημα. Η χρήση σχολίων και ειδικά σε μεγάλα προγράμματα κρίνεται απαραίτητη.
Σχόλια Στην Java έχουμε δύο κατηγορίες σχολίων: /* Σχόλια */ : Με τη χρήση αυτών το χαρακτήρων τα σχόλια μπορούν να επεκταθούν σε όσες γραμμές θέλουμε, π.χ.: /* First line comments Second line comments */ // Σχόλια : Με τη χρήση αυτών το χαρακτήρων τα σχόλια εκτείνονται μόνο στην τρέχουσα γραμμή, π.χ.: // One line comments Μία άλλη σημαντική δυνατότητα που έχει ο προγραμματιστής με την χρήση σχολίων, είναι η προσωρινή «απενεργοποίηση» κάποιων εντολών, με σκοπό συνήθως την επιβεβαίωση της σωστής λειτουργίας των υπολοίπων. Τοποθετώντας σε /* */ κάποιες εντολές, ο μεταφραστής τις αγνοεί και διαγράφοντας τα /* */ τις ενσωματώνουμε ξανά στο πρόγραμμά μας.
Ακέραιοι τύποι δεδομένων Στους ακέραιους τύπους δεδομένων, όπως καταλαβαίνουμε και από το όνομά τους, μπορούμε να αποθηκεύσουμε ακέραιους αριθμούς. Υπάρχουν τέσσερεις διαφορετικοί ακέραιοι τύποι, όλοι προσημασμένοι, που διαφέρουν ως προς το εύρος τιμών που δέχονται αλλά και στο μέγεθος μνήμης που δεσμεύουν. Τύπος Δεσμευόμενη μνήμη σε bits Εύρος τιμών byte 8 -128 έως 127 short 16 -32768 έως 32767 int 32 -2147483648 έως 2147483647 long 64 -9223372036854775808 έως 9223372036854775807
Ακέραιοι τύποι δεδομένων Ανάλογα με τις πιθανές τιμές που μπορεί να πάρει μια ακέραια μεταβλητή, επιλέγουμε έναν από τους παραπάνω τύπους. Για παράδειγμα η ηλικία ανθρώπων μπορεί να αποθηκευτεί άνετα σε έναν τύπο byte, ο πληθυσμός μιας πόλης απαιτεί int, ενώ το έτος γέννησης καλύπτεται από μία short. Αν και συνηθίζεται να χρησιμοποιείται ο τύπος int, η σωστή επιλογή τύπου έχει ως αποτέλεσμα οικονομία στη μνήμη και κατ’ επέκταση αύξηση της ταχύτητας εκτέλεσης του προγράμματος. Εξ ορισμού όλοι οι ακέραιοι βρίσκονται στο δεκαδικό σύστημα, αλλά είναι δυνατό να εκφραστούν και στο οκταδικό ή το δεκαεξαδικό. Ένα «0» (μηδέν) μπροστά από τον αριθμό, σημαίνει ότι αυτός είναι σε οκταδική μορφή (π.χ. 024), ενώ ένα «0x» σημαίνει ότι είναι σε δεκαεξαδική (π.χ. 0x1A, 0x2F4B, 0x5).
Ακέραιοι τύποι δεδομένων Αυτό που θα πρέπει να προσέξουμε στις ακέραιες μεταβλητές είναι η ιδιότητα της αναδίπλωσης (wrapping), η οποία προκαλείται αν αυξηθεί ή μειωθεί η τιμή τους πέρα από τη μέγιστη ή την ελάχιστη τιμή που μπορούν να δεχτούν. Για παράδειγμα, αν η τιμή μιας τύπου byte μεταβλητής είναι 127 και αυξηθεί κατά 1, τότε γίνεται -128 και όχι 128, όπως θα περιμέναμε καθώς και τα επτά ψηφία χαμηλής τάξεως του αποτελέσματος θα ήταν μηδέν. Αντίστροφα, αν τη μειώσουμε κατά 1 από την ελάχιστη τιμή της (το -128), τότε θα πάρει την τιμή 127. Παραδείγματα: byte count=0; short last_year=2014; int population; long distance=401000000;
Αριθμοί κινητής υποδιαστολής Είναι φανερό ότι οι ακέραιοι δεν μπορούν να καλύψουν όλες τις ανάγκες ενός προγράμματος για υπολογισμούς. Σε περιπτώσεις που χρειαζόμαστε να χειριστούμε δεκαδικούς αριθμούς, χρησιμοποιούμε τους τύπους αριθμών κινητής υποδιαστολής που μας παρέχει η Java. Οι αριθμοί κινητής υποδιαστολής περιέχουν ακέραιο και δεκαδικό μέρος και μπορεί να είναι θετικοί ή αρνητικοί (π.χ. 12.345, -4.23). Λέγονται έτσι, διότι η υποδιαστολή (συμβολίζεται με τελεία «.») μπορεί να κινείται δεξιά ή αριστερά (π.χ. 23000.0 = 23 x 103, 0.0023 = 23 x 10-4).
Αριθμοί κινητής υποδιαστολής Τύπος Δεσμευόμενη μνήμη σε bits Εύρος τιμών Ακρίβεια ψηφίων float 32 -3.4x1038 έως 3.4x1038 7 double 64 -1.7x10308 έως 1.7x10308 18 Παραδείγματα: float price; double fpa=0.23; double amount;
Τελεστές αριθμητικών πράξεων Πολλαπλασιασμός (*), π.χ. 2 * 4 Διαίρεση (/), π.χ. 4 / 2 Υπόλοιπο (%), π.χ. 5 % 3 Πρόσθεση (+), π.χ. 6 + 9 Αφαίρεση (-), π.χ. 8 - 5
Αριθμητικές παραστάσεις Για τον σχηματισμό αριθμητικών παραστάσεων χρησιμοποιούνται επιτρεπτοί συνδυασμοί τελεστών με ακέραιες και κινητής υποδιαστολής ποσότητες, σταθερές ή μεταβλητές. Η αριθμητική παράσταση έχει μία τιμή, που προκύπτει με την εκτέλεση όλων των πράξεων σε αυτήν. π.χ. a+2*8/b s+4.5+5%3 2+b*-4/r Για τον υπολογισμό της τιμής μιας αριθμητικής παράστασης, εκτελούνται πρώτα οι πολλαπλασιασμοί (*) - διαιρέσεις (/ ) – υπό- λοιπο διαίρεσης (%) και τέλος οι προσθέσεις (+) - αφαιρέσεις (-). Η σειρά εκτέλεσης των πράξεων μπορεί να αλλάξει χρησιμοποιώντας παρενθέσεις, διότι δίνεται μεγαλύτερη προτεραιότητα στις πράξεις μέσα σε αυτές. Οι πράξεις εκτελούνται από αριστερά προς τα δεξιά και μεταξύ δύο ισοδύναμων πράξεων εκτελείται πρώτα η αριστερότερη.
Αριθμητικές παραστάσεις Παραδείγματα:
Αριθμητικές παραστάσεις Παραδείγματα: Παράσταση Τιμή 2 + 3 * 4 14 (2 + 3) * 4 20 15 / 4 + 8 * 3 27 10.0 / 4 + 10 / 4 4.5 3 * -2 + 13 % 7 (5 +10) / 3 + 2.4 * 4 14.6 Επιπλέον, η αριθμητική παράσταση έχει και αυτή έναν τύπο, ακέραιο ή κινητής υποδιαστολής. Στην περίπτωση που στην παράσταση μετέχει έστω και μία δεκαδική ποσότητα, τότε ο τύπος της παράστασης είναι κινητής υποδιαστολής.
Αριθμητικές παραστάσεις Θα πρέπει να δίνουμε ιδιαίτερη προσοχή στις πράξεις μας και ιδιαίτερα σε περιπτώσεις πολλαπλασιασμού, για την αποφυγή τυχών προβλημάτων. Για παράδειγμα, αν πολλαπλασιάσουμε δύο μεταβλητές τύπου byte και το αποτέλεσμά τους ξεπερνά το 127, τότε βγαίνουμε από το εύρος του τύπου αυτού και το αποτέλεσμα δε θα μπορούσε να αποθηκευτεί σε μια μεταβλητή του ιδίου τύπου. Βέβαια, το πρόβλημα αυτό το προλαμβάνει ο compiler της Java, ο οποίος θα εμφανίσει σφάλμα, αν υπάρχει περίπτωση αυτό να μη μπορεί να αποθηκευτεί στη μεταβλητή, δηλαδή να ξεπεράσει τα όρια των τιμών που αυτή χωρά.
Αριθμητικές παραστάσεις Άλλη μια περίπτωση που θα πρέπει να προσέξουμε ιδιαίτερα είναι αυτή της διαίρεσης. Εάν έχουμε ορίσει ως τύπου int μια μεταβλητή που κρατά το αποτέλεσμα μιας διαίρεσης, η διαίρεση 5/2 θα της δώσει τιμή 2, ενώ κανονικά δίνει αποτέλεσμα 2.5. Έτσι, σε πολλές εκφράσεις, κάνοντας πρώτα τους πολλαπλασιασμούς και μετά τις διαιρέσεις κινδυνεύουμε να οδηγηθούμε σε υπερχείλιση, ενώ αν κάνουμε πρώτα τις διαιρέσεις και μετά τους πολλαπλασιασμούς κινδυνεύουμε να χάσουμε σε ακρίβεια.
Αριθμητικές παραστάσεις Παράδειγμα: public class ArithmeticDemo { public static void main (String args[ ]) { int result = 1 + 2; // The result now is 3 System.out.println("1 + 2 = " + result); int original_result = result; result = result - 1; // The result now is 2 System.out.println(original_result + " - 1 = " + result); original_result = result;
Αριθμητικές παραστάσεις result = result * 2; // The result now is 4 System.out.println(original_result + " * 2 = " + result); original_result = result; result = result / 2; // The result now is 2 System.out.println(original_result + " / 2 = " + result); result = result + 8; // The result now is 10 System.out.println(original_result + " + 8 = " + result);
Αριθμητικές παραστάσεις result = result % 7; // The result now is 3 System.out.println(original_result + " % 7 = " + result); } Έξοδος: 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3
Σύνταξη: Μεταβλητή = Παράσταση Τελεστής εκχώρησης Όπως προαναφέρθηκε, ο τελεστής εκχώρησης της Java είναι το σύμβολο «=» και τον έχουμε συναντήσει ήδη σε αρκετά από τα παραδείγματά μας. Χρησιμοποιείται για την απόδοση τιμών στις μεταβλητές, κατά τη διάρκεια εκτέλεσης του προγράμματος. Σύνταξη: Μεταβλητή = Παράσταση Πρώτα εκτελούνται οι πράξεις στο δεξιό τμήμα της εντολής (υπολογίζεται δηλαδή η παράσταση δεξιά της εντολής) και το αποτέλεσμα που προκύπτει (η τιμή της παράστασης) εκχωρείται στη μεταβλητή αριστερά της εντολής. Παραδείγματα Εκφράσεων: e=b*y/2; n=n+1; sum=sum+a; Έκφραση (expression) είναι μία πρόταση που σαν αποτέλεσμα παράγει μία τιμή.
Τελεστής εκχώρησης Η τύπος της Παράστασης πρέπει να συμπίπτει με τον τύπο της Μεταβλητής. Οποιαδήποτε ακέραια τιμή μπορεί να δοθεί σε οποιαδήποτε ακέραια μεταβλητή. Δηλαδή μπορεί η τιμή ενός byte να δοθεί σε μία μεταβλητή τύπου short ή long. Ένας long μπορεί να χωρέσει άνετα έναν int, ενώ ένας byte μπορεί να δεχτεί μόνο ορισμένες από τις τιμές του (από -128 έως 127). Σε αυτές τις περιπτώσεις πρέπει να προσέχουμε ιδιαίτερα, γιατί μπορεί να έχουμε απροσδιόριστα αποτελέσματα από το πρόγραμμά μας. Μία ακέραια τιμή μπορεί να δοθεί σε μεταβλητή κινητής υποδιαστολής (μετατρέπεται σε δεκαδικός), ενώ το αντίθετο δεν μπορεί να συμβεί. Αν προσπαθήσουμε δηλαδή να μετατρέψουμε έναν αριθμό σε πιο «αδύναμο» τύπο μεταβλητής τότε ο μεταγλωττιστής αναγνωρίζει το λάθος.
Τελεστής εκχώρησης Ο τύπος long χωρά εξολοκλήρου τους byte, short και int Ο τύπος int χωρά εξολοκλήρου τους byte και short Ο τύπος short χωρά εξολοκλήρου μόνο τον byte Ο τύπος double χωρά εξολοκλήρου τους float, byte, short και int Ο τύπος float χωρά εξολοκλήρου τους byte, short και int
Άλλες δυνατότητες εκχώρησης Ένας προγραμματιστής σε Java, μπορεί να χρησιμοποιήσει και άλλες τεχνικές εκχώρησης εκτός από τις «κλασσικές», μια και η γλώσσα του δίνει αυτή τη δυνατότητα. Για παράδειγμα: Οι σχέσεις είναι ισοδύναμες με x = x + y x += y x = x - y x -= y x = x * y x *= y x = x / y x /= y x = x % y x %= y
Μοναδιαίοι τελεστές Οι Μοναδιαίοι τελεστές (++, --) είναι τελεστές προσαύξησης ή μείωσης, δηλαδή αυξάνουν ή μειώνουν την τιμή μιας μεταβλητής κατά 1. Σε ένα πρόγραμμα, το x++; αυξάνει την τιμή του x κατά 1, ενώ το x--; τη μειώνει κατά την ίδια ποσότητα. Οι τελεστές αυτοί μπορούν να χρησιμοποιηθούν ως τελεστές προθέματος (π.χ. ++x ή --x) ή τελεστές επιθέματος (π.χ. x++ ή x--). Ο τελεστής προθέματος αυξάνει ή μειώνει την τιμή της μεταβλητής και στη συνέχεια την χρησιμοποιεί. Αντίθετα ο τελεστής επιθέματος αυξάνει ή μειώνει τη μεταβλητή αφού εκείνη έχει προηγουμένως χρησιμοποιηθεί.
Μοναδιαίοι τελεστές Για παράδειγμα, αν η ακέραια (int) μεταβλητή x είχε αρχική τιμή 5, τότε η έκφραση y=x++; θα δώσει στο y την τιμή 5 και στη συνέχεια θα αυξήσει την τιμή του x κατά 1 και θα γίνει 6. Για την ίδια αρχική τιμή του x, η έκφραση y=++x; θα αυξήσει πρώτα την τιμή του x κατά 1 και στη συνέχεια θα αποδώσει την τιμή στη μεταβλητή y (δηλαδή θα έχουν και οι δύο μεταβλητές τιμή 6).
Μοναδιαίοι τελεστές Παράδειγμα: public class ArithmeticOperatorsExample { public static void main(String args[ ]) { int x = 5; int y = 5; System.out.println(++x); /* output 6 */ System.out.println(x); /* output 6 */ System.out.println(y++); /* output 5 */ System.out.println(y); /* output 6 */ }
Λογικός τύπος δεδομένων Χρησιμοποιώντας τον Λογικό Τύπο (boolean) μπορούμε να δηλώσουμε δίτιμες μεταβλητές, δηλαδή μεταβλητές που μπορούν να πάρουν μόνο δύο τιμές. Συγκεκριμένα οι τιμές των μεταβλητών αυτών είναι οι true (Αλήθεια) και false(Ψέμα). Μία λογική μεταβλητή δεν μπορεί να πάρει τιμή από το πληκτρολόγιο. Αν μία λογική μεταβλητή εμφανίζεται σαν όρισμα σε μία εντολή εισόδου, ο μεταγλωττιστής θα εμφανίσει μήνυμα λάθους. Ο μόνος τρόπος απόδοσης τιμής σε μεταβλητές αυτού του τύπου είναι με την εντολή καταχώρησης (=). Οι επιτρεπτές τιμές είναι μία από τις δύο Λογικές Σταθερές (true, false) ή η τιμή μιας λογικής παράστασης, όπως θα γνωρίσουμε στην συνέχεια. Παραδείγματα: boolean single; single = true; ή boolean single = true;
Τελεστές σύγκρισης Η σύγκριση δύο ποσοτήτων επιτρέπεται μόνο αν είναι του ίδιου τύπου. Δεν μπορούμε να συγκρίνουμε αριθμητική ποσότητα με αλφαριθμητικό ή λογική τιμή. Το αποτέλεσμα μίας σύγκρισης είναι πάντα μία λογική τιμή true ή false. Οι τελεστές που χρησιμοποιούνται σε μία πράξη σύγκρισης είναι οι εξής: Τελεστής Σημασία == Ίσον != Διάφορο < Μικρότερο > Μεγαλύτερο <= Μικρότερο ή ίσο >= Μεγαλύτερο ή ίσο
παράσταση1 τελεστής σύγκρισης παράσταση2 Τελεστές σύγκρισης H γενική μορφή σύνταξης είναι: παράσταση1 τελεστής σύγκρισης παράσταση2 Αρχικά υπολογίζονται οι τιμές των παραστάσεων και στην συνέχεια το αποτέλεσμα της σύγκρισης. Αν a=10 και b=20 μεταβλητές τύπου int τότε: a != b ----> true a +10 == b ----> true b >= 3 * a ----> false a +5 >= b -10 ----> true Η σύγκριση χαρακτήρων γίνεται με βάση τον Unicode κωδικό τους, θεωρώντας μεγαλύτερο αυτόν με τον μεγαλύτερο κωδικό. π.χ. Το 'Α' είναι μικρότερο του 'Β'.
Τελεστές σύγκρισης Η σύγκριση αλφαριθμητικών γίνεται με βάση τους πρώτους χαρακτήρες τους. Αν υπάρχει ισότητα των πρώτων χαρακτήρων συγκρίνονται οι επόμενοι, μέχρι να βρεθούν δύο διαφορετικοί. π.χ. "NIKOS" > "NIKOLAKIS" διότι "S" > "L" Αν όλοι οι χαρακτήρες του ενός αλφαριθμητικού ταυτίζονται με του άλλου, τότε υπάρχει ισότητα των αλφαριθμητικών μόνο αν έχουν το ίδιο πλήθος χαρακτήρων. Σε αντίθετη περίπτωση μικρότερο είναι αυτό με τους λιγότερους χαρακτήρες. Τα παρακάτω αλφαριθμητικά είναι γραμμένα σε αύξουσα σειρά. "ΑΥRΙΟ" "ΒΟΜΒΑ" "ΒΟΜΒΑΗ" "GLΑSΤRΑ" "L1" "L9"
Λογικοί τελεστές Σε λογικές μεταβλητές εφαρμόζονται οι λογικές πράξεις ! (NOT -άρνηση), && (AND - σύζευξη), || (OR - διάζευξη) και ^ (XOR - αποκλειστική διάζευξη). Η πράξη NOT εφαρμόζεται σε μία μόνο μεταβλητή, ενώ οι υπόλοιπες σε δύο. Το αποτέλεσμα των λογικών πράξεων είναι μία λογική τιμή, σύμφωνα με τον παρακάτω πίνακα: A B ! A (NOT) A && B (AND) A || B (OR) A ^ B (XOR) True False Πίνακας αληθείας
Λογικοί τελεστές Όπως είδαμε, οι λογικοί τελεστές ενεργούν πάνω σε λογικές συνθήκες και συνδέοντας αυτές σχηματίζουν μεγαλύτερες πιο σύνθετες. Ο τελεστής ! (not) έχει ένα μόνο τελεστέο στα δεξιά του και αντιστρέφει τη λογική τιμή αυτού. Έτσι εάν ο τελεστέος στον οποίο επενεργεί είναι μία λογική συνθήκη με τιμή true, το αποτέλεσμα θα είναι false, ενώ εάν είναι μία λογική συνθήκη με τιμή false, το αποτέλεσμα θα είναι true. Ο τελεστής && (λογικό ΚΑΙ) επιστρέφει τιμή true μόνο όταν και οι δύο λογικές συνθήκες που συνδέει έχουν τιμή true. Ο τελεστής || (λογικό Η) επιστρέφει τιμή true όταν έστω και μία από τις λογικές συνθήκες που συνδέει έχει τιμή true. Τέλος, ο τελεστής ^ (XOR), επιστρέφει true εάν η μία και μόνον η μία από τις λογικές συνθήκες είναι true .
Λογικοί τελεστές Η λογικές πράξεις εκτελούνται με τη σειρά που εμφανίζονται στον πίνακα αληθείας (!, &&, ||, ^) με την || και ^ να είναι ισοδύναμες (εκτελείται πρώτα η αριστερότερη). Η σειρά των πράξεων μπορεί να αλλάξει με τη χρήση παρενθέσεων. (5 – 2 > 4) || (8 != 7) && (8 / 2 == 4) !(4 >= 3) || (8 != 7) ^ (8 < 5) 3 4 T T F F T T F T T T T
Τελεστές δυαδικών πράξεων Οι τελεστές δυαδικών πράξεων (bitwise operators) μας δίνουν τη δυνατότητα να αλλάξουμε την τιμή συγκεκριμένων δυαδικών ψηφίων (bits) μέσα σ’ έναν ακέραιο και είναι οι παρακάτω: Αυτοί οι τελεστές χρησιμοποιούνται πολύ σπάνια σε εταιρικές εφαρμογές, βρίσκουν όμως μεγάλη απήχηση στον προγραμματισμό ψηφιακών μικροσυσκευών. Τελεστής δυαδικών πράξεων Σύμβολο compliment ΝΟΤ ~ bitwise AND & bitwise OR | bitwise XOR ^ signed left shift << signed right shift >> unsigned right shift >>> Bit Shift Operators
Τελεστές δυαδικών πράξεων P Q P & Q 1 P Q P | Q 1 P Q P ^ Q 1 P ~P 1
Τελεστές δυαδικών πράξεων Παράδειγμα: class bitwise_operators{ public static void main(String args [ ]) { int a = 60; // 60 = 0011 1100 int b = 13; // 13 = 0000 1101 int c = 0; c = a & b; // 12 = 0000 1100 System.out.println("a & b = " + c ); c = a | b; // 61 = 0011 1101 System.out.println("a | b = " + c ); c = a ^ b; // 49 = 0011 0001 System.out.println("a ^ b = " + c ); c = ~a; //-61 = 1100 0011 System.out.println("~a = " + c ); } Έξοδος: a & b = 12 a | b = 61 a ^ b = 49 ~a = -61
Τελεστές δυαδικών πράξεων Σύνταξη: αριθμός << πλήθος_bits_μετατόπισης Ο προσημασμένος τελεστής αριστερής μετατόπισης (signed left shift << ) μετακινεί τα bits ν θέσεις προς τα αριστερά, προσθέτοντας μηδενικά στην δεξιά μεριά του αριθμού. Για παράδειγμα, έχουμε τον αριθμό 23 (0001 0111). Εάν εφαρμόσουμε το 23 << 1, θα μετατραπεί σε 46 (0010 1110). Το μηδενικό από την δεξιά πλευρά του αριθμού προστέθηκε για να συμπληρώσει την κενή θέση. 23 46
Τελεστές δυαδικών πράξεων Σύνταξη: αριθμός >> πλήθος_bits_μετατόπισης Ο προσημασμένος τελεστής δεξιάς μετατόπισης (signed right operator >> ) μετακινεί τα bits ν θέσεις προς τα δεξιά, χρησιμοποιώντας το bit πρόσημου (αριστερότερο bit ) για την πλήρωση των θέσεων μετά τη μετατόπιση. Αν ο αριθμός είναι αρνητικός, τότε χρησιμοποιείται ως συμπλήρωμα το 1, ενώ εάν ο αριθμός είναι θετικός, τότε χρησιμοποιείται ως συμπλήρωμα το 0. Για παράδειγμα, έχουμε τον αριθμό 23 (0001 0111). Εάν εφαρμόσουμε το 23 >> 1, θα μετατραπεί σε 11 (0000 1011). Το μηδενικό από την αριστερή πλευρά του αριθμού προστέθηκε για να συμπληρώσει την κενή θέση. -102 23 -102 >> 1 -51 11
Τελεστές δυαδικών πράξεων Σύνταξη: αριθμός >>> πλήθος_bits_μετατόπισης Τέλος, σε αυτή την κατηγορία, έχουμε τον μη προσημασμένο τελεστή δεξιάς μετατόπισης (unsigned right operator >>> ) που συμπεριφέρεται σαν τον signed right shift ( >> ) αλλά με μια διαφορά. Το >>> μετακινεί προς τα δεξιά τα ψηφία του αριθμού όσες θέσεις αναφέρονται στην δεξιά πλευρά του τελεστή και γεμίζει πάντα 0, ανεξάρτητα από το πρόσημο του αριθμού. Για παράδειγμα, εάν έχουμε την έκφραση 25 >>> 3 αυτό σημαίνει ότι όλα τα bits του αριθμού 25 θα μετακινηθούν προς τα δεξιά 3 θέσεις.
Τελεστές δυαδικών πράξεων Παράδειγμα: public class bit_shift_operators{ public static void main(String args[ ]) { int a = 60; // 60 = 0011 1100 int b; b = a << 2; // 240 = 1111 0000 System.out.println("a << 2 = " + b); b = a >> 2; // 15 = 00001111 System.out.println("a >> 2 = " + b); b = a >>> 2; // 15 = 0000 1111 System.out.println("a >>> 2 = " + b); } Έξοδος: a << 2 = 240 a >> 2 = 15 a >>> 2 = 15
Χαρακτήρες Οι χαρακτήρες που χρησιμοποιούνται από την Java είναι οι 65536 χαρακτήρες του κώδικα Unicode. Αν και για τον σχηματισμό λέξεων και αναγνωριστικών χρησιμοποιείται ένα μέρος αυτών των χαρακτήρων, μπορούμε να τους χρησιμοποιήσουμε όλους στην είσοδο ή έξοδο του προγράμματός μας (εισαγωγή από το πληκτρολόγιο, εμφάνιση στην οθόνη κ.ά.). Ένας χαρακτήρας πρέπει να περικλείεται από αποστρόφους ('Α' , '%'). Μπορούμε εναλλακτικά να αναφερθούμε σε έναν χαρακτήρα χρησιμοποιώντας τον Unicode κωδικό του σε 16δική μορφή. Για παράδειγμα ο χαρακτήρας απόστροφος (')που έχει κωδικό Unicode τον 16δικό αριθμό 27, γράφεται με \u0027 ή 0x27.
Χαρακτήρες Μπορούμε απλώς να δηλώσουμε, ή συγχρόνως να δηλώσουμε και να αποδώσουμε αρχική τιμή σε μια μεταβλητή τύπου char, όπως παρακάτω: char coin1; char coin2='$'; char coin3= '\u0024'; // Unicode $ char coin4= 0x24; // Unicode $
Χαρακτήρες Για να παραστήσουμε ορισμένους ειδικούς χαρακτήρες, όπως τα απλά εισαγωγικά ('), τα διπλά εισαγωγικά ("), την αλλαγή γραμμής, το backspace, κ.λπ., μπορούμε να χρησιμοποιήσουμε τις ακολουθίες διαφυγής (escape sequences). Καλούμε χαρακτήρα διαφυγής έναν μόνο χαρακτήρα ο οποίος σε μια ακολουθία χαρακτήρων σηματοδοτεί ότι οι χαρακτήρες που ακολουθούν λαμβάνουν διαφορετική ερμηνεία. Ο όρος ακολουθία διαφυγής αναφέρεται σε έναν χαρακτήρα διαφυγής και στους ακόλουθους χαρακτήρες ή χαρακτήρα που αλλάζει η ερμηνεία τους. Μια ακολουθία διαφυγής αποτελείται από μία ανάποδη κάθετο (\) μαζί με έναν χαρακτήρα. Μερικές από τις ακολουθίες διαφυγής εμφανίζονται στον πίνακα της επόμενης διαφάνειας.
Χαρακτήρες Ακολουθία Διαφυγής Χαρακτήρας \n Αλλαγή γραμμής (line feed) \t Στηλοθέτης (tab) \b Οπισθοδρόμηση (backspace) \f Αλλαγή σελίδας (form feed) \r Επιστροφή (carriage return) \" Διπλά εισαγωγικά (") \' Απλά εισαγωγικά (') \\ Ανάποδη κάθετος (\)(backslash) \uDDDD Ο χαρακτήρας Unicode με κωδικό DDDD (DDDD είναι 4ψήφιος δεκαεξαδικός αριθμός)
Χαρακτήρες Μπορούμε να βρούμε τον κωδικό Unicode οποιουδήποτε χαρακτήρα στην παρακάτω διεύθυνση: http://hex.online-toolz.com/tools/text-hex-convertor.php
Χαρακτήρες Παράδειγμα: public class escape_char{ public static void main(String args[ ]) { char c1='\n'; char c2='\u0025'; // Character % System.out.println("Hamlet:\t\"To be, or not to be\", that is the question."+c1); System.out.println("100"+c2+" success"); } Έξοδος Hamlet: "To be, or not to be", that is the question. 100% success
Αλφαριθμητικά Τα αλφαριθμητικά ή συμβολοσειρές (String) της Java, αποτελούνται από μία σειρά χαρακτήρων, οι οποίοι περικλείονται με διπλές αποστρόφους ("). Μπορούν να χρησιμοποιηθούν όλοι οι χαρακτήρες του πίνακα Unicode σε ένα αλφαριθμητικό. Μέσα στα αλφαριθμητικά μπορούμε να συμπεριλάβουμε και τις ακολουθίες διαφυγής. Στη Java, ένα αλφαριθμητικό δεδομένο είναι κάτι περισσότερο από αυτό, είναι αντικείμενο της κλάσης String (που θα δούμε αργότερα σε άλλο κεφάλαιο) και επομένως διαθέτει μεθόδους, οι οποίες βοηθούν στον καλύτερο χειρισμό του. Παραδείγματα: String greeting1 = "Hello world!"; String greeting2 = "He said \"Hello world!\""; String greeting3 = "He said \u005c\u0022Hello world!\u005c \u0022"; Όπου 005c o χαρακτήρας διαφυγής (\), ενώ 0022 ο χαρακτήρας (").
Αλφαριθμητικά Παράδειγμα: Έξοδος: "Hello World!" public class hello3 { public static void main(String args[ ]) { String quote="\u005c\u0022"+"Hello World!"+"\u005c\u0022"; System.out.println(quote); } Έξοδος: "Hello World!"
Αρχικές τιμές για τις μεταβλητές-μέλη Όπως προαναφέραμε, σε όσες μεταβλητές-μέλη δε δίνουμε αρχική τιμή όταν τις δηλώνουμε η Java εκχωρεί από μόνη της μια αρχική τιμή, η οποία εξαρτάται από τον τύπο της μεταβλητής-μέλος. Αυτές οι αρχικές τιμές, εμφανίζονται στον παρακάτω πίνακα: Τύπος δεδομένου Αρχική τιμή boolean false char '\u0000' int, short, byte / long 0 / 0L float /double 0.0f / 0.0d Σε αντικείμενο null
Αρχικές τιμές για τις μεταβλητές-μέλη Παράδειγμα: public class test_vars{ public static void main(String args[ ]) { vars test1 = new vars(); System.out.println("int:"+test1.a+"\n long:"+test1.b+"\n char:"+ test1.c+"\ndouble:"+test1.d+"\nboolean:"+test1.e); } class vars { Έξοδος: int a; // Member variable int:0 long b; // Member variable long:0 char c; // Member variable char: double d; // Member variable double:0.0 boolean e; // Member variable boolean:false
Μετατροπή τύπου δεδομένων Μετατροπή τύπου δεδομένων (type casting) καλούμε τη διαδικασία με την οποία μετατρέπουμε ένα τύπο δεδομένου ή κλάσεως σε έναν άλλο. Αυτό γίνεται τοποθετώντας τον τύπο που θέλουμε να γίνει η μεταβλητή σε παρένθεση, πριν από το όνομα της μεταβλητής. Σύνταξη: (επιθυμητός τύπος) μεταβλητή H περίπτωση μετατροπής τύπου δεδομένων (λ.χ. από τύπο int σε double), θα μπορούσε να γίνει σε περίπτωση πράξεων όπως η διαίρεση. Αντίθετα, μια μετατροπή από double σε int θα είχε σαν αποτέλεσμα στρογγυλοποίηση του αριθμού και θα υπήρχε πρόβλημα στην ακρίβεια της αναπαράστασής του. Παραδείγματα: double x1 = 4.3; int x3 = 3; double x2 = 4.9; double y3 = (double) x3; // y3=3.0 int y1 = (int) x1; // y1 = 4 int y2 = (int) x2; // y2 = 4
Μετατροπή τύπου δεδομένων Μια περίπτωση που επίσης πρέπει να εξετάσουμε είναι η μετατροπή τύπου char σε int. Παράδειγμα: char c = '$'; int x = (int) c; System.out.println(x); Τυπώνει 36 (24 στο 16δικό) γιατί ο χαρακτήρας $ της μεταβλητής c είναι ένας χαρακτήρας Unicode και το 24 είναι η θέση του στη λίστα των χαρακτήρων αυτών. Δηλαδή η μετατροπή σε int γίνεται μέσω της αντιστοιχίας του Unicode.
Μετατροπή τύπου δεδομένων Παράδειγμα: public class convert_data{ public static void main(String args[ ]) { byte b; int i = 599; double d = 224.134; System.out.println("\nConversion of int to byte."); b = (byte) i; System.out.println("i and b " + i + " " + b); // i= 599, b = 87 System.out.println("\nConversion of double to int."); i = (int) d; System.out.println("d and i " + d + " " + i); // d= 224.134, i = 224 System.out.println("\nConversion of double to byte."); b = (byte) d; System.out.println("d and b " + d + " " + b); // d= 224.134, b = -32 }
Μαθηματικές συναρτήσεις java.lang.Object java.lang.Math Η κλάση Math (ανήκει στο πακέτο java.lang) και περιλαμβάνει μεθόδους για την εκτέλεση βασικών αριθμητικών πράξεων, όπως ο λογάριθμος, η τετραγωνική ρίζα, οι τριγωνομετρικές συναρτήσεις, κ.λπ. Για να αναφερθούμε σε μία μέθοδο της κλάσης Math, πρέπει να γράψουμε μπροστά τη λέξη Math και μία τελεία. Σύνταξη: Math.μέθοδος(όρισμα) Παραδείγματα: Math.abs(-5) Math.pi Math.exp(2.0)
Μαθηματικές συναρτήσεις Τα ορίσματα μιας συνάρτησης, εκτός από μεταβλητές μπορεί να είναι και απλοί αριθμοί, ή ακόμα και μαθηματικές εκφράσεις, όπως Math.abs(-2*4/2). Στον παρακάτω πίνακα περιλαμβάνονται μερικές από τις πιο σημαντικές συναρτήσεις: Μέθοδος Περιγραφή Τύπος E H βάση των φυσικών λογαρίθμων (2.718281828459045). double PI Ο λόγος της περιφέρειας ενός κύκλου προς τη διάμετρό του (3.141592653589793). abs(όρισμα) Επιστρέφει την απόλυτη τιμή ενός αριθμού. double, float, int, long
Μαθηματικές συναρτήσεις Μέθοδος Περιγραφή Τύπος acos(όρισμα) Επιστρέφει το συνημίτονο τόξου μίας τιμής. Η επιστρεφόμενη γωνία είναι στην περιοχή 0.0 έως pi. double asin(όρισμα) Επιστρέφει το τόξο ημιτόνου μιας τιμής. Η επιστρεφόμενη γωνία είναι στην περιοχή -pi / 2 έως pi / 2. atan(όρισμα) Επιστρέφει το τόξο εφαπτομένης μιας τιμής. Η επιστρεφόμενη γωνία είναι στην περιοχή -pi / 2 έως pi / 2. cbrt(όρισμα) Επιστρέφει την κυβική ρίζα ενός αριθμού. ceil(όρισμα) Επιστρέφει το μικρότερο ακέραιο, που είναι μεγαλύτερος ή ίσος με το όρισμα.
Μαθηματικές συναρτήσεις Μέθοδος Περιγραφή Τύπος cos(όρισμα) Επιστρέφει το συνημίτονο ενός αριθμού. double cosh(όρισμα) Επιστρέφει το υπερβολικό συνημίτονο ενός αριθμού. exp(όρισμα) Επιστρέφει το ex expm1(όρισμα) Επιστρέφει το ex - 1 floor(όρισμα) Επιστρέφει το μικρότερο ακέραιο, που είναι μικρότερος ή ίσος με το όρισμα. log(όρισμα) Επιστρέφει το φυσικό λογάριθμο του ορίσματος (βάση e).
Μαθηματικές συναρτήσεις Μέθοδος Περιγραφή Τύπος log10(όρισμα) Επιστρέφει το λογάριθμο με βάση το 10 ενός αριθμού. double max(όρισμα_ x, όρισμα_y) Επιστρέφει το μεγαλύτερο από τα ορίσματα. double, float, int, long min(όρισμα_ x, όρισμα_y) Επιστρέφει το μικρότερο από τα ορίσματα. pow(όρισμα_ x, όρισμα_y) Επιστρέφει το xy random() Επιστρέφει ένα ψευδοτυχαίο αριθμό μεταξύ 0.0 και 1.0.
Μαθηματικές συναρτήσεις Μέθοδος Περιγραφή Τύπος rint(όρισμα) Επιστρέφει την τιμή κινητής υποδιαστολής που είναι πιο κοντά στην τιμή του ορίσματος και είναι ίση με ένα μαθηματικό ακέραιο. double round(όρισμα) Επιστρέφει τον πλησιέστερο προς το όρισμα ακέραιο. Το αποτέλεσμα είναι long και int αντίστοιχα. double, float sin(όρισμα) Επιστρέφει το ημίτονο του ορίσματος (το όρισμα σε ακτίνια). sqrt(όρισμα) Επιστρέφει την τετραγωνική ρίζα ενός αριθμού. tan(όρισμα) Επιστρέφει την εφαπτομένη του ορίσματος (το όρισμα σε ακτίνια).
Μαθηματικές συναρτήσεις Παραδείγματα: Math.abs(-2.5) = 2.5 Math.min(2,5) = 2 Math.max(2,5) = 5 Math.ceil(8.4) = 9 Math.floor(8.4) = 8 Math.pow(2,3) = 8 Math.sqrt(9) = 3 Math.cbrt(27) = 3 Math.exp(2) = 7.38905609893065 Math.rint(43.74) = 44.0 Math.round(20.49) = 20 Math.log(11.635) = 2.454
Μαθηματικές συναρτήσεις Παράδειγμα: public class random_numbers { public static void main(String args[ ]) { double x1 = Math.random( ); System.out.println("Double between 0.0 and 1.0: x1 = "+x1); double x2 = Math.random( )*10.0; System.out.println("Double between 0.0 and 10.0: x2 = "+x2); int x3 = (int) (Math.random( )*5)+1; System.out.println("Integer between 1 and 6: x3 = "+x3); } Έξοδος: Double between 0.0 and 1.0: x1 = 0.5229855800722307 Double between 0.0 and 10.0: x2 = 3.422770588688665 Integer between 1 and 6: x3 = 5
Μετατροπή αλφαριθμητικών σε αριθμούς Πολλές φορές, κυρίως όταν έχουμε εισαγωγή δεδομένων από το πληκτρολόγιο στο πρόγραμμά μας, χρειάζεται ένα αλφαριθμητικό να μετατραπεί σε αριθμητικό δεδομένο. Για το σκοπό αυτό χρησιμοποιούμε τις παρακάτω μεθόδους: Α) valueOf (int i), valueOf(long l), valueOf(float f), valueOf (double d), valueOf(boolean b), valueOf(char c), valueOf(char[] data), valueOf(char[] data, int offset, int count), valueOf(Object obj), valueOf(String s), valueOf(String s, int radix), όπου radix η βάση του αριθμού Β) byteValue( ), shortValue( ), intValue( ), longValue( ) για μετατροπή σε τύπο byte, short, int και long αντίστοιχα floatValue( ), doubleValue( ) για μετατροπή σε τύπο float και double αντίστοιχα
Μετατροπή αλφαριθμητικών σε αριθμούς Γ) parseDouble(String s), parseFloat (String s) parseInt(String s), parseByte(String s), parseShort(String s), parseLong (String s) parseInt(String s, int radix) , όπου radix η βάση του αριθμού
Μετατροπή αλφαριθμητικών σε αριθμούς Παραδείγματα: int i = Integer.valueOf("12"); // i = 12 long l = Long.valueOf("12"); // l = 12 float f = Float.valueOf("12"); // f = 12.0 double d1 = Double.valueOf("12"); // d1 = 12.0 int b1 = Integer.valueOf("100",2); // b1 = 4 // (1 * 22) + (0 * 21) + (0 * 20) = 4 + 0 + 0 = 4 int b2 = Integer.valueOf("101",2); // b2 = 5 // (1 * 22) + (0 * 21) + (1 * 20) = 4 + 0 + 1 = 5 int b3 = Integer.valueOf(12) ; // b3 = 12 int b4 = Integer.parseInt("12"); // b4 = 12 int b5 = Integer.parseInt("100",2); // b5 = 4 double d2 = Double.parseDouble("4"); // d2 = 4.0
Μετατροπή αλφαριθμητικών σε αριθμούς Παραδείγματα: Integer i = new Integer("15"); Double d = new Double("10.32"); int x1 = i.intValue( ); // x1 = 15 long x2 = i.longValue( ); // x2 = 15 int x3 = d.intValue( ); // x3 = 10 long x4 = d.longValue( ); // x4 = 10 float y1 = i.floatValue( ); // y1 = 15.0 double y2 = i.doubleValue( ); // y2 = 15.0 float y3 = d.floatValue( ); // y3 = 10.32 double y4 = d.doubleValue( ); // y4 = 10.32
Μετατροπή αλφαριθμητικών σε αριθμούς Παράδειγμα: public class conversions1{ public static void main(String args[ ]){ int i =Integer.valueOf(10); float f = Float.valueOf("20"); double d = Double.valueOf(10); int b = Integer.valueOf("100",16); System.out.println(i); System.out.println(f); System.out.println(d); System.out.println(b); } Έξοδος: 10 20.0 10.0 256
Μετατροπή αλφαριθμητικών σε αριθμούς Παράδειγμα: public class conversions2{ public static void main(String args[ ]){ int i =Integer.parseInt("2"); double d = Double.parseDouble("2"); int x = Integer.parseInt("100",16); System.out.println(i); System.out.println(d); System.out.println(x); } Έξοδος: 2 2.0 256
Μετατροπή αλφαριθμητικών σε αριθμούς Παράδειγμα: public class conversions3{ public static void main(String args[ ]){ Integer i = new Integer("2"); // Returns byte primitive data type System.out.println( i.byteValue() ); // Returns double primitive data type System.out.println(i.doubleValue()); // Returns long primitive data type System.out.println( i.longValue() ); } Έξοδος: 2 2.0
Πηγές https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op 1.html http://www.it.uom.gr/project/java/tutorial.htm#classes http://osarena.net/hacks-guides/mathenontas-tin-java- bitwise-bit-shift-operators-mathima-16.html http://www.c4learn.com/ https://en.wikipedia.org/wiki/Logical_shift http://homeandlearn.co.uk/index.html Εισαγωγή στην Java 2 – Γεώργιος Λιακέας