BETA

Μαθαίνοντας την Java: if-then & if-then-else Statements [μάθημα 18]

Εικόνα Michail

Συνεχίζουμε τα μαθήματα εκμάθησης της Java, έχοντας ήδη κάνει το πρώτο εισαγωγικό μάθημα και έχοντας δει,πως μπορούμε να εγκαταστήσουμε το NetBeans, προκειμένου να δημιουργήσουμε τις εφαρμογές μας και στη συνέχεια δημιουργώντας την πρώτη μας εφαρμογή.
Έχοντας δει κιόλας, σχετικά με τα LANGUAGE FUNDAMENTALS και στη συνέχεια, Ονομασία Μεταβλητών, και τα INTEGER TYPES, καθώς και τα Floating Point Types, μα και καθορισμό των Boolean και Char Data types, καθώς και για τα Arrays και την εισαγωγή δεδομένων μέσω κλάσης Scanner και την JOptionPane CLASS, όπως και τα Big Numbers και ASSIGNMENT-ARITHMETIC-και UNARY OPERATORS, μα και σχετικά με EQUALITY, RELATIONAL, & CONDITIONAL OPERATORS, BITWISE & BIT SHIFT OPERATORS, με τα EXPRESSIONS-STATEMENTS & BLOCKS συνεχίζουμε με το 16ο μάθημα της σειράς.
[box color=blue]Σε αυτή την φάση για τα εκπαιδευτικά μαθήματα χρησιμοποιούμε το λειτουργικό σύστημα Windows, μα οι διαφορές είναι ελάχιστες, ως μηδαμινές και στα υπόλοιπα λειτουργικά[/box]

Στο σημερινό μάθημα θα αναλύσουμε εντολές που ελέγχουν την ροή εκτέλεσης του προγράμματος μας. Η πιο απλή μορφή ελέγχου και απόφασης που γίνεται μέσα σε ένα java πρόγραμμα έχει την μορφή if-then και if-then-else εντολών. Υπάρχουν και άλλες ποιο σημαντικές εντολές όπως switch, for, while και do-while που θα μας απασχολήσουν όμως σε επόμενα μαθήματα. Σας υπενθυμίζω ότι βρισκόμαστε στο μάθημα The if-then and if-then-else Statements από το επίσημο tutorial της Oracle.
Οι προτάσεις (statements) που γράφουμε μέσα σε ένα πρόγραμμα java εκτελούνται από πάνω προς τα κάτω με την σειρά που είναι γραμμένες μέσα στο αρχείο.
Τα control flow statements, όπως τα ονομάζουμε, “σπάνε” κατά κάποιο τρόπο αυτήν την σειριακή ροή εκτέλεσης προσφέροντας εναλλακτικά blocks κώδικα προ εκτέλεση ανάλογα με το αν η συνθήκη ή οι συνθήκες οι οποίες αναλύονται αληθεύουν (true) ή όχι (false).
Η πιο απλή εντολή συνθήκης που υπάρχει, όχι μόνο στην java αλλά και σε άλλες γλώσσες προγραμματισμού, είναι το if-then statement.

Το if-then statement είναι το πιο απλό από όλα τα control flow statements. Ο κώδικας ο οποίος περιέχεται μέσα στο if-then θα εκτελεστεί εφόσον η συνθήκη του if-then έχει αποτέλεσμα true ειδάλλως ο κώδικας του δεν θα εκτελεστεί και το πρόγραμμα θα συνεχίσει με τον υπόλοιπο κώδικα του προγράμματος παραβλέποντας το κώδικα του if-then. Ας δούμε ένα απλό πρόγραμμα για να μπορέσουμε να κατανοήσουμε καλύτερα την θεωρία.
Στο πιο κάτω πρόγραμμα χρησιμοποιούμε το if χωρίς το then για να κατανοήσουμε την λειτουργία του καλύτερα:

Lines 8 – 9: Ορίζουμε δύο μεταβλητές x και half με αρχικές τιμές 5 και 0.0 αντίστοιχα.

Lines 11 – 15: Εδώ έχουμε το πρώτο if το οποίο θα εκτελέσει το block κώδικα που περιέχεται μέσα στο ζεύγος των αγκίστρων ( { } ) εφόσον η συνθήκη αμέσως το if αληθεύει – δηλαδή εάν το x είναι διάφορο του μηδενός. Η συνθήκη είναι true γιατί το η μεταβλητή x έχει τιμή 5. Από την στιγμή που αληθεύει η συνθήκη θα εκτελεστούν οι δύο γραμμές κώδικα μέσα στο block του if. Με το System.out.println δείχνουμε το αποτέλεσμα της διαίρεσης στο output παράθυρο του Netbeans.
Μετά την ολοκλήρωση εκτέλεσης του block το πρόγραμμα βγαίνει έξω από τα άγκιστρα και συνεχίζει στην επόμενη γραμμή του κανονικού προγράμματος.

Lines 17 – 20: Το πρόγραμμά μας συναντάει ένα ακόμα if statement όμως αυτή τη φορά η συνθήκη είναι false επειδή το x έχει τιμή 5 οπότε δεν είναι ίσον με το 0.
Αυτό έχει σαν αποτέλεσμα η java να αγνοήσει το block κώδικα που συνοδεύει το if και να συνεχίσει με την επόμενη εντολή του κανονικού προγράμματος.

Lines 2 – 28: Εδώ ορίζουμε δύο καινούργιες μεταβλητές με την μεταβλητή y να έχει τιμή 25 και την grade να έχει τιμή F. Η συνθήκη του if statement που ακολουθεί ελέγχει αν η y μεταβλητή είναι μεγαλύτερη από τον αριθμό 85 που αυτό είναι false.
Το αποτέλεσμα είναι να μην εκτελεστεί ο κώδικας που περικλείεται μέσα στο block του if και το πρόγραμμα συνεχίζει στην επόμενη γραμμή κώδικα.

Lines 30 – 31: Εδώ ζητάμε το y μεγαλύτερο από το 70 και ταυτόχρονα μικρότερο από το 85 για να εκτελεστεί το block κώδικα που ανήκει στο if. Επειδή όμως η συνθήκη είναι false τότε και αυτό το σημείο του κώδικα θα αγνοηθεί από την java και το πρόγραμμα θα συνεχίσει στην επόμενη γραμμή.
Εδώ παραλείψαμε να βάλουμε άγκιστρα στο expression που ανήκει στο if – δηλαδή στο grade=’C’.
Αυτό δεν είναι λάθος. Υπάρχει η θεωρία της java που λέει ότι εάν ο κώδικας που ανήκει σε ένα if είναι μόνο μια γραμμή τότε δεν χρειάζονται τα άγκιστρα και ο compiler της java, εφόσον η συνθήκη του if είναι true, θα εκτελέσει μαζί με το if την πρώτη γραμμή κώδικα που θα βρει αμέσως μετά το if. Εγώ θα συνιστούσα να αποφεύγεται τέτοιου είδους εγγραφές κώδικα τώρα τουλάχιστον που είσαστε σε αρχάριο ακόμα επίπεδο.

Line 33: Αυτή είναι η τελευταία γραμμή του κανονικού προγράμματος που δεν ανήκει σε κανένα if οπότε θα εκτελεστεί χωρίς να εξαρτιέται από κάποια συνθήκη. Αφού αποκτήσαμε μια πρώτη εμπειρία με την εκτέλεση της if εντολής μπορούμε να καταλήξουμε σε κάποια συμπεράσματα. Βασικά παρατηρούμε ότι η java έχει δυο επιλογές όταν βρίσκεται μπροστά σε ένα if – είτε θα το αγνοήσει εντελώς εάν είναι false η συνθήκη, είτε θα τρέξει το κώδικα που συνοδεύει το if εφόσον η συνθήκη είναι true. Αυτή η συμπεριφορά όμως ενοχλεί τους προγραμματιστές γιατί έχουνε τον έλεγχο μόνο όταν το if είναι true.
Όταν η συνθήκη είναι false αγνοείται η ύπαρξη του if και χάνεται ο έλεγχος. Θα ήταν πιο επιθυμητό το πρόγραμμα να ακολουθούσε πιο συγκεκριμένο μονοπάτι εκτέλεσης είτε η συνθήκη αληθεύει είτε όχι.
Αυτή την βοήθεια την προσφέρει το if με την συνοδεία του else.

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

Στο συγκεκριμένο παράδειγμα ορίζουμε μια μεταβλητή score με αρχική τιμή 89. Όταν η εκτέλεση του προγράμματος φτάνει στο σημείο του if τότε αξιολογείται η συνθήκη η οποία δεν είναι true. Από την στιγμή που η συνθήκη είναι false παραβλέπεται το block κώδικα που ακολουθεί το if και java εκτελεί την δεύτερη εναλλακτική λύση που έχουμε δώσει δια μέσω του else.
Το πρόγραμμα δεν βγαίνει ακόμα έξω από το σύμπλεγμα του if γιατί έχει συνδυαστεί με το else και πρέπει να εκτελεστεί ένα από τα δύο block κώδικα. Από την στιγμή λοιπόν που η συνθήκη είναι false εκτελείται το block του κώδικα που ακολουθεί το else με αποτέλεσμα να δούμε το μήνυμα “You grade is less than A”.

Εάν τώρα θέλουμε να έχουμε μια σωρεία από επιλογές που όμως θέλουμε να επαληθευτεί ο κώδικας για μια μόνο επιλογή τότε μπορούμε να χρησιμοποιήσουμε μια σωρεία από if-then-else statements όπως δείχνει και το παρακάτω πρόγραμμα το οποίο προέρχεται από το επίσημο site της java:

Εδώ βλέπουμε την πιο ευρεία χρήση του if-then-else statement. Υπάρχει μια σωρεία από if-then-else τα οποία όμως μεταξύ τους συνδέονται με τον εξής τρόπο:
Έχουμε αναθέσει την τιμή 76 στην μεταβλητή testscore.
Η εκτέλεση του προγράμματος συναντάει την πρώτη συνθήκη if και βγάζει αποτέλεσμα false εφόσον το 76 δεν είναι μεγαλύτερο από το 90. Κατά συνέπεια παραβλέπεται το block κώδικα που ακολουθεί και το πρόγραμμα συνεχίζει στο else.
Το else όμως περιέχει άλλο if το οποίο αποτελείται από νέα συνθήκη. Επειδή ούτε και αυτή η συνθήκη αληθεύει, το πρόγραμμα θα συνεχίσει στο επόμενο else και κατά συνέπεια στο if που ακολουθεί. Στο τρίτο if η συνθήκη είναι true και το block κώδικα που ακολουθεί εκτελείται. Μετά την εκτέλεση του κώδικα, το πρόγραμμα μας θα βγει έξω από όλο αυτό το σύμπλεγμα των if-then-else για να συνεχίσει με επόμενες εντολές κώδικα.

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

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

  • Σχόλια

0 Comments:

Scroll to Top