Διάλεξη 4: Προγραμματισμός σε JAVA IΙ. Διδάσκων: Παναγιώτης Ανδρέου



Σχετικά έγγραφα
Εργαστήριο 2: Πίνακες

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Προγραμματισμός Συστημάτων

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Διάλεξη 04: Παραδείγματα Ανάλυσης

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 8/4/2008. Πίνακες (Arrays)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Βασικά Στοιχεία της Java

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Διδάσκων: Παναγιώτης Ανδρέου

Μεθόδων Επίλυσης Προβλημάτων

Διδάσκων: Παναγιώτης Ανδρέου

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

Κλάσεις και Αντικείµενα

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 7: Πίνακες (Arrays)

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Σι θα δούμε σε αυτό το μάθημα;

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Βασικά Στοιχεία της Java

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

Εισαγωγή στις μεθόδους

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και αντικείμενα στην Java Strings Πίνακες

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Διάλεξη 02: Αντικειμενοστρεφής Προγραμματισμός με την JAVA. Διδάσκων: Παναγιώτης Ανδρέου

Η γλώσσα προγραμματισμού C

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Εισαγωγή στον Προγραμματισμό

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

Εισαγωγή στον Προγραμματισμό

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Αντικειµενοστρεφής Προγραµµατισµός

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Generics και ArrayLists

είκτες και Πίνακες (2)

Η γλώσσα προγραμματισμού C

Διδάσκων: Παναγιώτης Ανδρέου

Αναζήτηση και ταξινόμηση

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

Δομές Δεδομένων & Αλγόριθμοι

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος.

ΗΥ-150. Ταξινόµηση και Αναζήτηση

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Διδάσκων: Παναγιώτης Ανδρέου

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Wrapper Classes, Abstract Classes and Interfaces

Πολλές φορές έχουμε πολλές μεταβλητές του ίδιου τύπου που συσχετίζονται και θέλουμε να τις βάλουμε μαζί.

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Αντικειμενοστρεφής Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Transcript:

Διάλεξη 4: Προγραμματισμός σε JAVA IΙ Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: -Μέθοδοι - Πίνακες, Πολυδιάστατοι Πίνακες - Boxing/Unboxing - Χρήσιμες βιβλιοθήκες Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 1

Μέθοδοι (methods) Μέθοδος:μία συλλογή από ομαδοποιημένες δηλώσεις οι οποίες εκτελούν κάποια (ες) λειτουργία (ες). Η υπογραφή μίας μεθόδουαποτελείται από το όνομά τηςκαι τη λίστα με της παραμέτρους που δέχεται. Σύνταξη: modifiers return value type method name parameter list public static int max( int num1, int num2 ) { int result = num1; if ( num2 > num1 ) { result = num2; return result; method signature method body return value ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 2

Μέθοδοι (methods)(συν.) Μία μέθοδος που δεν επιστρέφει κάτι πρέπει να δηλωθεί με void για return type. Παράδειγμα: public static void main(...) Όταν μία μέθοδος επιστρέφει, πρέπει να υπάρχει δήλωση return. ΠΡΟΣΟΧΗ: όλα τα μονοπάτια πρέπει να καταλήγουν σε return αλλιώς θα υπάρχει compile error. Παράδειγμα: int max(int num1, int num2){ int result; if ( num2 > num1 ) { result = num2; else if ( num2 < num1 ) { result = num1; return result; // Αν num1 == num2??? int max(int num1, int num2){ int result; if ( num2 > num1 ) { result = num2; else { result = num1; return result; //return ( num2 > num1 )? num2 : num; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 3

Πέρασμα Παραμέτρων Πέρασμα διά τιμής:οι τιμές των μεταβλητών αντιγράφονται στις παραμέτρους της μεθόδου ==> οι αρχικές μεταβλητές δεν αλλάζουν Πέρασμα διά αναφοράς: δεν υπάρχει! Παράδειγμα public class Increment { public static void main( String[] args ) { int x = 1; System.out.println( "before the call, x is " + x); increment(x); System.out.println( "after the call, x is " + x); public static void increment( int n ) { n++; System.out.println( "n inside the method is " + n); 1. x=1 2. x=1 3. x=1copy to n 7. x=1 4. n=1 5. n=2 6. n=2 ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 4

Μεταβλητός αριθμός παραμέτρων Μπορούμε να δηλώσουμε συναρτήσεις και constructors με μεταβλητό αριθμό παραμέτρων. Μόνο η τελευταία παράμετρος μπορεί να είναι vararg. Παράδειγμα: int sum ( int... nums ) Το... σημαίνει μηδέν ή περισσότερες παράμετρους Παραδείγματα καλέσματος: sum ( 10, 20 ); sum ( 10, 20, 30, 40 ); Για να έχουμε πρόσβαση στην κάθεπαράμετρο χρησιμοποιούμε σύνταξη πίνακα ή το for-each int sum ( int... nums ) { int total = 0; for (int i=0; i<nums.length; i++) total+= nums[i]; for (int i : nums) total+= i; return total; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 5

Πίνακες Πίνακας:μία δομή δεδομένων που αντιπροσωπεύει μία συλλογή με στοιχεία του ίδιου τύπου. Οι πίνακες στην JAVA έχουν σχεδιαστεί κατά τρόπον ώστε να ξεπερνιούνται οι δυσκολίες του προγραμματισμού πινάκων της C/C++. Στη JAVA είναι εξασφαλισμένο ότι ένας πίνακας θα αρχικοποιηθεί και ότι δεν θα επισυμβεί πρόσβαση εκτός των ορίων του. Τα χαρακτηριστικά αυτά υλοποιούνται με κάποιο σχετικό κόστος μνήμης και χρόνου εκτέλεσης (κατά την εκτέλεση γίνεται έλεγχος κατά πόσο δεν γίνεται υπέρβαση των ορίων του πίνακα). Κατά τη δημιουργία ενός πίνακα, κατ ουσίανδημιουργείται ένας πίνακας χειριστηρίων (Handles), τα οποία αρχικοποιούνται σε null. Είναι ευθύνη του προγραμματιστή να αρχικοποιήσει σωστά τα χειριστήρια, ώστε να παραπέμπουν σε αντικείμενα. ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 6

Πίνακες (συν.) Σύνταξη: <τύπος δεδομένων>[ ] <όνομα πίνακα>, π.χ., double[] d; Δήλωση Πινάκων int[] x; //Δήλωση πίνακα με ακέραιους char[] a; /Δήλωση πίνακα με χαρακτήρες Αρχικοποίηση Πινάκων Η αρχικοποίηση μπορεί να γίνει με τηδήλωση new x = new int[10]; // Δημιουργία 10 θέσεων ή μπορεί να γίνει με την αυτόματη ανάθεση στοιχείων x = {1, 2, 3, 4, 5; μόνο κατά την δήλωση! Δήλωση και Αρχικοποίηση σε ένα Βήμα int[] x= new int[10]; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 7

Πίνακες (συν.) Παράδειγμα αναπαράστασης πίνακα: int[] x = new int[5]; x Μεταβλητή αναφοράς αναφορά µνήµης στοιχείο στη θέση 2 x[0] x[1] x[2] x[3] x[4] 1 5 2 13 8 τιµή πεδίου Πρόσβαση σε κάθε στοιχείο του πίνακα με το ευρετήριο του. π.χ., το στοιχείο στη θέση 2 = x[2]. Ιδιότητα (property) <length>: Επιστρέφει το μέγεθος του πίνακα. π.χ., x.length= 5 ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 8

Παραδείγματα χρήσης πίνακα Τύπωμα των στοιχείων ενός πίνακα int[] x = new int[5];... for(int i=0; i<x.length; i++) { System.out.println( x[i] ); Πρόσθεση των στοιχείων ενός πίνακα int[] x = new int[5]; int sum=0;... for(int i=0; i<x.length; i++) { sum = sum + x[i]; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 9

Πίνακες και for-each Η Java1.5 εισήγαγε μία καινούρια δήλωση βρόγχου το οποίο επιτρέπει τη διάσχιση ενός πίνακα χωρίς τη χρήση δείκτη. Σύνταξη: for(<τύπος δεδομένων> <μεταβλητή> : <πίνακας){... Παράδειγμα: int[] x = new int[5];... for(int i=0; i<x.length; i++) { System.out.println( x[i] ); int[] x = new int[5];... for(int i: x) { System.out.println( i ); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 10

Αντιγραφή Πινάκων Υπάρχουν διάφοροι τρόποι αντιγραφής ενός πίνακα: Αντιγραφή αναφοράς:η μεταβλητή που αντιστοιχεί στον δεύτερο πίνακα δείχνει στην διεύθυνση του πρώτου. Παράδειγμα: int[] x = new int[3]; int[] y = new int[3]; y = x; Ερώτηση: Τι γίνεται με τα στοιχεία του δεύτερου πίνακα; Απάντηση: Σκουπίδια! ΠΡΙΝ x??? y??? ΜΕΤΑ x??? y??? Αντιγραφή με την μέθοδο System.arraycopy( <source table>, <source start index>, <dest table>, <dest start index>, <dest end index>) Παράδειγμα: System.arraycopy(x, 0, y, 0, 3); Αντιγραφή με την μέθοδο clone()(ισχύει μόνο για primitive types) Παράδειγμα: int[] y = x.clone(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 11

Πίνακες: Χρήσιμες Πληροφορίες Πέρασμα πινάκων σαν παραμέτρους σε μεθόδους JAVA: Πέρασμα διά τιμής! Αντιγράφεται η διεύθυνση του πίνακα στην τοπική μεταβλητή. ΠΡΟΣΟΧΗ: Τα στοιχεία του πίνακα μπορούν να αλλαχθούν! void printarray( int[] array ) { for(int i=0; i<array.length; i++) { System.out.println( array[i] ); Ταξινόμηση πίνακα: java.util.arrays.sort(x); Δυαδική Αναζήτηση σε πίνακα: java.util.arrays.binarysearch(x, 5); Τύπωμα στοιχείωνπίνακα: java.util.arrays.tostring(x ); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 12

Πολυδιάστατοι πίνακες Σύνταξη: <τύπος δεδομένων>[ ][ ]... <όνομα πίνακα>, π.χ., int[][] x Δήλωση Πινάκων int[][] x; //Δήλωση πίνακα 2D με ακέραιους char[][][] a; //Δήλωση πίνακα 3D με χαρακτήρες Αρχικοποίηση Πινάκων Η αρχικοποίηση μπορεί να γίνει με τηδήλωση new x = new int[2][3]; //Δημιουργία πίνακα με 2 γραμμές και 3 στήλες ή μπορεί να γίνει με την αυτόματη ανάθεση στοιχείων x = { {1, 2, 3, {4, 5, 6 ; μόνο κατά την δήλωση! Δήλωση και Αρχικοποίηση σε ένα Βήμα int[][] x= new int[2][3]; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 13

Πολυδιάστατοι πίνακες (συν.) Ερώτηση: Τι επιστρέφει η length σε ένα πολυδιάστατο πίνακα; Απάντηση: Τον αριθμό των γραμμών Παράδειγμα: int[][] x= new int[2][3]; x.length=2 Με την length, μπορούμε να πάρουμε τον αριθμό τον στοιχείων της κάθε γραμμής. Παράδειγμα x[0].length=3, x[1].length=3 Ερώτηση:Μπορούμε να έχουμε πίνακες με γραμμές διαφόρων μεγεθών; Απάντηση: NAI! Ragged Arrays Παράδειγμα: int[][] x = { {1, {2, 3, {4, 5, 6 ; System.out.println( x.length); = 3 System.out.println( x[0].length); = 1 System.out.println( x[1].length); = 2 System.out.println( x[2].length); = 3 ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 14

Παραδείγματα: BinarySearch BinarySearch: ο αλγόριθμος αυτός βρίσκει ένα στοιχείο σε μία ταξινομημένη λίστα ψάχνωνταςκάθε φορά στη μέση του πίνακα. Αν το στοιχείο είναι μεγαλύτερο τότε ο πίνακας μοιράζεται στη μέση και χρησιμοποιείται μόνο το δεξί κομμάτι στο επόμενο βήμα. 0 1 2 3 4 5 Κλειδί=8 1 2 3 4 5 6 6 7 8 7 8 9 Κλειδί=8 0 1 2 3 4 5 1 2 3 4 5 6 6 7 8 7 8 9 Κλειδί=8 0 1 2 3 4 5 1 2 3 4 5 6 6 7 8 7 8 9 ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 15

Παραδείγματα: BinarySearch(συν.) int[] x = {1, 2, 3, 4, 5, 6, 7, 8, 9; int key = 8; int low=0; int high = x.length - 1; int mid; while( high >= low){ mid = (low + high) / 2; if( key < x[mid]) high = mid-1; else if (key > x[mid]) low = mid+1; else { System.out.println(mid); break; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 16

Παραδείγματα: SelectionSort SelectionSort: ο αλγόριθμος αυτός ταξινομεί μία λίστα με στοιχεία. Σε κάθε βήμα iβρίσκει το τοi-οστό πιο μικρό στοιχείο και το τοποθετεί στην θέση i. Παράδειγμα: intx = {4, 8, 2, 1, 3, 5; swap Βήμα 1 Βήμα 2 Βήμα 3 Βήμα 4 Βήμα 5 Βήμα 6 0 1 2 3 4 5 4 8 2 1 3 5 1 8 2 4 3 5 1 2 8 4 3 5 1 2 3 4 8 5 1 2 3 4 8 5 1 2 3 4 5 8 int[] x = {4, 8, 2, 1, 3, 5; int min_index; int tmp; for(int i=0; i<x.length; i++){ min_index = i; for(int j=i+1; j<x.length; j++){ if(x[j]<x[min_index]) min_index=j; tmp = x[i]; x[i] = x[min_index]; x[min_index]=tmp; ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 17

Συλλογές (collections) Οι συλλογές (collections)είναι δομές παρόμοιες με πίνακες (arrays) τις εξής διαφορές: Το μέγεθος του μεταβάλλεται δυναμικά Οποιοδήποτε είδος αντικειμένου μπορεί να εισαχθεί σε μία συλλογή ΔΕΝ υποστηρίζουν εισαγωγή αρχέγονων τύπων (π.χ., int). Παραδείγματα συλλογών: Vector, BitSet, HashTable, Stack ArrayList: πολυχρησιμοποιημένη δομή (παρόμοια με Vector) Δεν είναι συγχρονισμένη, αντίθετα με vector Όταν αυξάνει δυναμικά το μέγεθος κατά το μισό του υπάρχον μέγεθος (ο vector αυξάνει κατά το διπλάσιο) Είναι πιο γρήγορη λόγω του ότι δεν είναι συγχρονισμένη ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 18

Boxing Οι συλλογές ΔΕΝ δέχονται πρωτόγονους τύπους αλλά μόνο δείκτες σε αντικείμενα (reference types). Ερώτηση: Τι γίνεται όταν χρειαζόμαστε πρωτόγονους τύπους; Απάντηση: Boxing Ορισμοί: Box Ένα στιγμιότυπο μίας κλάσης περιτυλίγματος (wrapper) η οποία αποθηκεύει την τιμή ενός πρωτόγονου τύπου. Boxing Δημιουργία ενός box για μία τιμή πρωτόγονος τύπου Unboxing Επιστροφή της τιμής πρωτόγονου τύπου από το box ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 19

Manual/Auto boxing and unboxing Οι αρχέγονοι τύποι δεν µπορούν να χρησιµοποιηθούν στις περισσότερες περιπτώσεις -you need a wrapper myvector.add(new Integer(5)); Αντίστοιχα δεν επιτρέπεται να χρησιµοποιηθεί ένα αντικείµενο εκεί που χρειάζεται αρχέγονος τύπος. --you need to unwrap it int n = ((Integer)myVector.lastElement()).intValue(); Integer inumber = new Integer(10); Integer inumber= 10; inumber= new Integer( inumber.intvalue()++ ); inumber++; Manual boxing Auto-boxing Manual unboxing Auto-unboxing ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 20

Χρήσιμες Βιβλιοθήκες(java.lang.Math) Σταθερές Κλάσης: PI: το π = 3.1415... E: το e = 2.718... Μέθοδοι Κλάσης: Trigonometric Methods: π.χ., sin(double a), cos(double a) Exponent Methods:π.χ., log10(double a), pow(double a, double b), sqrt(double a) Rounding Methods:π.χ., double ceil(double x), double floor(double x) Other methods: min, max, abs, and random Παραδείγματα: Math.sin(Math.PI / 2) = 1.0 Math.cos(0) = 1.0 Math.exp(1) = 2.71 Math.log(2.71) = 1.0 Math.pow(2, 3) = 8.0 Math.ceil(2.1) = 3.0 Math.floor(2.1) = 2.0 Math.ceil(-2.1) = -2.0 Math.max(2, 3) = 3 Math.min(2.5, 3.6) = 2.5 Math.abs(-2) = 2 0 <= Math.random() < 1.0 (int)(math.random() * 10) = [0..9] ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 21

Χρήσιμες Βιβλιοθήκες(java.io) Διαχείριση Αρχείων Create/Open/Delete: π.χ., new File(<path>), delete() Έλεγχοι: π.χ., exists(), canread(), isdirectory(), ishidden() Ιδιότητες: π.χ., getname(), getabsolutepath(), getparent(), length() Διαχείριση Φακέλων: το ίδιο με Διαχείριση Αρχείων Διάβασμα/Εγγραφή σε αρχεία Παραδείγματα: //Δημιουργία αρχείου File f = new File("myfile.txt"); if(!f.exists()) f.createnewfile(); //Εύρεση του μεγέθους αρχείου File file = new File("C:/java.txt"); long filesize = file.length(); //Διάβασμα αρχείου FileInputStream fstream = new FileInputStream(" myfile.txt"); DataInputStream in = new DataInputStream(fstream); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String strline; while ((strline = br.readline())!= null) { System.out.println (strline); in.close(); ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 22

Άλλες Χρήσιμες Βιβλιοθήκες java.lang.object: Ο παππούς όλων των κλάσεων! java.lang.string: Δημιουργία και διαχείριση strings java.util.date: Δημιουργία και διαχείριση πεδίων τύπου ημερομηνία και ώρα java.util.arraylist: Δημιουργία και διαχείριση λιστών διαφόρων τύπων java.net: Δημιουργία δικτυακών εφαρμογών java.lang.thread: Δημιουργία πολυνηματικών εφαρμογών java.sql: Σύνδεση με βάση δεδομένων και εκτέλεση επερωτήσεων ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός 23