Professional Documents
Culture Documents
plh24 Lesson 1 4
plh24 Lesson 1 4
ΕΝΟΤΗΤΑ 1: JAVA
Μάθημα 1.4:
Δομές Επιλογής και Δομές Επανάληψης
Βασίλειος Νικάκης
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 2
ΠΕΡΙΕΧΟΜΕΝΑ
Α. Σκοπός του Μαθήματος
Β.Θεωρία
1. Τμήματα κώδικα
1. Η έννοια του τμήματος κώδικα
2. Δομές επιλογής
1. Η δομή επιλογής if-then
2. Η δομή επιλογής if-then-else
3. Η δομή επιλογής switch
4. Ο τελεστής ? :
3. Δομές επανάληψης
1. Η δομή επανάληψης while
2. Η δομή επανάληψης do-while
3. Η δομή επανάληψης for
4. Οι λέξεις break και continue
Γ. Λυμένες Ασκήσεις
Δ. Ασκήσεις
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 3
Επίπεδο Α
Η έννοια του τμήματος κώδικα
Λειτουργία των δομών επιλογής
Λειτουργία των δομών επανάληψης
Οι λέξεις break, continue
Λυμένες ασκήσεις
Επίπεδο Β
Ασκήσεις
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 4
Β. Θεωρία
1. Τμήματα κώδικα
1. Η έννοια του τμήματος κώδικα
Μέσα στο σώμα μιας μεθόδου, ένα τμήμα κώδικα (code block) αποτελεί μία ομάδα
εντολών της Java οι οποίες περικλείονται μέσα σε άγκιστρα { }.
Μέσα σε ένα τμήμα κώδικα μπορούν να ορισθούν μεταβλητές, η εμβέλεια των
οποίων (δηλαδή το κομμάτι κώδικα στο οποίο έχουν ισχύ) ανήκει εξ’ολοκλήρου μέσα
στο τμήμα κώδικα και συνεπώς δεν μπορούμε να αναφερθούμε σε αυτές έξω από
αυτό.
public class CodeBlockExample {
public static void main(String[] args) {
int x = 2;
{
String y = "hello";
}
int y = 7;
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 5
Β. Θεωρία
2. Δομές επιλογής
1. Η δομή επιλογής if-then
Η δομή επιλογής if-then ελέγχει αν μία λογική συνθήκη είναι αληθής και στην
περίπτωση που είναι true εκτελεί τις εντολές που περικλείονται σε ένα κομμάτι
κώδικα.
Η σύνταξή της είναι η ακόλουθη:
if (συνθήκη) {
εντολές
}
Στην περίπτωση που η λογική συνθήκη είναι false, τότε οι εντολές στο τμήμα κώδικα
αγνοούνται εντελώς.
Όταν η εντολή μέσα στο τμήμα κώδικα είναι μία ακριβώς, τότε τα άγκιστρα { } που
περικλείουν το τμήμα κώδικα, μπορούν να παραληφθούν.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 6
Β. Θεωρία
2. Δομές επιλογής
1. Η δομή επιλογής if-then
public class IfExamples {
int x = 2, y = 5, z = 7;
if (x >= 1)
System.out.println("Μέσα στο πρώτο if");
System.out.println("Μετά το πρώτο if");
Β. Θεωρία
2. Δομές επιλογής
1. Η δομή επιλογής if-then
if (x < 0) { System.out.println("Μέσα στο τρίτο if"); }
System.out.println("Μετά το τρίτο if");
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 8
Β. Θεωρία
2. Δομές επιλογής
2. Η δομή επιλογής if-then-else
Η δομή επιλογής if-then-else μας δίνει την δυνατότητα να εκτελέσουμε εντολές στην
περίπτωση που η συνθήκη του if δεν είναι αληθής.
Η δομή επιλογής if-then-else μπορεί να γραφεί με έναν από τους 3 παρακάτω
τρόπους:
Β. Θεωρία
2. Δομές επιλογής
2. Η δομή επιλογής if-then-else
Όπως και στην απλή εντολή if, όταν η εντολή μέσα στο τμήμα κώδικα είναι μία
ακριβώς, τότε τα άγκιστρα { } που περικλείουν το τμήμα κώδικα, μπορούν να
παραληφθούν.
public class IfThenElseExamples {
if (x > 10) {
System.out.println("Σημείο 1");
} else
System.out.println("Σημείο 2");
System.out.println("Τέλος πρώτου if-then-else");
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 10
Β. Θεωρία
2. Δομές επιλογής
2. Η δομή επιλογής if-then-else
if (x > 5 && y > 30)
System.out.println("Σημείο 3");
else if (y > 25)
System.out.println("Σημείο 4");
else if (y > 15) {
System.out.println("Σημείο 5");
System.out.println("...και Σημείο 6!");
}
System.out.println("Τέλος δεύτερου if-then-else");
if (x > 25)
System.out.println("Σημείο 7");
else if (y - z > 0)
System.out.println("Σημείο 8");
else
System.out.println("Σημείο 9");
System.out.println("Τέλος τρίτου if-then-else");
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 11
Β. Θεωρία
2. Δομές επιλογής
3. Η δομή επιλογής switch
Η δομή επιλογής switch αποτελεί έναν βολικό και κομψό τρόπο για να γράψουμε
ένα μεγάλο if-then-else.
Η δομή επιλογής switch είναι ισοδύναμη με το εξής κομμάτι κώδικα:
int num = 5;
switch(num) {
case 3:
System.out.println("num == 3");
break;
case 5:
System.out.println("num == 5");
break;
case 1:
System.out.println("num == 1");
break;
default:
System.out.println("Το num είναι κάτι άλλο");
break;
}
System.out.println("Μετά το switch");
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 13
Β. Θεωρία
2. Δομές επιλογής
3. Η δομή επιλογής switch
Η δομή επιλογής switch ελέγχει μόνο συνθήκες ισότητας (δηλαδή αν η μεταβλητή
έχει μια συγκεκριμένη τιμή).
Η δομή επιλογής switch μπορεί να εφαρμοστεί μόνο σε ακέραιες μεταβλητές (byte,
short, int, long) και σε μεταβλητές τύπου char.
Η λέξη break σε κάθε case είναι υποχρεωτική. Σε περίπτωση που το break λείπει
τότε η εκτέλεση των εντολών συνεχίζεται σειριακά και στις εντολές του παρακάτω
case, μέχρι να βρεθεί η λέξη break.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 14
Β. Θεωρία
2. Δομές επιλογής
4. Ο τελεστής ? :
Στην Java ένας κώδικας if-then-else ο οποίος καθορίζει την τιμή μιας μεταβλητής
μπορεί να γραφεί με έναν κομψό και βολικό τρόπο ως εξής:
int y;
if (x > 10)
y = 5; y = (x > 10) ? 5 : 7;
else
y = 7;
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 15
Β. Θεωρία
3. Δομές επανάληψης
1. Η δομή επανάληψης while
Η δομή επανάληψης while εκτελεί τις εντολές μέσα σε ένα κομμάτι κώδικα για όσο
χρονικό διάστημα ισχύει μία συνθήκη (δηλαδή είναι true).
Η σύνταξη της δομής επανάληψης while είναι η ακόλουθη:
while (συνθήκη) {
εντολές
}
Όπως και στις δομές επιλογής, αν το κομμάτι κώδικα περιλαμβάνει μόνο μία εντολή,
τότε τα άγκιστρα { } μπορούν να παραληφθούν.
Η συνθήκη της δομής επανάληψης while ελέγχεται αρχικά και αν είναι true, τότε
εκτελούνται οι εντολές στο κομμάτι κώδικα. Όταν οι εντολές τελειώσουν τότε η
εκτέλεση του προγράμματος ελέγχει και πάλι την συνθήκη και σε περίπτωση που
είναι true εκτελεί και πάλι τις εντολές στο κομμάτι κώδικα κ.ο.κ.
Σύμφωνα με τα παραπάνω υπάρχει περίπτωση το κομμάτι κώδικα να μην εκτελεστεί
ούτε μία φορά, αν η συνθήκη είναι αρχικά false.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 16
Β. Θεωρία
3. Δομές επανάληψης
1. Η δομή επανάληψης while
public class WhileExample {
int i = 1;
while (i <= 5) {
System.out.println("Είμαι μέσα στο while");
i++;
}
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 17
Β. Θεωρία
3. Δομές επανάληψης
1. Η δομή επανάληψης while
public class WhileExample {
int i = 10;
boolean stop = false;
while (!stop) {
System.out.println("Είμαι μέσα στο while");
i--;
if (i == 0) stop = true;
}
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 18
Β. Θεωρία
3. Δομές επανάληψης
2. Η δομή επανάληψης do-while
Η δομή επανάληψης do-while εκτελεί τις εντολές μέσα σε ένα κομμάτι κώδικα για
όσο χρονικό διάστημα ισχύει μία συνθήκη (δηλαδή είναι true).Η διαφορά της με την
εντολή επανάληψης do-while είναι ότι οι εντολές στο κομμάτι κώδικα εκτελούνται
τουλάχιστον μία φορά.
Η σύνταξη της δομής επανάληψης do-while είναι η ακόλουθη:
do {
εντολές
} while (συνθήκη)
Β. Θεωρία
3. Δομές επανάληψης
2. Η δομή επανάληψης do-while
public class DoWhileExample {
int i = 1;
do {
System.out.println("Είμαι μέσα στο do-while");
i++;
} while (i < 6);
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 20
Β. Θεωρία
3. Δομές επανάληψης
2. Η δομή επανάληψης do-while
public class DoWhileExample {
int i = 5, j = -1;
do {
System.out.println("Είμαι μέσα στο do-while");
i--;
j++;
} while (i >= 1 && j > 0);
System.out.println("Μετά το do-while");
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 21
Β. Θεωρία
3. Δομές επανάληψης
3. Η δομή επανάληψης for
Η δομή επανάληψης for εκτελεί τις εντολές μέσα σε ένα κομμάτι κώδικα για όσο
χρονικό διάστημα ισχύει μία συνθήκη (δηλαδή είναι true). Η διαφορά της με τις
υπόλοιπες δομές επανάληψης είναι ότι μπορούμε να αρχικοποιήσουμε και να
αλλάξουμε την τιμή μιας μεταβλητής με έναν πολύ βολικό κι έυχρηστο τρόπο.
Η σύνταξη της δομής επανάληψης for είναι η ακόλουθη:
Β. Θεωρία
3. Δομές επανάληψης
3. Η δομή επανάληψης for
Στην ουσία μία εντολή for αντιστοιχεί στο ακόλουθο while:
αρχικοποίηση
while (συνθήκη) {
εντολές
βήμα
}
Όπως και στην δομή επιλογής while, έτσι και στην συνθήκη επιλογής for, υπάρχει
περίπτωση το κομμάτι κώδικα να μην εκτελεστεί ούτε μία φορά, αν η συνθήκη είναι
αρχικά false.
Το βήμα ονομάζεται έτσι επειδή συνήθως στο σημείο αυτό αυξάνεται ή μειώνεται
κατά ένα (i++ ή i--) η τιμή κάποιας μεταβλητής
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 23
Β. Θεωρία
3. Δομές επανάληψης
3. Η δομή επανάληψης for
public class ForExample {
int i;
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 24
Β. Θεωρία
3. Δομές επανάληψης
3. Η δομή επανάληψης for
Κάτι το οποίο είναι πολύ συνηθισμένο στην Java είναι η δήλωση της μεταβλητής που
χρησιμοποιείται για τον έλεγχο της επανάληψης στο κομμάτι της αρχικοποίησης ως
εξής:
Αν η μεταβλητή δηλωθεί ως εξής τότε έχει εμβέλεια (ισχύ) μόνο μέσα στην δομή
επανάληψης for και «χάνεται» μετά το τέλος της επανάληψης.
Β. Θεωρία
3. Δομές επανάληψης
4. Οι λέξεις break και continue
Η λέξη break σταματά αμέσως την εκτέλεση μιας δομής επανάληψης.
Η λέξη continue αναγκάζει την δομή επανάληψης να πάει κατευθείαν στον έλεγχο της
συνθήκης (στην περίπτωση της δομής επανάληψης for εκτελείται και το βήμα πριν
την μετάβαση στον έλεγχο της συνθήκης).
Οι εντολές αυτές χρησιμοποιούνται με κάποια δομή επιλογής μέσα στο σώμα μιας
δομής επανάληψης.
public class BreakExample {
public static void main(String[] args) {
Β. Θεωρία
3. Δομές επανάληψης
4. Οι λέξεις break και continue
public class ContinueExample {
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 27
Γ. Λυμένες Ασκήσεις
Άσκηση 1
Τι θα τυπωθεί κατά την εκτέλεση του παρακάτω προγράμματος; Προσπαθήστε να
απαντήσετε χωρίς να εκτελέστε τον κώδικα στο NetBeans.
public class Askisi1 {
public static void main(String[] args) {
int x = 4, y = x + 3;
while (x > 0) {
System.out.println("Σημείο 1");
x -= 1;
for (int i = 2; i <= y; i += 3) {
if (x - 1 == 0) break;
System.out.println("Σημείο 2");
}
x--;
}
System.out.println("Σημείο 3");
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 28
Γ. Λυμένες Ασκήσεις
Άσκηση 1
Η εκτέλεση του προγράμματος θα οδηγήσει στην παρακάτω εκτύπωση:
Σημείο 1
Σημείο 2
Σημείο 2
Σημείο 1
Σημείο 3
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 29
Γ. Λυμένες Ασκήσεις
Άσκηση 2
Κατασκευάστε ένα πρόγραμμα το οποίο να τυπώνει την προπαίδεια του αριθμού 5.
Η εκτύπωση να είναι της ακόλουθης μορφής:
1*5=5
2 * 5 = 10
3 * 5 = 15
....
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 30
Γ. Λυμένες Ασκήσεις
Άσκηση 2
Το πρόγραμμα είναι το ακόλουθο:
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 31
Δ. Ασκήσεις
Άσκηση 1
Τι θα τυπωθεί κατά την εκτέλεση του παρακάτω προγράμματος; Προσπαθήστε να
απαντήσετε χωρίς να εκτελέστε τον κώδικα στο NetBeans.
public class Askisi1 {
public static void main(String[] args) {
int x = 3;
do {
System.out.println("Σημείο 1");
for (int y = 10; y >= x; y--) {
x += 2;
System.out.println("Σημείο 2 με x = " + x + " και y = " + y);
y--;
}
} while (x >= 15);
System.out.println("Σημείο 3");
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 32
Δ. Ασκήσεις
Άσκηση 2
Τι θα τυπωθεί κατά την εκτέλεση του παρακάτω προγράμματος; Προσπαθήστε να
απαντήσετε χωρίς να εκτελέστε τον κώδικα στο NetBeans.
public class Askisi2 {
public static void main(String[] args) {
int lines = 5;
int stars = 1;
for (int i = 1; i <= lines; i++) {
for (int j = 1; j <= lines-stars; j++)
System.out.print(" ");
for (int j = 1; j <= stars; j++)
System.out.print("*");
System.out.print("\n");
stars++;
}
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 33
Δ. Ασκήσεις
Άσκηση 3
Κατασκευάστε πρόγραμμα το οποίο να τυπώνει την προπαίδεια των αριθμών από το
1 εώς το 10. Το αποτέλεσμα να είναι της μορφής:
Δ. Ασκήσεις
Άσκηση 4*
Κατασκευάστε πρόγραμμα το οποίο να τυπώνει τα παρακάτω σχήμα: