Δομές διακλάδωσης, επαναλήψεις, μέθοδοι Java – Βοηθητικό Υλικό
Αποφάσεις Δεν έχουμε ακολουθιακή εκτέλεση Διακόπτεται η κανονική ροή και ανάλογα με την τιμή μιας έκφρασης πραγματοποιείται μια διακλάδωση υπό συνθήκη Υπάρχουν και διακλαδώσεις που εκτελούνται χωρίς συνθήκη
Η δομή if Η πιο συνηθισμένη εντολή διακλάδωσης if (συνθήκη) Η πιο συνηθισμένη εντολή διακλάδωσης if (συνθήκη) { εντολή 1; εντολή 2; ……. } if (συνθήκη) εντολή 1; εντολή 2; …….
Else if (συνθήκη) { εντολές Α; } else εντολές Β;
1ο Παράδειγμα Να δημιουργηθεί πρόγραμμα το οποίο να παράγει ένα τυχαίο αριθμό μεταξύ του 1 και του 10 και στη συνέχεια να εξετάζει αν ο αριθμός είναι άρτιος ή περιττός. Υπόδειξη: Για την δημιουργία των τυχαίων αριθμών θα χρησιμοποιηθεί η συνάρτηση Math.random()
1ο παράδειγμα –Λύση Να δημιουργηθεί πρόγραμμα το οποίο να παράγει ένα τυχαίο αριθμό μεταξύ του 1 και του 10 και στη συνέχεια να εξετάζει αν ο αριθμός είναι άρτιος ή περιττός. Public class CheckNum { public static void main (String[] args) int number=0; number = 1+(int)(9*Math.random()); if(number%2==0) System.out.println (“Number “+number+” is even); else System.out.println (“Number “+number+” is odd); }
2ο Παράδειγμα – Ένθετα if Δίνονται 3 διαφορετικοί ακέραιοι x,y,z. Να τοποθετηθούν σε αύξουσα σειρά.
2ο Παράδειγμα - Λύση public class Order { public static void main (String [] args) int x=-45, y=115, z=0; if (x<y && x<z) if(y<z) System.out.println (“The order is “+x+”, “+y+”, “+z+”“); else System.out.println (“The order is “+x+”, “+z+”, “+y+”“); } if (x>z && x>y) { if(z>y) System.out.println (“The order is “+y+”, “+z+”, “+x+”“); else System.out.println (“The order is “+z+”, “+y+”, “+x+”“); } if(x<y && x>z) System.out.println (“The order is “+z+”, “+x+”, “+y+”“); if(x>y && x<z) System.out.println (“The order is “+y+”, “+x+”, “+z+”“);
Else if Public class Order1 { public static void main (String [] args) int x=-45,y=115, z=0; if (x<y && x<z) if (y<z) System.out.println (“The order is “+x+”, “+y+”, “+z+”“); else System.out.println (“The order is “+x+”, “+z+”, “+y+”“); else if(x>z && x>y) if (z>y) System.out.println (“The order is “+y+”, “+z+”, “+x+”“); else System.out.println (“The order is “+z+”, “+y+”, “+x+”“); else if (x<y && x>z) System.out.println (“The order is “+z+”, “+x+”, “+y+”“); System.out.println (“The order is “+y+”, “+x+”, “+z+”“); }
Οι τελεστές & και | Υπό συνθήκη And (&&) X==5 && y>=12 Εξετάζεται η πρώτη συνθήκη και εάν βρεθεί ψευδής δεν εξετάζεται η 2η Λογικό and (&) X==5 & y>=12 Έστω χ=5 και y=13 Εξετάζονται κάθε φορά και οι δύο συνθήκες Χρήσιμος όταν μεταβάλλεται η τιμή μιας μεταβλητής Π.χ.: χ==5 & ++y>=12
Τριαδικός τελεστής ?: Εμπλέκει 3 τελεστές if (a>b) max=a; else Τριαδικός τελεστής ?: Εμπλέκει 3 τελεστές if (a>b) max=a; else max=b; max = a > b ? a : b **Αρχικά ελέγχεται η συνθήκη, εάν είναι αληθής επιστρέφεται η τιμή α, αλλιώς η τιμή b
3ο Παράδειγμα Να κατασκευαστεί πρόγραμμα το οποίο να δημιουργεί δύο τυχαίους φυσικούς αριθμούς μικρότερους του 100 και στη συνέχεια να βρίσκει και να τυπώνει τον μεγαλύτερο και τον μικρότερο από αυτούς. Υπόδειξη: Για την δημιουργία των τυχαίων αριθμών θα χρησιμοποιηθεί η συνάρτηση Math.random()
3o Παράδειγμα - Λύση public class MinMax { public static void main (String [] args) int a=1+(int)(99*Math.random()) ; System.out.println(“The first is …” +a”); int b =1+(int)(99*Math.random()); System.out.println(“The first is …” +b”); int min=(a<b?a:b); int max=(a>b?a:b); System.out.println(“The minimum is …” +min”); System.out.println(“The maximum is …” +max”); }
Switch Δομή πολλαπλής διακλάδωσης Εξετάζεται μια μεταβλητή ή μια έκφραση που μπορεί να πάρει διάφορες τιμές Η χρησιμοποιούμενη έκφραση ή μεταβλητή πρέπει να είναι τύπου int, byte, short ή char Σε κάθε case πρέπει να βάζουμε την εντολή υπερπήδησης break, αλλιώς το πρόγραμμα θα συνεχίσει τη ροή του εκτελώντας την επόμενη εντολή case. Σύνταξη: Switch (έκφραση) { Case (τιμή1): Ομάδα εντολών1; Break; Case (τιμή2): Ομάδα εντολών2; …… Case (τιμήn): Ομάδα εντολώνn; } ….
4ο Παράδειγμα Έστω ότι έχουμε μια τυχαία εμφάνιση ενός αριθμού από 1 έως 5. Για τις τιμές 1 και 5 θέλουμε να τυπώνει στην οθόνη τα χρώματα μαύρο και άσπρο αντίστοιχα, ενώ για τις τιμές 2,3,4 να τυπώνονται τα τρία βασικά χρώματα κόκκινο, πράσινο, μπλε.
4o Παράδειγμα - Λύση Public class ShowSwitch { public static void main (String[] args) int x=(int)(1+5*Math.random()); switch (x) case 1: System.out.println(“Black” ); break; case 2: System.out.println(“Red”); case 3: System.out.println(“Green” ); break; case 4: System.out.println(“Blue”); case 5: System.out.println(“White ”);
Εντολές επανάληψης - βρόχοι Γνωστός αριθμός επαναλήψεων for Άγνωστος ο αριθμός των επαναλήψεων while ή do – while Οι εντολές επαναλαμβάνονται εφόσον εξακολουθεί να ισχύει μια λογική συνθήκη
for Περιέχει μια συνθήκη με μετρητή Η εκτέλεση των εντολών που υπάρχουν μέσα στο βρόχο γίνεται εφόσον ο μετρητής επαληθεύει τη συνθήκη Έκφραση1: Οποιαδήποτε παράσταση Εκτελείται μια φορά στην αρχή του βρόχου Έκφραση2: Οπωσδήποτε λογική έκφραση Ελέγχεται πριν από κάθε επανάληψη, αν είναι ψευδής ο βρόχος τερματίζεται Έκφραση3: Καθορίζει το βήμα της επανάληψης Σύνταξη: for (συνθήκη ελέγχου) { Εντολές } for( έκφραση1; Έκφραση2; Έκφραση3 )
5ο Παράδειγμα Να δίνεται ο ακέραιος αριθμός Ν και στη συνέχεια να υπολογίζεται το άθροισμα των αριθμών 1+2+3+…+Ν.
5ο Παράδειγμα - Λύση Να δίνεται ο ακέραιος αριθμός Ν και στη συνέχεια να υπολογίζεται το άθροισμα των αριθμών 1+2+3+…+Ν Public class summation { public static void main (String[] args) int N=100; int Sum=0; for (int i=1; i<N; i++) Sum=Sum+i; System.out.println (“The sum is “+Sum); }
While Ο αριθμός των επαναλήψεων δεν είναι προκαθορισμένος αλλά εξαρτάται από μια συνθήκη Εφόσον η συνθήκη είναι αληθής εξακολουθεί να εκτελείται
6ο Παράδειγμα Να δημιουργηθεί πρόγραμμα το οποίο να δίνει σε μια μεταβλητή τύπου float την τιμή 10.0. Στη συνέχεια η μεταβλητή αυτή να υποδιπλασιάζεται μέχρι να γίνει μικρότερη από την τιμή 0,01
6ο Παράδειγμα - Λύση Να δημιουργηθεί πρόγραμμα το οποίο να δίνει σε μια μεταβλητή τύπου float την τιμή 10.0. Στη συνέχεια η μεταβλητή αυτή να υποδιπλασιάζεται μέχρι να γίνει μικρότερη από την τιμή 0,01 Public class halves { public static void main (String[] args) float x=10.0; System.out.println (“initial value of x=“+x); while (x<0.01) x/=2; System.out.println(“x is now”+x); }
Do - while Ο έλεγχος γίνεται στο τέλος του βρόχου και όχι στην αρχή όπως στο while. Με τον τρόπο αυτό εξασφαλίζεται η εκτέλεση του βρόχου μια φορά ακόμα και αν η συνθήκη είναι ψευδής. Σύνταξη: do { εντολές } while (συνθήκη);
7ο Παράδειγμα Να υπολογιστεί το άθροισμα 1+2+3+…+Ν με τη δομή do-while.
7ο Παράδειγμα Public class summation { public static void main (String[] args) int N=100; int i=1; int Sum=0; do { Sum+=i++; } while (i<=N); System.out.println (“The sum is” +Sum);
Ένθετοι βρόχοι Ο εσωτερικός βρόχος πρέπει να περικλείεται εξ ολοκλήρου στον εξωτερικό Δεν μπορούμε να μπούμε στο εσωτερικό ενός βρόχου αν δεν περάσουμε από την πρώτη εντολή του Δεν μπορούμε να χρησιμοποιήσουμε την ίδια μεταβλητή ως απαριθμητή σε δυο ή περισσότερους βρόχους, που ο ένας να περιέχεται στον άλλο
8ο Παράδειγμα Να φτιαχτεί πρόγραμμα που να υπολογίζει την προπαίδεια μέχρι το 10.
8ο Παράδειγμα - Λύση Public class propaidia { public static void main (String[] args) int c=0; for (int a=1; a<=10; a++) for (int b=1; b<=10; b++) { c=a*b; System.out.println(a+”x”+b+”=” +c); } System.out.println();
Βρόχος καθυστέρησης Καθυστερεί την εκτέλεση του προγράμματος για συγκεκριμένο χρονικό διάστημα Π.χ.: for (int i=1; i<100000000; i++) { }
Continue Χρησιμοποιείται σε περιπτώσεις στις οποίες δεν θέλουμε να εκτελεστεί το περιεχόμενο ενός βρόχου για μια συγκεκριμένη τιμή της συνθήκης ή του μετρητή Public static void main (String[] args) { int sum=0; for (int i=1; i<=10; i++) if (i==4 | i==8) continue; System.out.println(i); Sum=Sum+i; } System.out.println(“The sum is”+sum);
Continue με ετικέτα Χρησιμοποιείτε σε περίπτωση που θέλουμε να βγούμε από τον εσωτερικό βρόχο για κάποιες συγκεκριμένες τιμές και να μεταφερθούμε στον εξωτερικό.
9ο Παράδειγμα Να υπολογιστεί το παραγοντικό των αριθμών από 1 έως 20, εκτός των αριθμών 5 και 15
9ο Παράδειγμα - Λύση Public class showcontinue { Public static void main (String[] args) int ubound=20; long fact=1; Label1: For (int i=1; i<ubound; i++) { Fact=1; For (int j=2; j<=1; j++) If (i==5 | i==15) Continue label1; Fact *=j; } System.out.println(i+”!”+”is “+fact); }}}
Μέθοδοι Αποτελούν ένα σύνολο από δηλώσεις και εντολές οι οποίες ομαδοποιούνται ώστε να αποτελέσουν ένα ανεξάρτητο πρόγραμμα Τιμή_επιστροφής όνομα_μεθόδου (λίστα παραμέτρων) { Δηλώσεις και εντολές } Όνομα: Οποιοδήποτε έγκυρό όνομα Τιμή επιστροφής: Ο τύπος δεδομένων που επιστρέφει η μέθοδος σε αυτόν που την καλεί Εάν η μέθοδος δεν επιστρέφει καμία τιμή τότε πρέπει να μπει η λέξη void. Οι δηλώσεις και οι εντολές οι οποίες ανήκουν στη μέθοδο πρέπει να περικλείονται σε άγκιστρα
Μέθοδοι Για να καλέσει τη μέθοδο ο χρήστης θα πρέπει να καλέσει το όνομα της στο σημείο που το χρειάζεται
Τέλος