ΠΠΜ 500: Προχωρημένη Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής. 9. Πίνακες (Arrays) Χειμερινό εξάμηνο 2012

Σχετικά έγγραφα
Πίνακες στη Java. Αντικειμενοστρεφής Προγραμματισμός 4/4/2016. Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια.

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

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

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού

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

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

8. Μέθοδοι (Methods)

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

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

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

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

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

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

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

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

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

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

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

4. Εισαγωγή στη Java

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

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

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

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

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

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

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

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

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

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

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

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

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Είσοδος και Έξοδος. (Input and Output) Διαφάνειες από τους Robert Sedgewick και Kevin Wayne. Τι θα δούµε σήµερα

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

Παράδειγµα χρήσης πίνακα

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

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

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

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

Συναρτήσεις στη C++ Οι µεταβλητές χαρακτηρίζονται από διάφορες ιδιότητες. Για ποιο διάστηµα η µεταβλητή υπάρχει στη µνήµη

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

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

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

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

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

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

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

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

ιαδικτυακές Εφαρµογές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

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

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Copy Constructor Deep and Shallow Copies

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

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

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Διάλεξη 9η: Πίνακες (arrays)

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

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

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

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

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

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

7. Δομές Ελέγχου (Control Statements)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Διάλεξη 10η: Πολυδιάστατοι Πίνακες

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

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

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

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

Σημειώσεις δεύτερης εβδομάδας

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

API: Applications Programming Interface

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

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

Transcript:

9. Πίνακες (Arrays) Χειμερινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1

Θέματα Εισαγωγή στους πίνακες (arrays) Ορισμοί και δημιουργία πινάκων (declaring and creating arrays) Παραδείγματα χρήσης πινάκων Χρήση πινάκων σε μεθόδους Πολυδιάστατοι πίνακες (multidimensional arrays) Μέθοδοι με μεταβλητό αριθμό παραμέτρων (variable-length argument lists) Παράμετροι κατά την εκτέλεση προγράμματος (command-line arguments) 2

Εισαγωγή στους πίνακες (arrays) Ένας πίνακας είναι μια ομάδα τιμών του ίδιου τύπου οι οποίες είναι αποθηκευμένες μαζί στον ίδιο συνεχή χώρο στη μνήμη, σαν μία μεταβλητή με πολλά μέλη. Το κάθε στοιχείο (element) χαρακτηρίζεται από συγκεκριμένο ακέραιο δείκτη (integer index) ο οποίος πρέπει να είναι τύπου int ή τύπου που μπορεί αυτόματα να προαχθεί σε int. Η δήλωση ενός πίνακα στη Java δεν κρατά την αντίστοιχη μνήμη, αλλά απλά ορίζει ότι η συγκεκριμένη μεταβλητή μπορεί να χρησιμοποιηθεί για να αποθηκεύσει μία αναφορά (reference) στον πίνακα. Για να κρατηθεί η κατάλληλη μνήμη για ένα πίνακα πρέπει να χρησιμοποιηθεί μια εντολή new, οπότε και ορίζεται πραγματικά ο πίνακας και κρατείται η κατάλληλη μνήμη. Στη συνέχεια πρόσβαση σε κάποιο μέλος του πίνακα πετυχαίνεται με το όνομα του πίνακα ακολουθούμενο από τον κατάλληλο δείκτη μέσα σε τετραγωνικές παρενθέσεις (square brackets). Το πρώτο στοιχείο ενός πίνακα στην Java έχει δείκτη 0. 3

Εισαγωγή στους πίνακες (arrays) Στην Java ο κάθε πίνακας έχει ένα length μέλος (field) το οποίο αποθηκεύει τον αριθμό των μελών του. Το μήκος ενός πίνακα είναι δεδομένο κατά την δημιουργία του και δεν μπορεί να τροποποιηθεί αφού η μεταβλητή length ορίζεται σαν final Ένας πίνακας που περνά σαν παράμετρος σε κάποια μέθοδο μπορεί να τροποποιηθεί αφού η αναφορά σε αυτόν τον πίνακα είναι που περνά στη μέθοδο σαν τιμή (passed by value) και συνεπώς αυτή δεν μπορεί να αλλάξει. Ένας πίνακας μπορεί να επιστραφεί από κάποια μέθοδο. Όταν ένας πίνακας περιέχει references σε άλλους πίνακες ή άλλα αντικείμενα, η μνήμη που απαιτείται για τα επιμέρους μέλη του πίνακα πρέπει να δηλωθεί με κάποια επιπλέον εντολή new. Η κλάση Vector μπορεί να χρησιμοποιηθεί εναλλακτικά για να αποθηκεύσει ένα πίνακα του οποίου το μήκος μπορεί να αλλάζει. Η κλάση System έχει μία μέθοδο arraycopy() η οποία μπορεί να χρησιμοποιηθεί για την αντιγραφή μέρους ή ολόκληρου του πίνακα σε άλλο πίνακα. 4

Παράδειγμα πίνακα int c[] = new int[ 12 ]; c είναι το όνομα του πίνακα (array name) c.length δίνει το μήκος του πίνακα (array s length) ο πίνακα c έχει 12 στοιχεία (elements): c[0], c[1], c[11] 5

Ορισμός και δημιουργία πινάκων (Declaring and creating Arrays) Η μνήμη που απαιτείται για ένα πίνακα κρατείται δυναμικά με τη χρήση του keyword new. π.χ. ορισμός πίνακα c int c[] = new int[ 12 ]; Αυτή η εντολή είναι ισοδύναμη με τις πιο κάτω: int c[]; // declare array variable c = new int[ 12 ]; // create array Με τον ίδιο τρόπο μπορούμε να ορίσουμε πίνακα αντικειμένων: Point pts[] = new Point[20]; 6

Παράδειγμα: Δημιουργία και ορισμός στοιχείων πίνακα Declare array as an array of ints Create 10 ints for array; each int is initialized to 0 by default array.length returns length of array Each int is initialized to 0 by default array[counter] returns int associated with index in array 7

Παράδειγμα: Ορισμός τιμών για τα στοιχεία πίνακα κατά τη δημιουργία Declare array as an array of ints Compiler uses initializer list to allocate array 8

Παράδειγμα: Ορισμός τιμών των στοιχείων πίνακα Declare and create array that contains 10 ints Use array index to assign array value Declare constant variable ARRAY_LENGTH using the final modifier 9

Παράδειγμα: Χρήση στοιχείων πίνακα Declare array with initializer list Sum all array values 10

Declare array with initializer list Use the 0 flag to display one-digit grade with a leading 0 For each array element, print associated number of asterisks Grade distribution: 00-09: 10-19: 20-29: 30-39: 40-49: 50-59: 60-69: * 70-79: ** 80-89: **** 90-99: ** 100: * 11

1 // Fig. 7.7: RollDie.java 2 // Roll a six-sided die 6000 times. 3 import java.util.random; 4 5 public class RollDie 6 7 public static void main( String args[] ) 8 9 Random randomnumbers = new Random(); // random number generator 10 int frequency[] = new int[ 7 ]; // array of frequency counters 11 12 // roll die 6000 times; use die value as frequency index 13 for ( int roll = 1; roll <= 6000; roll++ ) 14 ++frequency[ 1 + randomnumbers.nextint( 6 ) ]; 15 16 System.out.printf( "%s%10s\n", "Face", "Frequency" ); 17 18 // output each array element's value 19 for ( int face = 1; face < frequency.length; face++ ) 20 System.out.printf( "%4d%10d\n", face, frequency[ face ] ); 21 // end main Declare frequency as array of 7 ints Generate 6000 random integers in range 1-6 Increment frequency values at index associated with random number 22 // end class RollDie Face Frequency 1 988 2 3 963 1018 4 1041 5 978 6 1012 12

Παράδειγμα χρήσης πίνακα import java.util.scanner; public class Arrays1 public static void main(string args[]) int n; System.out.print("n = "); Scanner inputscanner = new Scanner(System.in); n = inputscanner.nextint(); System.out.println(" n = " + n); 13

double a[] ; a = new double[n]; for(int i=0; i<n;i++) System.out.print(" a[" + i + "] = "); a[i] = inputscanner.nextdouble(); System.out.println("Array"); for(int i=0; i<n;i++) System.out.println(" a[" + i + "] = " + a[i]); 14

Παράδειγμα χρήσης πίνακα αντικειμένων class Point private double x; private double y; Point(double xx, double yy) x = xx; y = yy; public String tostring() return " x=" + x + " y=" + y; 15

public class TestPointArray1 static final int NUMBER_OF_POINTS = 5; public static void main(string args[]) Point p1 = new Point(2.3, -15.7); System.out.println("\n p1: " + p1); Point points[]; points = new Point[NUMBER_OF_POINTS]; for(int i=0;i<number_of_points;i++) points[i] = new Point(2.1*i, 11.1*i); System.out.println("\n Points"); for(int i=0;i<number_of_points;i++) System.out.printf(" points[%d] = %s \n", i, points[i]); 16

17

Παράδειγμα: Enhanced for Statement (J2SE 5.0) public class TestPointArray_EnhancedFor static final int NUMBER_OF_POINTS = 5; public static void main(string args[]) Point points[]; points = new Point[NUMBER_OF_POINTS]; for(int i=0;i<points.length;i++) points[i] = new Point(2.1*i, 11.1*i); System.out.println("\n Points"); for(point point : points) System.out.println(point); 18

Το enhanced for statement: Μπορεί να χρησιμοποιηθεί για να έχουμε πρόσβαση σε ένα στοιχείο Δεν μπορεί να χρησιμοποιηθεί για να τροποποιήσουμε ένα στοιχείο Δεν μπορεί να έχει πρόσβαση στο δείκτη (index ) ενός στοιχείου 19

Παράδειγμα χρήσης πινάκων ως παραμέτρους μεθόδων public class PassArrayToMethod public static void main(string args[]) double values[] = 32.3, 30.6, 31.4, 29.5, 28.7; System.out.println("\n Average of " + values.length + " values: " + computeaveragevalue(values)); static double computeaveragevalue(double values[]) double average = 0; for(double value : values) average += value; return average/values.length; 20

Παράδειγμα χρήσης πινάκων ως παραμέτρους μεθόδων με υπερφόρτωση μεθόδων (method overloading) public class PassArrayToMethod2 public static void main(string args[]) int valuesi[] = 3, 5, 6, 4, 9, 5, 8, 7, 7, 3, 2, 4; System.out.println("\n Average of " + valuesi.length + " values: " + computeaveragevalue(valuesi)); double valuesd[] = 32.3, 30.6, 31.4, 29.5, 28.7; System.out.println("\n Average of " + valuesd.length + " values: " + computeaveragevalue(valuesd)); 21

static int computeaveragevalue(int values[]) int average = 0; for(int value : values) average += value; return average/values.length; static double computeaveragevalue(double values[]) double average = 0; for(double value : values) average += value; return average/values.length; 22

Κλήση μεθόδων με πίνακες σαν παραμέτρους Τρόποι παροχής παραμέτρων στις μεθόδους Στέλνοντας την τιμή (Pass-by-value) o o Αντίγραφο της τιμής της παραμέτρου στέλνετε στην μέθοδο Η κάθε primitive μεταβλητή στη Java στέλνεται σαν τιμή (pass-by-value) Στέλνοντας την αναφορά (Pass-by-reference) o o o Δίδεται στην καλούμενη μέθοδο κατευθείαν πρόσβαση στη παράμετρο Έτσι, η καλούμενη μέθοδος μπορεί να τροποποιήσει τα δεδομένα Ο τρόπος αυτός έχει καλύτερη απόδοση (improved performance) Στη Java όλες οι παράμετροι περνούν σαν τιμές: o o έτσι, κάθε αντικείμενο, συμπεριλαμβανομένων των πινάκων, περνά στη μέθοδο ως αναφορά (by-reference) και κάθε primitive μεταβλητή στέλνεται σαν τιμή (pass-by-value) 23

Παράδειγμα: Pass-by-value και Pass-by-reference 1 // Fig. 7.13: PassArray.java 2 // Passing arrays and individual array elements to methods. 3 4 public class PassArray 5 6 // main creates array and calls modifyarray and modifyelement 7 public static void main( String args[] ) 8 9 int array[] = 1, 2, 3, 4, 5 ; 10 11 System.out.println( 12 "Effects of passing reference to entire array:\n" + 13 "The values of the original array are:" ); 14 15 // output original array elements 16 for ( int value : array ) 17 System.out.printf( " %d", value ); 18 19 modifyarray( array ); // pass array reference 20 System.out.println( "\n\nthe values of the modified array are:" ); 21 22 // output modified array elements 23 for ( int value : array ) 24 System.out.printf( " %d", value ); 25 26 System.out.printf( 27 "\n\neffects of passing array element value:\n" + 28 "array[3] ΠΠΜ before 500: Προχωρημένη modifyelement: Ανάπτυξη Λογισμικού %d\n", Εφαρμογών array[ Μηχανικής 3 ] ); Declare 5-int array with initializer list Pass entire array to method modifyarray 24

29 30 modifyelement( array[ 3 ] ); // attempt to modify array[ 3 ] 31 System.out.printf( 32 "array[3] after modifyelement: %d\n", array[ 3 ] ); 33 // end main 34 35 // multiply each element of an array by 2 36 public static void modifyarray( int array2[] ) 37 38 for ( int counter = 0; counter < array2.length; counter++ ) 39 array2[ counter ] *= 2; 40 // end method modifyarray 41 42 // multiply argument by 2 43 public static void modifyelement( int element ) 44 45 element *= 2; 46 System.out.printf( 47 "Value of element in modifyelement: %d\n", element ); 48 // end method modifyelement 49 // end class PassArray Pass array element array[3] to method modifyelement Method modifyarray manipulates the array directly Method modifyelement manipulates a primitive s copy Effects of passing reference to entire array: The values of the original array are: 1 2 3 4 5 The values of the modified array are: 2 4 6 8 10 Effects of passing array element value: array[3] before modifyelement: 8 Value of element in modifyelement: 16 array[3] after modifyelement: 8 25

Διδιάστατοι πίνακες (Two-dimensional arrays) m γραμμές και n στήλες (m-by-n) 26

Πολυδιάστατοι πίνακες (Multidimensional arrays) Ένας δυσδιάστατος πίνακας μπορεί να οριστεί χρησιμοποιώντας μονοδιάστατους πίνακες σαν στοιχεία ενός άλλου μονοδιάστατου πίνακα. Με τον ίδιο τρόπο μπορεί να δημιουργηθεί ένας πολυδιάστατος πίνακας. Οι πολυδιάστατοι πίνακες στην Java αποθηκεύονται σαν μονοδιάστατοι. Αν ένας διδιάστατος πίνακας έχει τον ίδιο αριθμό γραμμών και στηλών, το οποίο δεν είναι απαραίτητο στην Java, τότε ο πίνακας μπορεί να οριστεί σαν: double x[][] = new double [n][m] Το i στοιχείο του x είναι μία αναφορά (reference) στην i γραμμή του. Εναλλακτικά, πρέπει για κάθε γραμμή πρέπει να δημιουργείται με χρήση του τελεστή new για να κρατείται η αντίστοιχη απαιτούμενη μνήμη. Πολυδιάστατοι πίνακες και οι τιμές των στοιχείων τους μπορούν να οριστούν με χρήση nested array initializers: int x [][] = 3, 2, 7,8; 27

Παραδείγματα ορισμού δυσδιάστατων πινάκων int x[][] = 1, 2, 3, 4, 5, 6 ; 1 2 3 4 5 6 int x[][] = 1, 2, 3, 4, 5, 6, 7 ; 1 2 3 4 5 6 7 int x[][] = new int[ 2 ][ 3 ]; int x[][]; x = new int[ 2 ][ 4 ]; int x[][]; x = new int[ 2 ][ ]; x[ 0 ] = new int[ 3 ]; x[ 1 ] = new int[ 4 ]; 28

Παραδείγματα πίνακα με διαφορετική διάσταση στηλών (ragged arrays) class TriangularArray public static void main(string args[]) int i, j; double x[][] = new double[5][]; for(i=0;i<5;i++) x[i] = new double[i+1]; System.out.println(); for(j=0;j<i+1;j++) x[i][j] = (i+1)*10+j+1; System.out.print(" " + x[i][j] + " "); 29

1 // Fig. 7.17: InitArray.java 2 // Initializing two-dimensional arrays. 3 4 public class InitArray 5 6 // create and output two-dimensional arrays 7 public static void main( String args[] ) 8 9 int array1[][] = 1, 2, 3, 4, 5, 6 ; 10 int array2[][] = 1, 2, 3, 4, 5, 6 ; 11 12 System.out.println( "Values in array1 by row are" ); 13 outputarray( array1 ); // displays array1 by row 14 15 System.out.println( "\nvalues in array2 by row are" ); 16 outputarray( array2 ); // displays array2 by row 17 // end main 18 Use nested array initializers to initialize array1 Use nested array initializers of different lengths to initialize array2 30

19 // output rows and columns of a two-dimensional array 20 public static void outputarray( int array[][] ) 21 22 // loop through array's rows 23 for ( int row = 0; row < array.length; row++ ) 24 25 // loop through columns of current row 26 for ( int column = 0; column < array[ row ].length; column++ ) 27 System.out.printf( "%d ", array[ row ][ column ] ); 28 29 System.out.println(); // start new line of output 30 // end outer for 31 // end method outputarray 32 // end class InitArray Values in array1 by row are 1 2 3 4 5 6 Values in array2 by row are 1 2 3 4 5 6 array[row].length returns number of columns associated with row subscript Use double-bracket notation to access two-dimensional array values 31

Μέθοδοι με μεταβλητό αριθμό παραμέτρων (variable-length argument lists) Δυνατότητα που προστέθηκε στη J2SE 5.0 Απροσδιόριστος αριθμός παραμέτρων Χρήση ellipsis ( ) στη λίστα παραμέτρων της μεθόδου Μόνο μία φορά μπορεί να χρησιμοποιηθεί και πάντα στο τέλος της λίστας Method average receives a variable length sequence of doubles Calculate the total of the doubles in the array numbers.length to provides the size of the numbers array 32

25 System.out.printf( "d1 = %.1f\nd2 = %.1f\nd3 = %.1f\nd4 = %.1f\n\n", 26 d1, d2, d3, d4 ); 27 28 System.out.printf( "Average of d1 and d2 is %.1f\n", 29 average( d1, d2 ) ); 30 System.out.printf( "Average of d1, d2 and d3 is %.1f\n", 31 average( d1, d2, d3 ) ); 32 System.out.printf( "Average of d1, d2, d3 and d4 is %.1f\n", 33 average( d1, d2, d3, d4 ) ); 34 // end main 35 // end class VarargsTest d1 = 10.0 d2 = 20.0 d3 = 30.0 d4 = 40.0 Invoke method average with four arguments Invoke method average with two arguments Invoke method average with three arguments Average of d1 and d2 is 15.0 Average of d1, d2 and d3 is 20.0 Average of d1, d2, d3 and d4 is 25.0 33

Παράμετροι κατά την εκτέλεση προγράμματος (command-line arguments) 1 // Fig. 7.21: InitArray.java 2 // Using command-line arguments to initialize an array. 3 4 public class InitArray 5 6 public static void main( String args[] ) 7 8 // check number of command-line arguments 9 if ( args.length!= 3 ) 10 System.out.println( 11 "Error: Please re-enter the entire command, including\n" + 12 "an array size, initial value and increment." ); 13 else 14 15 // get array size from first command-line argument 16 int arraylength = Integer.parseInt( args[ 0 ] ); 17 int array[] = new int[ arraylength ]; // create array 18 19 // get initial value and increment from command-line argument 20 int initialvalue = Integer.parseInt( args[ 1 ] ); 21 int increment = Integer.parseInt( args[ 2 ] ); 22 23 // calculate value for each array element 24 for ( int counter = 0; counter < array.length; counter++ ) 25 array[ counter ] = initialvalue + increment * counter; 26 Array args stores commandline arguments 27 System.out.printf( ΠΠΜ 500: "%s%8s\n", Προχωρημένη Ανάπτυξη "Index", Λογισμικού "Value" Εφαρμογών ); Μηχανικής Check number of arguments passed in from the command line Obtain first command-line argument Obtain second and third command-line arguments Calculate the value for each array element based on command-line arguments 34

29 // display array index and value 30 for ( int counter = 0; counter < array.length; counter++ ) 31 System.out.printf( "%5d%8d\n", counter, array[ counter ] ); 32 // end else 33 // end main 34 // end class InitArray java InitArray Error: Please re-enter the entire command, including an array size, initial value and increment. Missing command-line arguments java InitArray 5 0 4 Index Value 0 0 1 4 2 8 3 12 4 16 Three command-line arguments are 5, 0 and 4 java InitArray 10 1 2 Index Value 0 1 1 3 2 5 3 7 4 9 5 11 6 7 13 15 8 9 17 19 Three command-line arguments are 10, 1 and 2 35