Βασικάχαρακτηριστικάτηςγλώσσας Πίνακες, Έλεγχος Ροής και Βρόχοι
Πίνακες Τρόπος αποθήκευσης πολλών στοιχείων που έχουν τον ίδιο πρωταρχικό τύπο δεδοµένων ή κλάση. Τα στοιχεία µπορεί να έχουν οποιοδήποτε από τους γνωστούς τύπους δεδοµένων. Για παράδειγµα µπορώ να έχω πίνακα ακεραίων, πίνακα αντικειµένων τύπου String κ.λπ. αλλά δεν µπορώ να έχω πίνακα µε ακεραίους και χαρακτήρες. Τα στοιχεία ενός πίνακα πρέπει να είναι ίδιου τύπου. Γιαναδηλώσωένανπίνακακάνωταεξής: ηλώνω τον τύπο δεδοµένων που θα περιέχει ο πίνακας, στη συνέχεια δηλώνω το όνοµα του πίνακα και ακολουθούν αγγύλες. Οι αγγύλες µπορούν να προστεθούν µετά το όνοµα του πίνακα ή µετά τον τύπο δεδοµένων των στοιχείων του πίνακα. Και τα δύο είναι σωστά. Παραδείγµατα δήλωσης πινάκων: int pinakas[ ]; ή int[ ] pinakas; String quotes[ ]; ή String[ ] quotes; Point shmeia[ ]; ή Point[ ] shmeia; Στη Java οι πίνακες είναι αντικείµενα και µπορούµε να τους χειριστούµε σαν αντικείµενα.
ηµιουργία και αρχικοποίηση αντικειµένων πίνακα Χρησιµοποιούµε τον τελεστή new. Αρχικοποιούµεταπεριεχόµενατουπίνακα. Παράδειγµα int pinakas[ ] = new int[20]; String quotes[ ] = new String[10]; Στην πρώτη περίπτωση έχω ένα πίνακα 20 θέσεων που µπορεί να περιέχει ακέραιους, ενώ στη δεύτερη έχω πίνακα 10 θέσεων για αντικείµενα τύπου String. Ανδενδώσωαρχικέςτιµέςσταστοιχείατουπίνακατότεανάλογαµε τον τύπο δεδοµένων τους παίρνουν τις ακόλουθες αρχικές τιµές: Αν πρόκειται για αριθµητικούς πίνακες όλες οι θέσεις του πίνακα αρχικοποιούνται στην τιµή 0. Αν πρόκειται για πίνακα χαρακτήρων η τιµήείναιτο \0 καιγιαπίνακααντικειµένωντο null. Παραδείγµατα αρχικοποίησης δεδοµένων του πίνακα. String hmeres[ ] = { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday ; Point[ ] shmeia = {new Point(13,6), new Point(5,8), new Point(4,7); Τα αντικείµενα τύπου String µπορούν να δηµιουργηθούν και να αρχικοποιηθούν χωρίς τον τελεστή new όπως στο πρώτο παράδειγµα στο οποίο έχω ένα πίνακα 7 αντικειµένων τύπου String. Στο δεύτερο παράδειγµα έχω έναν πίνακα 3 αντικειµένων της κλάσης Point.
Αρχικοποίηση και τροποποίηση των τιµών των στοιχείων ενός πίνακα. Αρχικά ένας πίνακας δηλώνεται και αν δεν δώσω αρχικές τιµές παίρνει τις default. Στη συνέχεια αν θέλω να δώσω τιµές σε κάποιο συγκεκριµένο στοιχείο τουπίνακαγράφωτοόνοµατουπίνακακαιµέσασεαγγύλεςέναν δείκτητηςθέσηςτουστοιχείουτουοποίουθέλωνααλλάξωτηντιµή (ή να δώσω αρχική τιµή). Παράδειγµα: pinakas[3] = 15; ίνω την τιµή 15 στο τέταρτο στοιχείο του πίνακα. Το στοιχείο pinakas[3] είναι το τέταρτο στοιχείο γιατί το πρώτο στοιχείο σε όλους τους πίνακες είναι το στοιχείο στη θέση 0 (για το παράδειγµα πρώτο στοιχείοείναιτο pinakas[0] ). Προσοχή το τελευταίο στοιχείο ενός πίνακα n θέσεων είναι το στοιχείο µε δείκτη n-1. Η java µας ειδοποιεί για τυχόν υπερβάσεις στον αριθµό των στοιχείων ενόςπίνακακαιεποµένωςδενείναιεύκολοναγίνεικάποιολάθος. Καλόν όµως είναι να αποφεύγεται να γίνεται υπέρβαση. Η µεταβλητή length µας δίνει το πλήθος των στοιχείων ενός πίνακα. Αν για παράδειγµα δώσω την εντολή System.out.println(pinakas.length); Θαµουδώσειστηνοθόνητοπλήθοςτωνστοιχείωντουπίνακα.
Παράδειγµα Η µεταβλητή length χρησιµοποιείται για ναδώσειστους 2 πίνακεςίδιοπλήθος στοιχείων µε τον πρώτο. Το αποτέλεσµα είναι: 4000 5500 7000 5500
Πολυδιάστατοι πίνακες Η Java δεν χειρίζεται πολυδιάστατους πίνακες αλλά µπορώ να χρησιµοποιήσω πίνακα πινάκων προκειµένου να επιτύχω την ίδια λειτουργικότητα. Παράδειγµα πολυδιάστατου πίνακα: int pinakas[ ][ ] = new int[3][8]; pinakas[2][2]=34; System.out.println(pinakas[2][2]); Παίρνω την τιµή 34. Μπορώ να χρησιµοποιήσω την µεταβλητή length για να πάρω το πλήθος των στοιχείων σε κάθε διάσταση. System.out.println(pinakas.length); System.out.println(pinakas[0].length); Καιπαίρνω 3 και 8. Το συνολικό πλήθος των στοιχείων αν θεωρήσουµε τον πίνακα σαν πολυδιάστατο είναι 3*8.
Πρόταση if Μετηνπρόταση if ελέγχωµίασυνθήκηκαιαναυτήείναιαληθής εκτελείται ένα block εντολών. Η σύνταξη της εντολής είναι if (συνθήκη) { blockεντολών Υπάρχει επίσης η δυνατότητα επιλογής if (συνθήκη) { blockεντολών 1 else { block εντολών 2 Μπορώ να µην χρησιµοποιήσω αγκύλες αν το σύνολο των εντολών στο block είναι µία. Η συνθήκη αποτιµάται σε true ή false. Η τιµή επιστροφής της συνθήκης είναι boolean και όχι ακέραιος όπως σε άλλες γλώσσες προγραµµατισµού.
Παράδειγµα Στο παραπάνω παράδειγµα χρησιµοποιείται nested if (ένθετο if). Αυτό σηµαίνει πως έχω if µέσα σε if. Το αποτέλεσµα αν ο χρήστης δώσει στο x θετικό ακέραιο µεγαλύτερο από το y θα είναι answer1 αν δώσει θετικό ακέραιο µικρότερο από το y το αποτέλεσµα θα είναι answer2 και σε όποια άλλη περίπτωση θα είναι answer3.
switch Μια εναλλακτική επιλογή για να αντικαταστήσω τα πολλά nested ifs όταν η συνθήκη εξετάζει την τιµή µιας µεταβλητής είναιηχρήσητης switch. switch (όνοµαµεταβλητής){ case τιµήµεταβλητής 1 : προτάσεις break; case τιµήµεταβλητής 2 : προτάσεις break; case τιµήµεταβλητής 3 : προτάσεις break; case τιµήµεταβλητής 4 : default: break; προτάσεις προτάσεις Ηχρήσητης default είναιπροαιρετική. ενχρειάζοµαιάγγιστραγιαναχρησιµοποιήσωπολλέςπροτάσειςσαν block προτάσεων. Είναιλιγότερογενικήηχρήσητηςαπότα nested ifs µεταοποίαµπορώναέχωπιοπολύπλοκεςσυνθήκεςαπότην εξέταση της τιµής µιας µεταβλητής. Η break πρέπει να χρησιµοποιείται µε προσοχή.
Βρόχοι Ο βρόχος for εκτελεί µία ή περισσότερες προτάσεις για ένα πλήθος επαναλήψεων, µέχρι να ικανοποιηθεί µία συνθήκη. Σύνταξη for (αρχικήτιµή; συνθήκη; βήµα) { block εντολών Παράδειγµα for (int i=0; i<5; i++) System.out.println( epanalhpsh +i); Ανηµεταβλητή i δηλωθείµέσαστο for loop τότεείναιτοπικήστο loop καιδενµπορώνατηνχρησιµοποιήσωέξωαπόαυτό. Φτιάξτεξανάτοπαράδειγµατουπέµπτου slide τηςκλάσης dollars χρησιµοποιώντας loops για να γράψετε πιό περιεκτικό κώδικα.
Βρόχος while και do... while Ο βρόχος while εκτελείται όσο ικανοποιείται µία συνθήκη. Πρέπει σε κάθε επανάληψη να διαφοροποιείται κάτι στην συνθήκη για να µην εκτελείται για πάντα ο βρόχος. Στο for loop είναι δύσκολο να ξεχάσει κάποιος το βήµα (αύξηση ή µείωση). Στο while αντίθετα είναι πιό εύκολο να γίνει λάθος. Σύνταξη while(συνθήκη){ block προτάσεων Παράδειγµα while(i<a.length){ a[i]=i; i++; Το i πρέπειναέχειτηνσωστήαρχικήτιµήπριντονβρόχο. Αν θέλω ο βρόχος να εκτελείται τουλάχιστον µία φορά ανεξάρτητα από το αν ικανοποιείται ή όχι συνθήκη χρησιµοποιώ do while. Σύνταξη do{ block προτάσεων while(συνθήκη);
break και continue Η εντολή break χρησιµοποιείται για να σταµατήσει η εκτέλεση του βρόχου έστω και αν η συνθήκη ικανοποιείται. Η εντολή continue χρησιµοποιείται για να τερµατίσει η τρέχουσα επανάληψη του βρόχου και να συνεχιστεί το πρόγραµµα µε την τρέχουσα επανάληψη. Παραδείγµατα public class breaaak { public static void main(string args[]){ int m=100; while(m<108){ m++; if (m==104) break; System.out.println(m); public class continuuue { public static void main(string args[]){ int m=100; while(m<108){ m++; if (m==104) continue; System.out.println(m); Προσοχήπουθααλλάζειτιµήη µεταβλητή που καθορίζει το βήµα τουβρόχου.
Τριαδικός τελεστής ή τελεστής εκτέλεσης υπό συνθήκη Ο τριαδικός τελεστής ελέγχει µία συνθήκη και όταν αυτή είναι αληθής εκτελείται η πρώτη πρόταση διαφορετικά η εκτελείται η δεύτερη πρόταση. Σύνταξη συνθήκη? πρόταση1 : πρόταση2; Παράδειγµα z = x>y? x : y ; Αντο x είναιµεγαλύτεροτου yηέκφρασηόληαποτιµάταισε x διαφορετικάσε y. Εποµένωςτο z ισούτεµε x γιατιµέςτου x µεγαλύτερες του y και σε y σε αντίθετη περίπτωση. Ο τριαδικός τελεστής µπορεί εύκολα να υλοποιηθεί µε if if (x>y) z=x; else z=y;