You are on page 1of 34

ΠΛΗ24

ΕΝΟΤΗΤΑ 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 {

public static void main(String[] args) {

int x = 2, y = 5, z = 7;

if (x >= 1)
System.out.println("Μέσα στο πρώτο if");
System.out.println("Μετά το πρώτο if");

if (x >= 1 && y - 5 > -2 && y - z < 0) {


System.out.print("Μέσα στο ");
System.out.println("δεύτερο if");
}
System.out.println("Μετά το δεύτερο if");
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 7

Β. Θεωρία
2. Δομές επιλογής
1. Η δομή επιλογής if-then
if (x < 0) { System.out.println("Μέσα στο τρίτο if"); }
System.out.println("Μετά το τρίτο if");

boolean result = false;


if (!result)
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 παρακάτω
τρόπους:

if (συνθήκη) { if (συνθήκη-1) { if (συνθήκη-1) {


εντολές εντολές εντολές
} else { } else if (συνθήκη-2) { } else if (συνθήκη-2) {
εντολές εντολές εντολές
} } }
… …
} else if (συνθήκη-ν) { } else if (συνθήκη-ν) {
εντολές εντολές
} } else {
εντολές
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 9

Β. Θεωρία
2. Δομές επιλογής
2. Η δομή επιλογής if-then-else
 Όπως και στην απλή εντολή if, όταν η εντολή μέσα στο τμήμα κώδικα είναι μία
ακριβώς, τότε τα άγκιστρα { } που περικλείουν το τμήμα κώδικα, μπορούν να
παραληφθούν.
public class IfThenElseExamples {

public static void main(String[] args) {

int x = 10, y = 20, z = 30;

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 είναι ισοδύναμη με το εξής κομμάτι κώδικα:

μεταβλητή = κάποια τιμή; μεταβλητή = κάποια τιμή;


if (μεταβλητή == τιμή-1) { switch(μεταβλητή) {
εντολές-1 case τιμή-1:
} else if (μεταβλητή == τιμή-2) { εντολές-1
εντολές-2 break;
}… case τιμή-2:
} else { εντολές-2
εντολές-else break;
} …
default:
εντολές-else
break;
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 12
Β. Θεωρία
2. Δομές επιλογής
3. Η δομή επιλογής switch
public class SwitchExample {
public static void main(String[] args) {

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 {

public static void main(String[] args) {

int i = 1;
while (i <= 5) {
System.out.println("Είμαι μέσα στο while");
i++;
}

}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 17

Β. Θεωρία
3. Δομές επανάληψης
1. Η δομή επανάληψης while
public class WhileExample {

public static void main(String[] args) {

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 (συνθήκη)

 Σε αντίθεση με τις υπόλοιπες εντολές επιλογής και επανάληψης, τα άγκιστρα { } δεν


μπορούν να παραληφθούν αν το κομμάτι κώδικα περιέχει μόνο μία εντολή,
 Η εκτέλεση του κώδικα εκτελεί αρχικά τις εντολές και στην συνέχεια ελέγχει αν η
συνθήκη είναι true. Αν είναι true οι εντολές εκτελούνται ξανά και η συνθήκη ελέγχεται
και πάλι κ.ο.κ.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 19

Β. Θεωρία
3. Δομές επανάληψης
2. Η δομή επανάληψης do-while
public class DoWhileExample {

public static void main(String[] args) {

int i = 1;
do {
System.out.println("Είμαι μέσα στο do-while");
i++;
} while (i < 6);

}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 20

Β. Θεωρία
3. Δομές επανάληψης
2. Η δομή επανάληψης do-while
public class DoWhileExample {

public static void main(String[] args) {

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 είναι η ακόλουθη:

for (αρχικοποίηση; συνθήκη; βήμα) {


εντολές
}

 Αν το κομμάτι κώδικα περιλαμβάνει μόνο μία εντολή, τότε τα άγκιστρα { } μπορούν να


παραληφθούν.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 22

Β. Θεωρία
3. Δομές επανάληψης
3. Η δομή επανάληψης for
 Στην ουσία μία εντολή for αντιστοιχεί στο ακόλουθο while:

αρχικοποίηση
while (συνθήκη) {
εντολές
βήμα
}

 Όπως και στην δομή επιλογής while, έτσι και στην συνθήκη επιλογής for, υπάρχει
περίπτωση το κομμάτι κώδικα να μην εκτελεστεί ούτε μία φορά, αν η συνθήκη είναι
αρχικά false.
 Το βήμα ονομάζεται έτσι επειδή συνήθως στο σημείο αυτό αυξάνεται ή μειώνεται
κατά ένα (i++ ή i--) η τιμή κάποιας μεταβλητής
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 23

Β. Θεωρία
3. Δομές επανάληψης
3. Η δομή επανάληψης for
public class ForExample {

public static void main(String[] args) {

int i;

for (i = 0; i <= 5; i++) {


System.out.println("Είμαι μέσα στο for");
System.out.println("Η τιμή του i είναι: " + i);
}

}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 24

Β. Θεωρία
3. Δομές επανάληψης
3. Η δομή επανάληψης for
 Κάτι το οποίο είναι πολύ συνηθισμένο στην Java είναι η δήλωση της μεταβλητής που
χρησιμοποιείται για τον έλεγχο της επανάληψης στο κομμάτι της αρχικοποίησης ως
εξής:

for (int i = 0; i < 10; i++) {



}

 Αν η μεταβλητή δηλωθεί ως εξής τότε έχει εμβέλεια (ισχύ) μόνο μέσα στην δομή
επανάληψης for και «χάνεται» μετά το τέλος της επανάληψης.

for (int i = 0; i < 10; i++) {


...
}
System.out.println(i); // Λάθος κατά την μεταγλώττιση
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 25

Β. Θεωρία
3. Δομές επανάληψης
4. Οι λέξεις break και continue
 Η λέξη break σταματά αμέσως την εκτέλεση μιας δομής επανάληψης.
 Η λέξη continue αναγκάζει την δομή επανάληψης να πάει κατευθείαν στον έλεγχο της
συνθήκης (στην περίπτωση της δομής επανάληψης for εκτελείται και το βήμα πριν
την μετάβαση στον έλεγχο της συνθήκης).
 Οι εντολές αυτές χρησιμοποιούνται με κάποια δομή επιλογής μέσα στο σώμα μιας
δομής επανάληψης.
public class BreakExample {
public static void main(String[] args) {

for (int i = 0; i < 5; i++) {


if (i == 3)
break;
System.out.println("Μέσα στο for");
}
System.out.println("Μετά το for");
}
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 26

Β. Θεωρία
3. Δομές επανάληψης
4. Οι λέξεις break και continue
public class ContinueExample {

public static void main(String[] args) {

for (int i = 0; i < 5; i++) {


if (i == 1 || i == 4)
continue;
System.out.println("Μέσα στο for με i = " + i);
}
System.out.println("Μετά το for");

}
}
Βασίλειος Νικάκης, ΠΛΗ 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
 Το πρόγραμμα είναι το ακόλουθο:

public class Askisi2 {

public static void main(String[] args) {

for (int i = 1; i <= 10; i++) {


System.out.println(i + " * 5 = " + i*5);
}

}
}
Βασίλειος Νικάκης, ΠΛΗ 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. Το αποτέλεσμα να είναι της μορφής:

 Προπαίδεια του αριθμού 1


 ====================
 1*1=1
 2*1=2
 …

 Προπαίδεια του αριθμού 2


 =====================
 1*2=2
 2*2=4
 …
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.4: Δομές Επιλογής και Δομές Επαναλήψης 34

Δ. Ασκήσεις
Άσκηση 4*
 Κατασκευάστε πρόγραμμα το οποίο να τυπώνει τα παρακάτω σχήμα:

 * η δυσκολία της άσκησης είναι μεγάλη

You might also like