Προγραµµατισµός JAVA ρ Γεώργιος Μαυροµµάτης Πειραιάς 2004
Αλγόριθµος Ένας Αλγόριθµος είναι µία καλά ορισµένη υπολογιστική διαδικασία που δέχεται κάποιες τιµές σαν είσοδο και παράγει κάποιες τιµές σαν έξοδο. Είναι δηλαδή µία σειρά από υπολογιστικά βήµατα που µετατρέπει την είσοδο (input) σε έξοδο (output), ή διαφορετικά, ένα εργαλείο που λύνει ένα καλά ορισµένο υπολογιστικό πρόβληµα Data Encryption Standard (DES) - 1974
Αλγόριθµος ΙΙ Ένας Αλγόριθµος λέγεται ότι επιλύει ένα Πρόβληµα όταν µπορεί να εφαρµοστεί σε κάθε στιγµιότυπο του Προβλήµατος και είναι εξασφαλισµένο ότι θα δόσει λύση για κάθε τέτοιο στιγµιότυπο.
Ο Υπολογιστής
Η µνήµη RAM Μπορούµε να την φανταστούµε σαν µικρές κυψελίδες που κρατάνε είτε ένα 0 µηδέν ή ένα 1 ένα. Συνεχόµενα 0 και 1 στη µνήµη παριστάνουν χαρακτήρες, σύµβολα, εντολές κλπ. Το Λεξικό του Ψηφιακού Υπολογιστή αποτελείται από ακολουθίες από 0 και 1.
Προγράµµατα Ένα πρόγραµµα είναι ένας αλγόριθµος που έχει κωδικοποιηθεί στη γλώσσα του υπολογιστή, σε ακολουθίες δηλαδή από 0-1, που έχουν ειδικό νόηµα για τη µηχανή. Για να εκτελεστεί ένα πρόγραµµα φορτώνεται στη RAM. Mark I 21/6/48 Μία-µία οι εντολές πάνε από τη RAM στoν επεξεργαστή και εκτελούνται
Γλώσσες Προγραµµατισµού Για να µην µιλάµε στον Υπολογιστή σε 0-1! Πρόκειται για κώδικα (εντολές) σε απλή αγγλική γλώσσα. Ένα ειδικό πρόγραµµα, ο µεταγλωττιστής (compiler) µετατρέπει τον κώδικα σε γλώσσα µηχανής
ιαδικασία µεταγλώττισης Μια σειρά από βήµατα µε τα οποία ο Πηγαίος Κώδικας µετατρέπεται σε Εκτελέσιµο Κώδικα. Από τη Γλώσσα Προγραµµατισµού στη Γλώσσα Μηχανής. Στο Σχήµα βλέπουµε την τυπική διαδικασία µεταγλώττισης της C++
Εκτέλεση Όπως έχουµε ήδη δει, ο κώδικας από τη RAM µεταφέρεται εντολή-εντολή στη CPU και εκτελείται RAM BITS CPU
Ποιός κάνει την µεταφορά; Το λειτουργικό σύστηµα είναι το λογισµικό που ελέγχει και διαχειρίζεται το υλικό του υπολογιστή. ηµιουργεί ένα περιβάλλον όπου τρέχουν οι άλλες εφαρµογές. Φέρνει σε επαφή τον χρήστη µε τη µηχανή. Είναι στενά συνδεδεµένο µε την αρχιτεκτονική της κάθε µηχανής
Ποιές Γλώσσες Προγραµµατισµού; Basic Fortran COBOL Visual Basic C/C++/Visual C++ Pascal/Delphi Grace Murray Hopper 1907-1992
Java Ξεκινά το 1991 στην Sun µε πρώτο όνοµα Oak. Στόχος η δηµιουργία γλώσσας ανεξάρτητης του λειτουργικού συστήµατος Επίσηµη εµφάνιση το 1995. Πρώτος compiler γραµµένος σε C.
Java Compiler Το πρόγραµµα γράφεται σε Java. O compiler το µετατρέπει σε bytecode, µια ενδιάµεση, µη εκτελέσιµη µορφή. Το πρόγραµµα σε µορφή bytecode περνά από την Εικονική Μηχανή της Java και µετατρέπεται σε εκτελέσιµο.
Εικονική Μηχανή Java Κάθε αρχιτεκτονική υπολογιστή έχει τη δική της Εικονική Μηχανή. Η Εικονική Μηχανή πρέπει να είναι εγκατεστηµένη στο Μηχάνηµά µας πριν τρέξουµε πρόγραµµα Java. Υπάρχουν Εικονικές Μηχανές για Windows, Linux, Macintosh, Playstation, Κινητά τηλέφωνα κλπ.
Εικονική Μηχανή Java II Λειτουργικό Εκτελέσιµο Πρόγραµµα Εικονική Λειτουργικό Πρόγραµµα Java (Bytecode) Υλικό Υλικό Σύστηµα Σύστηµα Μηχανή
Τα πλεονεκτήµατα της Java απλή αντικειµενοστρεφής κατανεµηµένη ανεξάρτητη από πλατφόρµα παρέχει ασφάλεια αξιόπιστη πολυµεσική διαδικτυακή δυναµική
εν έχει µειονεκτήµατα; Αργή Η ταχύτητα βελτιώνεται ωστόσο µε διάφορες τεχνικές όπως οι Just-intime (JIT) Compilers. εν υποστηρίζεται το ίδιο ισχυρά από όλους τους µεγάλους (π.χ. Microsoft)
Να δούµε ένα πρόγραµµα Java; class protoprograma { public static void main(string [ ] args) { System.out.println("Hello World!"); } }
Αντικείµενα Αποτελούν τον πυρήνα του Αντικειµενοστρεφούς προγραµµατισµού. Η ιδέα έρχεται από το περιβάλλον µας: αντικείµενα είναι το αυτοκίνητο, η τηλεόραση, το ποδήλατο, ο µαθητής. Τα αντικείµενα έχουν δυο βασικά χαρακτηριστικά: κατάσταση & συµπεριφορά
Αντικείµενα ΙΙ Αντικείµενο ΤΗΛΕΟΡΑΣΗ Κατάσταση: Ανοιχτή/κλειστή, κανάλι συντονισµού, ίντσες οθόνης, ισχύς που καταναλώνει, ένταση ήχου κλπ (ΠΕ ΙΑ) Συµπεριφορά: Αλλαγή καναλιού, άνοιγµα/κλείσιµο, αλλαγή έντασης ήχου κλπ. (ΜΕΘΟ ΟΙ)
Κλάσεις Το ΑΥΤΟΚΙΝΗΤΟ είναι η αφηρηµένη έννοια. Στον κόσµο υπάρχουν πολλά αυτοκίνητα, άρα πολλές εκδόσεις του αντικειµένου ΑΥΤΟΚΙΝΗΤΟ. Τις ονοµάζουµε Στιγµιότυπα της Κλάσης αντικειµένων ΑΥΤΟΚΙΝΗΤΟ.
Κλάσεις και Στιγµιότυπα Η Κλάση είναι το πρότυπο, το σχέδιο, η αφηρηµένη περιγραφή του αντικειµένου. Τα Στιγµιότυπα έχουν τα κοινά χαρακτηριστικά και συµπεριφορές της Κλάσης, αλλά µπορούν να έχουν και διαφορές ως προς τις τιµές των χαρακτηριστικών τους.
Κληρονοµικότητα Ο αντικειµενοστρεφής προγραµµατισµός επιτρέπει σε µια κλάση να παίρνει τα χαρακτηριστικά µιάς άλλης. Η νέα κλάση µπορεί ωστόσο να έχει και πρόσθετα χαρακτηριστικά που την διαφοροποιούν από την αρχική. Με τον τρόπο αυτό δηµιουργούνται Κλάσεις και Υποκλάσεις. Παράδειγµα: η Κλάση ΑΥΤΟΚΙΝΗΤΟ έχει υποκλάσεις τις ΤΑΞΙ, ΦΟΡΤΗΓΟ, ΙΧ κλπ
Λογισµικά Αντικείµενα Παριστάνουν οντότητες από τον πραγµατικό κόσµο. Έχουν Κατάσταση που περιγράφεται σε Πεδία ή Μεταβλητές. Έχουν Συµπεριφορά που περιγράφεται µε Μεθόδους ή Συναρτήσεις.
Η κλάση ΗΜΟΣΙΟΣ ΥΠΑΛΛΗΛΟΣ Πεδία: επίπεδο σπουδών, έτη υπηρεσίας, αριθµός τέκνων, υπηρεσία που εργάζεται κλπ. Μέθοδοι: Υπολογισµός µισθοδοσίας, Μεταβολή οικογενειακής κατάστασης, µετάθεση κλπ Υποκλάσεις: Αξιωµατικός Ε.., άσκαλος κλπ
Ένα πρόγραµµα Java (Ξανά!) class example { public static void main(string [ ] args) { System.out.println("Hello World!"); } }
Τα βασικά συστατικά Τουλάχιστον µία Κλάση class <όνοµα_κλάσης> {... εδώ το πρόγραµµα... } Τουλάχιστον µία Μέθοδος πάντα µε όνοµα Main public static void main(string[ ] args) {... εντολές... } */ ό,τι βάζουµε ανάµεσα είναι σχόλια που αγνοούνται στη µεταγλώττιση */ class example { // και αυτό είναι σχόλιο, σε µία µόνο γραµµή public static void main(string [ ] args){ System.out.println("Το τρέξιµο ξεκινά από τη main! "); } }
Μεταβλητές Είναι οι θέσεις µνήµης όπου κρατάµε τιµές και δεδοµένα. Κάθε τύπος πιάνει συγκεκριµένο χώρο στη µνήµη (bytes). Ανάλογα µε το ΤΙ δεδοµένο θέλουµε να αποθηκεύσουµε, δηλώνουµε τον κατάλληλο ΤΥΠΟ µεταβλητής. Τρόπος δήλωσης: <τύπος µεταβλητής> <όνοµα µεταβλητής>;
Κατηγορίες µεταβλητών Instance Variables (Μη-στατικά πεδία) Είναι ορατές µέσα σε ολόκληρη την κλάση. Oι τιµές που παίρνουν είναι ανεξάρτητες για κάθε στιγµιότυπο κλάσης. Π.χ. η Ταχύτητα είναι διαφορετική για κάθε αυτοκίνητο, άρα κρατείται σε διαφορετικές θέσεις µνήµης για κάθε στιγµιότυπο της κλάσης Αυτοκίνητο.
Κατηγορίες µεταβλητών Class Variables (Στατικά πεδία) Παίρνουν την ίδια τιµή σε κάθε στιγµιότυπο, πρόκειται για την ίδια θέση µνήµης σε όλα τα στιγµιότυπα. Π.χ. το Αριθµός_Ταχυτήτων είναι σταθερό για όλα τα αυτοκίνητα. ηλώνεται µε τη λέξη static, π.χ. static int fpa=19; shape APPLE Οι σταθερές (που δεν µπορούν να αλλάξουν κατά την εκτέλεση) δηλώνονται ως static final.
Κατηγορίες µεταβλητών Local Variables (Τοπικές µεταβλητές) Οι µέθοδοι (διαδικασίες) κρατάνε τα προσωρινά δεδοµένα σε τοπικές µεταβλητές, µε ανάλογο τρόπο όπως µε τα µηστατικά πεδία. Οι τοπικές µεταβλητές είναι ορατές µόνο µέσα στη µέθοδο που δηλώνονται.
Κατηγορίες µεταβλητών Parameters (Παράµετροι) Είναι οι µεταβλητές που χρησιµοποιούνται στον ορισµό των µεθόδων. Μπαίνουν σε παρένθεση µετά το όνοµα της µεθόδου.
Βασικοί τύποι µεταβλητών byte (8 bit) 128 έως 127 byte b = 100; Ακέραιοι short int (16 bit) -32768 έως 32767 (32 bit) -2.147.483.648 έως 2.147.483.647 short s; short dd = 10000; int x, test; int a; long (64 bit) long akeraios, alpha; float (32 bit) float x; float a = 123.4 εκαδικοί double (64 bit) double ww =123.4; double big = 1.234e2;
Βασικοί τύποι µεταβλητών boolean char String true ή false (16 bit) 1 χαρακτήρας Αλφαριθµητικό (σειρά χαρακτήρων) bool finish; bool adras = true; char letter = C ; char greekletter = γ ; String onoma = George ;
Τελεστές Οι αριθµητικοί τελεστές κάνουν πράξεις πάνω σε µεταβλητές και ανάµεσα σε µεταβλητές. Πρόσθεση (+), Αφαίρεση (-), Πολλαπλασιασµός (*), Πηλίκον ιαίρεσης (/), Υπόλοιπο Ακέραιης ιαίρεσης (%). Αύξηση κατά 1: ++ (π.χ. x++) Μείωση κατά 1: -- Ο τελεστής πρόσθεσης συνεννώνει και αλφαριθµητικά: String x = aa ; String y = bb ; System.out.println (x+ +y); //θα τυπώσει aa bb
Τελεστές Οι Λογικοί τελεστές κάνουν σύγκριση ανάµεσα σε µεταβλητές ή/και σταθερές: Έλεγχος Ισότητας (==) ιάφορο (!=) Μεγαλύτερο (>), µικρότερο (<) Μεγαλύτερο ή ίσο (>=) Μικρότερο ή ίσο (<=) Σύνδεση δυο λογικών προτάσεων: Λογικό ΚΑΙ (&&), Λογικό Ή ( ). Ο τελεστής ανάθεσης (=): x = 3; //κάνει το x νάχει την τιµή 3. y = x; //και το y γίνεται όσο το x, δηλ. 3.
Ένα Πρόγραµµα class operatortest { public static void main (String[ ] args) { int num = 11; int a,b,c,d; a = num + 1; System.out.println(a); b = num 8; System.out.println(b); c = num * 2; System.out.println(c); num = num / 2; System.out.println(num); d = num % 4; System.out.println(d); a+= 3; c-= 2; System.out.println( a= +a+ c= +c); num++;d--; System.out.println( num= +num+ d= +d);} }
Η διαδικασία µεταγλώττισης Γράφουµε το πρόγραµµα σε έναν απλό κειµενογράφο όπως το Notepad. To αποθηκεύµε µε επέκταση.java Τρέχουµε τον compiler: javac example.java
Μεταγλώττιση & Τρέξιµο Αν δεν έχει λάθη, δηµιουργεί τον bytecode µε όνοµα example.class Τρέχουµε το πρόγραµµα µε java example.class Όλα γίνονται σε παράθυρο εντολών.
Ολοκληρωµένα περιβάλλοντα Υπάρχουν προγράµµατα που ενσωµατώνουν όλες τις λειτουργίες, επεξεργασίας κειµένου, µεταγλώττισης, εκτέλεσης. Eclipse (http://www.eclipse.org) JCreator (http://www.jcreator.com) Sun Java Studio Creator (http://developers.sun.com/prodtech/javatools/jscreator/index.jsp)
Η εντολή if then - else Γενική σύνταξη if (λογική_συνθήκη) { εντολές που εκτελούνται αν λογική_συνθήκη == true } else { εντολές που εκτελούνται αν λογική_συνθήκη == false }
if then else: : παράδειγµα if (x == 10) System.out.println( άριστα ); if (temp > 40) { kairos = καύσωνας ; aircondition = ON ; } else kairos = ανεκτός ;
Η εντολή switch: : παράδειγµα class operatortest { public static void main (String[ ] args) { int day = 3; String imera; switch (day) { case 1: imera ="Sunday";break; case 2: imera= "Monday";break; case 3: imera="tuesday";break; case 4: imera="wednesday";break; case 5: imera="thursday";break; case 6: imera="friday";break; case 7: imera="saturday";break; default: imera="wrong day number!";break; } System.out.println(imera); } }
Η εντολές while και do - while Γενική σύνταξη while while (λογική_συνθήκη) { εντολή 1;εντολή 2;...εντολή n; } Γενική σύνταξη do-while do { εντολή 1;εντολή 2;...εντολή n; } while (λογική_συνθήκη); Εκτελούνται επαναλήψεις όσο λογική_συνθήκη == true H do-while κάνει τουλάχιστον µια επανάληψη
while και do while: παράδειγµα int i = 1; while (i < 5) { System.out.println (" i ="+ i); i++; } int i = 1; do { System.out.println (" i ="+ i); i++; } while (i < 5);
Η εντολή for Γενική σύνταξη for (αρχή; συνθήκη_τέλους; βήµα) { εντολή 1;εντολή 2;...εντολή n; } αρχή: εκτελείται µια φορά στην εκκίνηση συνθήκη_τέλους: µόλις γίνει false, τερµατίζεται το for βήµα: ενεργοποιείται κάθε φορά που τελειώνει µια επανάληψη
for - παράδειγµα for (int i=1; i<6; i++) System.out.println( Τιµή i: + i); public class DekaParagontiko { public static void main(string[] args) { int factorial = 1; for (int count=1; count < 11; count++) { factorial *= count; System.out.println(count+! = +factorial); } } }
Κλάσεις: παράδειγµα Θα δηµιουργήσουµε µια κλάση-μετρητή που θα µετρά σειριακά από το 0 µέχρι κάποιο µέγιστο αριθµό LAST. Μπορεί να χρησιµοποιηθεί σαν χρονόµετρο αν µετρά από 0 µέχρι 59 (sec), ή σαν χιλιοµετρητής σε αυτοκίνητο αν µετρά π.χ. στο διάστηµα 0.. 500000 (χιλιόµετρα). Όταν φθάνει στο LAST, θα ξεκινά πάλι από το µηδέν.
Κλάση Metritis class metritis { int timi; // µη-στατικό πεδίο, 0..59 static int LAST = 60; // στατικό πεδίο // ακολουθούν οι 3 µέθοδοι void midenismos() { timi = 0; } // µηδενίζει κοντέρ int endeiksi() { return timi; } // επιστρέφει ένδειξη void metrima() // αυξάνει +1, αν φτάσει LAST, γυρίζει στο µηδέν { timi = (timi + 1) % LAST; } }
Χρησιµοποιώντας την κλάση metritis class usemetritis { m1 public static void main (String [ ] args) { metritis m1 = new metritis(); // στιγµιότυπο 1 metritis m2 = new metritis(); // στιγµιότυπο 2 m2 } m1.metrima();m2.metrima();m2.metrima(); System.out.println( Ρολόϊ 1: + m1.endeiksi() ); System.out.println( Ρολόϊ 2: + m2.endeiksi() ); m1.midenismos(); System.out.println( Ρολόϊ 1: + m1.endeiksi() );
Τροποποιητές Πρόσβασης Ρυθµίζουν τα δικαιώµατα πρόσβασης και επίδρασης πάνω σε αντικείµενα (κλάσεις, πεδία, µέθοδοι). Πεδία: -- public: το πεδίο είναι προσβάσιµο από άλλες κλάσεις. -- private: το πεδίο είναι προσβάσιµο µόνο µέσα στην κλάση που ανήκει. Μέθοδοι: -- public: µπορεί να χρησιµοποιηθεί από οπουδήποτε -- private: µπορεί να χρησιµοποιηθεί µόνο µέσα στην κλάση που ανήκει. Συνήθως λέγονται Βοηθητικές Μέθοδοι.
Τροποποιητές πρόσβασης ΙΙ Κλάσεις: επιτρέπεται µόνο µία public σε κάθε αρχείο. Η λέξη public µπορεί και να παραλείπεται. Μπορούµε να έχουµε private κλάση µόνο όταν περιέχεται πλήρως σε µιά άλλη. Πεδία: σπάνια δηλώνουµε public µεταβλητές. Μέθοδοι: δηλώνουµε public µόνον αυτές που θέλουµε να µπορούν να τις χρησιµοποιούν οι εξωτερικοί της κλάσης. Η συνήθης πρακτική σε µία Κλάση: πεδία private και public µέθοδοι επιδρούν επάνω τους.
Μέθοδοι
Μέθοδοι static και instance. η main() δηλώνεται πάντα static. Ακόµα, static δηλώνουµε τις µεθόδους που δεν χρησιµοποιούν µη-στατικά πεδία (Instance Variables). Η επικοινωνία των static µεθόδων γίνεται µέσω των παραµέτρων, π.χ η doubleme. H εξ ορισµού κατάσταση για τις µεθόδους είναι instance Οι µέθοδοι της κλάσης metritis είναι instance: χρησιµοποιούν το πεδίο timi για τους υπολογισµούς τους.
Επιστροφή τιµών από Μέθοδο public static int doubleme (double x) { return (int) (2 * x); } class metritis { int timi; int endeiksi() { return timi; } } Αν η Μέθοδος δεν επιστρέφει τιµή, δηλώνεται void
Επιστροφή τιµών από Μέθοδο class usemetritis { public static void main (String [ ] args) { int xronos; metritis m1 = new metritis(); m1.metrima(); xronos = m1.endeiksi(); System.out.println( Ρολόϊ: + xronos ); } } class metritis { int timi; static int LAST = 60; void midenismos() { timi = 0; } int endeiksi() { return timi; } void metrima() { timi = (timi + 1) % LAST; } }
Ορίσµατα (Arguments) Πρόκειται για τις µεταβλητές που χρησιµοποιούνται για να µεταδώσουµε τιµές σε µία Μέθοδο, όταν την καλούµε. class boat { private int speed; public void setspeed (int newspeed) { speed = newspeed; } public void doublespeed() { speed = 2*speed; } }
Κατασκευαστές (Constructors)( Είναι µέθοδοι που ενεργοποιούνται και αρχικοποιούν τα αντικείµενα, όταν τα δηµιουργούµε. Έχουν ίδιο όνοµα µε αυτό της κλάσης που τους περιέχουν. Μια κλάση µπορεί να έχει περισσότερους από έναν Κατασκευαστές που, επειδή έχουν το ίδιο όνοµα, ξεχωρίζουν µεταξύ τους από τα ορίσµατα.
Constructors class bus { private int epivates; public bus (int EpivatesAfetiria) { epivates = EpivatesAfetiria; } public bus() { epivates = 0; } public int getepivates() { return epivates; } } Παράδειγµα κώδικα που χρησιµοποιεί την κλάση bus: bus Line122 = new bus (11);// Αντικείµενο-λεωφορείο-11 επιβάτες. bus Line432 = new bus();// Αντικείµενο-λεωφορείο-άδειο System.out.println(Line122.getEpivates()); // εµφανίζει 11 System.out.println(Line432.getEpivates()); // εµφανίζει 0
Είσοδος από πληκτρολόγιο import java.io.*; public class InputExample { public static void main(string[ ] argv) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); String temp; // Εδώ µπαίνει κανονικά ο κώδικας } } Όποτε θέλουµε keyboard entry γράφουµε temp = br.readline(); Ενδέχεται να χρειαζόµαστε και τις συναρτήσεις µετατροπής από String σε άλλο τύπο µεταβλητής, π.χ. σε float: y = Float.parseFloat(temp);
Πίνακες 0 1 2 3 4 5 6 7 8 9 aa ss dd Το 9 ο στοιχείο του πίνακα ιαδοχικές θέσεις στη µνήµη του υπολογιστή, όλες ίδιου τύπου Αναφορά (ονοµασία) µε όνοµα και δείκτη, π.χ. data[i] Πρώτο στοιχείο πάντα δείκτης το µηδέν data[3] = = aa, είναι το 4ο στοιχείο του πίνακα Είναι πίνακας µιάς διάστασης (µονοδιάστατος)
Στην JAVA ένας πίνακας... δηλώνεται σε δύο βήµατα 1 Όνοµα και τύπος, π.χ. int[ ] data; (ακέραιοι) 2 Αρχικοποίηση και µέγεθος, π.χ. data = new int[10]; (δείκτες 0..9) που µπορούν να γίνουν ένα int [ ] data = new int[10];
Στην JAVA ένας πίνακας... µπορεί να πάρει αρχικές τιµές Int[ ] data = {100, 200, 300, 400}; Τα δύο βήµατα γίνονται ένα: Τύπος int Όνοµα data Μέγεθος 4 Εφόσον παίρνει τιµές, έχει γίνει και η δηµιουργία data[0]==100,data[1]==200,data[2]==300,data[3]==400
Στην JAVA ένας πίνακας... µπορεί να έχει περισσότερες διαστάσεις 0 1 2 0 1 2 3 Πίνακας δύο διαστάσεων 3 Χ 4 Στοιχείο data[2][1] Int [ ] [ ] data = new int [3][4];
Παράδειγµα χρήση πινάκων public class array1 { public static void main(string[] args) { int[] anarray; } } anarray = new int[10]; for (int i = 0; i < anarray.length; i++) { anarray[i] = i; System.out.print(anArray[i] + " "); } System.out.println(); Εµφανίζει αποτέλεσµα 0 1 2 3 4 5 6 7 8 9
Ένα ακόµα παράδειγµα... public class array2 { public static void main(string[] args) { int[] pinakas = {12,17,22,45,65,76,23}; int suma = 0; float mesos; for (int i = 0; i < pinakas.length; i++) suma = suma + pinakas[i]; mesos = (float) suma / (float) pinakas.length; System.out.println( Μέσος Όρος= "+ mesos); } } Εµφανίζει αποτέλεσµα Μέσος Όρος= 37.142857