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

Post Pic
στις 27.11.09. Kατηγορίες Java με 5 Σχόλια

Στο σημερινό βοήθημα, θα ξεκινήσουμε μια καινούρια ενότητα. Σήμερα ξεκινούμε να μαθαίνουμε για τις δομές διακλάδωσης. Μέχρι τώρα, όλα τα προγράμματα μας εκτελούνταν σειριακά, δηλαδή ακριβώς με τη σειρά με την οποία τα είχαμε γράψει στον κώδικα μας. Με το τέλος αυτής της σειράς βοηθημάτων θα είμαστε σε θέση να χρησιμοποιούμε τις δομές if, if else, switch, for, while και do while.

Ας πάρουμε όμως τα πράγματα από την αρχή..

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

ΑΡΧΗ

ΤΥΠΩΣΕ ρώτησε το όνομα του χρήστη

ΕΙΣΑΓΩΓΗ τιμής ονόματος από τον χρήστη

ΤΥΠΩΣΕ ρώτησε το επώνυμο του χρήστη

ΕΙΣΑΓΩΓΗ τιμής επωνύμου από χρήστη

ΤΥΠΩΣΕ το όνομα και το επώνυμο του χρήστη

ΤΕΛΟΣ

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

Η πρόταση If..

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

  • Έλεγχου της βαθμολογίας κάποιου μαθητή, εάν είναι πάνω από 60/100 τότε να τυπώνει στην οθόνη πως πέρασε το μάθημα, αλλιώς πως κόπηκε.
  • Εάν η θερμοκρασία σε κάποιο δωμάτιο είναι αρκετά υψηλή τότε να δοθεί η εντολή να ξεκινήσει το κλιματιστικό, αλλιώς να μην γίνει τίποτα.
  • Κατά τη διαδικασία κρατήσεων σε κάποιο ξενοδοχείο, ελέγχου από το σύστημα εάν υπάρχει άδειο δωμάτιο.

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

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

Η χρήση της πρότασης If, γίνεται ως εξής:

If ( συνθήκη )
{
Εντολές εάν η συνθήκη είναι αληθές
}

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

If ( age > 18 )
{
   System.out.println(“Eiste panw apo 18 eton”);
}

Βέβαια, για να είμαι πιο σωστός, σε περίπτωση που η εντολή που θέλουμε να εκτελείτε σε περίπτωση που η συνθήκη είναι αληθές είναι μόνο μια, τότε μπορούμε να το γράψουμε και χωρίς τις παρενθέσεις ( {} ).

Δηλαδή κάπως έτσι:

If ( age > 18 )
   System.out.println(“Eiste panw apo 18 eton”);

Και στις δύο πιο πάνω περιπτώσεις, το αποτέλεσμα θα είναι ακριβώς το ίδιο.

Σε περίπτωση που οι εντολές είναι περισσότερες από μία (1), τότε οι παραθέσεις είναι αναγκαστικές. Χωρίς αυτές, ο compiler θεωρεί πως μόνο η αμέσως επόμενη εντολή είναι μέρος του if, και πως ο επόμενος κώδικας που θα βρει στη συνέχεια είναι η συνέχεια του προγράμματος. Έτσι θα δημιουργείτο αναμφίβολα πρόβλημα αφού σε περίπτωση που η συνθήκη ήταν λανθασμένη, θα προσπερνούσε μόνο την αμέσως επόμενη εντολή και όχι όλες όσες στην πραγματικότητα θα βάζαμε στις παρενθέσεις εάν σωστά τις βάζαμε.

Τελεστές Σύγκρισης

Τώρα, ας απομονώσουμε μόνο ένα κομμάτι του κώδικα μας:

If ( age > 18 )

Όπως βλέπεις, μέσα στις παρενθέσεις, έχουμε την ονομαζόμενη «συνθήκη». Σε περίπτωση που αυτή είναι αληθής (True), τότε οι εντολές που περιλαμβάνονται στο if εκτελούνται, ενώ σε αντίθετη περίπτωση απλά θα προσπεραστούν και μετά κανονικά θα συνεχιστεί η ροή του προγράμματος μας.

Χρησιμοποιώντας τους τελεστές σύγκρισης που υπάρχουν στη Java, μπορούμε να συγκρίνουμε δύο τιμές. Στο πιο πάνω παράδειγμα, χρησιμοποιούμε τον τελεστή σύγκρισης «μεγαλύτερο» (>) για να ελέγξουμε εάν η τιμή που έχει δώσει ο χρήστης στη μεταβλητή age είναι μεγαλύτερη από 18. Έτσι, σε περίπτωση που είναι πάνω από 18, το αποτέλεσμα της συνθήκης θα είναι True, και έτσι θα εκτελεστεί ο κώδικας που περιλαμβάνεται στο If.

Άλλους τελεστές σύγκρισης που υπάρχουν στη Java, μπορούμε να τους δούμε στο πιο κάτω σχεδιάγραμμα:

image10-01

Τώρα που μάθαμε την πρόταση If, ας φτιάξουμε ένα πρόγραμμα στο οποίο θα το χρησιμοποιήσουμε στην πράξη..

Παράδειγμα #1

Να φτιαχτεί ένα πρόγραμμα το οποίο θα ζητά από τον χρήστη-υπάλληλο μιας εταιρίας να δίνει τον μηνιαίο μισθό του. Σε περίπτωση που ο μηνιαίος μισθός του είναι κάτω από 700 ευρώ, τότε θα του γίνεται μια αύξηση 10%, και θα του παρουσιάζεται ο νέος του μισθός. Σε περίπτωση που ο μισθός του είναι πάνω από 700 ευρώ, τότε η αύξηση που θα του γίνεται θα είναι 5%.

Λύση

Ας δούμε τον κώδικα για τη λύση στο πρόβλημα μας..

import java.util.*;
public class example1 {
public static void main (String[] args){
Scanner keyboard = new Scanner(System.in);
// dilwsi metavlitwn
double misthos;
//erwtisi pros to xristi kai eisagwgi timis sti metavliti
System.out.println("Poios eine o trexos misthos sas?");
misthos = keyboard.nextDouble();
// edw ksekinun ta 2 if mas kai ginonte oi aparetitoi ipologismoi tis auksisis
if (misthos > 700)
   misthos = misthos + misthos * 5 / 100;
if (misthos < 700)
   misthos = misthos + misthos * 10 / 100;
//ektiposi tou misthou meta tin auksisi
System.out.println("Meta tin auksisi sas o neos sas misthos tha einai " + misthos);
}
}

Όπως βλέπεις, έχω πρώτα τοποθετήσει το If στο οποίο ελέγχω εάν ο μισθός είναι μεγαλύτερος από 700 ευρώ πρώτο, και στη συνέχεια αυτό που ελέγχει εάν είναι μικρότερος από 700. Εάν τα είχα βάλει αντίθετα, κάποιο πρόβλημα θα προέκυπτε. Δεν είναι δύσκολο να το σκεφτεί κάποιος όμως επειδή θέλω να δοκιμάσω τον τρόπο σκέψης σας, θα ήθελα ο πρώτος που θα σκεφτεί κάποιο πιθανό πρόβλημα που θα δημιουργείτο σε μια τέτοια περίπτωση να το γράψει κάτω στα σχόλια.

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

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

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

Μπορείτε να κατεβάσετε τα αρχεία του βοηθήματος εδώ

download

Tags: , ,

MZinas { Προσωπική Ιστοσελίδα / Άρθρα Στο GreekTuts }
Ο Michel βρίσκεται στο παρα πέντε της απόκτησης Πτυχίου Πληροφορικής. Ασχολείται εδώ και χρόνια με τους υπολογιστές και διατηρεί ιστοσελίδα μέσα απο την οποία δίνει λύσεις σε βασικά προβλήματα που μπορεί να αντιμετωπίσει κάποιος χρησιμοποιώντας τους. Απο τον Σεπτέμβριο του 2009 είναι εξωτερικός συνεργάτης του GreekTuts.

5 Σχόλια στο άρθρο Μαθαίνοντας την JAVA – Μέρος 10

  • Ntora says:

    Δεν υπάρχει μέρος 11 κλπ?

  • Ntora says:

    Συγχαρητήρια!Οι σημειώσεις σου είναι πολύ καλές και κατατοπιστικές…

  • Πολύ ωραίοι οι οδηγοί
    σου, όπως είπε κ ι vedouza ελπίζουμε να συνεχίσεις :)
    Btw το πρόβλημα που 8α
    πρόεκυπτε, είναι λογικό, διότι αν ξεκινούσες από το  (misthos < 700)  τότε υπάρχει
    η πιθανότητα, η μεταβλητή μισθός να 3επερνουσε τα 700. Στην συνέχεια το πρόγραμμα
    8α έπρεπε να περάσει κ από το δεύτερο if οπότε θα του ξαναέκανε αύξηση.

  • Οι σημειώσεις είναι πολύ σωστά δομημένες και κατάλληλες για αρχάριους χρήστες, τέτοια άρθρα συμβάλλουν στην εκμάθηση.
    Συγχαρητήρια.
    Με εκτίμηση.
    Ευαγγελία

  • vedouza says:

    Περιμενουμε και τα επομενα (ελπιζω να υπαρξουν) !

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>