java:arrays

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
java:arrays [2017/02/10 18:19]
doufexi Διόρθωση prev link
java:arrays [2018/02/16 17:25]
gthanos
Line 33: Line 33:
 class ArrayDemo { class ArrayDemo {
   public static void main(String[] args) {   public static void main(String[] args) {
-    // declares an array of integers 
     int[] anArray;     int[] anArray;
  
-    // allocates memory for 10 integers 
     anArray = new int[3];     anArray = new int[3];
                
Line 46: Line 44:
       System.out.println("​Element at index " + i + "/"​ + anArray.length+":​ " + anArray[i]);​       System.out.println("​Element at index " + i + "/"​ + anArray.length+":​ " + anArray[i]);​
     }     }
 +   
 +    int j=0;
 +    for(int element: anArray) {      ​
 +      System.out.println("​Element at index " + (j++) + "/"​ + anArray.length+":​ " + element);
 +    } 
   }   }
 } }
Line 51: Line 54:
  
 <WRAP important 80% round center> <WRAP important 80% round center>
-Οι πίνακες στη Java υλοποιούνται ως αντικείμενα ​(//θα τα δούμε αναλυτικά παρακάτω//​). __Εφόσον αρχικοποιηθεί ένας πίνακας το μέγεθος του είναι ​σταθερό και δεν αλλάζει__. +Οι πίνακες στη Java υλοποιούνται ως αντικείμενα. __Εφόσον αρχικοποιηθεί ένας πίνακας το μέγεθος του είναι αμετάβλητο__. 
  
-Κάθε αντικείμενο πίνακα έχει ένα πεδίο **length** που αποθηκεύει το μέγεθος του πίνακα ​(π.χ. δείτε στο πρόγραμμα ''​anArray.length''​) και για το οποίο δεν μπορούμε να μεταβάλλουμε την τιμή του (δηλαδή είναι final field). Μέσω του πεδίου //length// μπορείτε να έχετε πρόσβαση στο μέγεθος του κάθε πίνακα.+Κάθε αντικείμενο πίνακα έχει ένα ​//​read-only// ​πεδίο **length** που αποθηκεύει το μέγεθος του πίνακα. Μέσω του πεδίου //length// μπορείτε να έχετε πρόσβαση στο μέγεθος του ​εκάστοτε πίνακα.
 </​WRAP>​ </​WRAP>​
  
-<WRAP tip 80% round center>​ +===== Πίνακες αναφορικού τύπου ===== 
-Κατεβάστε ​και ​εκτελέστε το παραπάνω πρόγραμμα. Παρατηρήστε ότι ​η κλήση της μεθόδου **System.out.println** εκτυπώνει στην ​κονσόλα σας ένα αλφαριθμητικό κατά ​την εκτέλεση του προγράμματος ακολουθούμενο από χαρακτήρα αλλαγής ​γραμμής. Εναλλακτικά ​της **System.out.println** ​μπορείτε να χρησιμοποιείτε και την μέθοδο ​**System.out.print**,​ όπου ​ο χαρακτήρας αλλαγής γραμμής ​παραλείπεται. + 
-</​WRAP>​+Ας θεωρήσουμε το παρακάτω παράδειγμα ​κώδικα με βάση την κλάση **Rectangle** [[java:​objects|της ​προηγούμενης ενότητας]]. 
 + 
 +<code java CreateRectanglesArray.java>​ 
 +public class CreateRectanglesArray { 
 +  public static void main(String[] args) {     
 +    Rectangle [] rectangles = new Rectangle[4];​  
 +    Point originOne = new Point(23, 94); 
 +    Rectangle rectOne = new Rectangle(10,​ 20, originOne);​ 
 +        
 +    rectangles[0] = rectOne; 
 +    rectangles[1] = rectOne; 
 +    rectangles[2] = new Rectangle(50,​ 100, new Point(5,​10));​ 
 +    rectangles[3] = new Rectangle(20,​ 30, new Point(-5, 7)); 
 +     
 +    int i=0; 
 +    for(Rectangle rectangle : rectangles) { 
 +      String str = "​rectangles["​+(i++)+"​]:​ "; 
 +      str = str + "​("​+rectangle.getOrigin().getX()+","​+rectangle.getOrigin().getY()+"​)\t";​ 
 +      str = str + "​width:​ "​+rectangle.getWidth()+",​ height: "​+rectangle.getHeight();​ 
 +      ​System.out.println(str); 
 +    } 
 +     
 +    rectangles[2] = rectangles[3];​ 
 +  } 
 +   
 +
 +</​code>​ 
 + 
 +Στον παραπάνω κώδικα στην ​γραμμή ''​Rectangle [] rectangles = new Rectangle[4];''​ δημιουργούμε ένα πίνακα από δείκτες σε αντικείμενα τύπου **Rectangle**. Αρχικά ο πίνακας έχει σε όλες τις θέσεις ​του ​την τιμή **null**. Στις επόμενες ​γραμμές αναθέτουμε ​αντικείμενα σε κάθε θέση του πίνακα. Οι θέσεις 0 και 1 του πίνακα δείχνουν στο ίδιο αντικείμενο στο οποίο δείχνει και η μεταβλητή **rectOne**. 
 + 
 +Εάν επιχειρήσουμε να σχεδιάσουμε το παραπάνω διάγραμμα αυτό θα δείχνει ως εξής: 
 + 
 +|Αρχικά ​δημιουργείται ένας πίνακας που όλα τα στοιχεία του είναι **null**. ​ |Στη συνέχεια δημιουργούμε αντικείμενα και τα αναθέτουμε σε κάθε θέση του πίνακα. Οι θέσεις 0 και 1 του πίνακα ​δείχνουν στο αντικείμενο που ​δείχνει και η μεταβλητή **rectOne**. ​ |Η ανάθεση του ​αντικειμένου της θέσης 3 στην θέση 2 δημιουργεί ένα αντικείμενο για το οποίο δεν υπάρχει ​αναφορά. Το αντικείμενο αυτό καταστρέφεται ​από τον [[java:​objects#​garbage_collection|Garbage Collector]] | 
 +|  {{ :​java:​createrectangletable1.png?​150 |}}  |  {{  :​java:​createrectangletable2.png? ​ |}}|  {{:​java:​createrectangletable3.png? ​ |}}  | 
 + 
 ===== Πίνακες δύο διαστάσεων ===== ===== Πίνακες δύο διαστάσεων =====
  
Line 70: Line 108:
 </​code>​ </​code>​
  
-Το παραπάνω παράδειγμα ορίζει ένα πίνακα διαστάσεων **3x5**. ​__Η ιδιαιτερότητα της Java σε σχέση με την C είναι ότι ​μπορούμε να έχουμε διαφορετικό αριθμό στηλών σε κάθε γραμμή του πίνακα__. Δείτε το παρακάτω πρόγραμμα που περιέχει ένα πίνακα δύο διαστάσεων. Στην πρώτη γραμμή του πίνακα έχουμε 3 στοιχεία,​ ενώ στην 2η δύο στοιχεία.+Το παραπάνω παράδειγμα ορίζει ένα πίνακα διαστάσεων **3x5**. ​Επιπλέονμπορούμε να έχουμε διαφορετικό αριθμό στηλών σε κάθε γραμμή του πίνακα. Δείτε το παρακάτω πρόγραμμα που περιέχει ένα πίνακα δύο διαστάσεων. Στην πρώτη γραμμή του πίνακα έχουμε 3 στοιχεία,​ ενώ στην 2η δύο στοιχεία.
 <code java MultiDimArrayDemo.java>​ <code java MultiDimArrayDemo.java>​
 class MultiDimArrayDemo { class MultiDimArrayDemo {
   public static void main(String[] args) {   public static void main(String[] args) {
-    String[][] names = { +    String [][] names; 
-      {"Mr. ""Mrs. ""Ms. "}, +    ​names = new String[3][];​ 
-      {"Smith""Jones"} +    ​names[0] = new String[3];​ 
-    ​}+    names[1] = new String[5];​ 
-    ​// Mr. Smith +    names[2] = new String[4];​ 
-    System.out.println(names[0][0] + names[1][0]); +     
-    // Ms. Jones +    names[0][0]="Mr. "; names[0][1]="Mrs. "; names[0][2]="Ms. "; 
-    System.out.println(names[0][2] + names[1][1]);+    ​names[1][0]="Susan "; names[1][1]="Peter "; names[1][2]="​Edgar "; names[1][3]="​Mary "; names[1][4]="​Linda "; 
 +    ​names[2][0]="​Smith";​ names[2][1]="​Jones";​ names[2][2]="​Williams";​ names[2][3]="​Taylor"​
 +     
 +    System.out.println(names[0][0] + names[1][1+ names[2][3] + " enters the room."); 
 +    System.out.println(names[0][1] + names[1][3+ names[2][2] + " leaves the room.");
   }   }
 } }
 </​code>​ </​code>​
 +
 +== Επεξήγηση του παραπάνω κώδικα ==
 +| ''​names = new String[3][];''​ | Αρχικά δεσμεύουμε ένα μονοδιάστατο πίνακα που τα στοιχεία του είναι μονοδιάστατοι πίνακες από [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​String.html|java.lang.String]]. |
 +| ''​names[0] = new String[3]; names[1] = new String[5]; names[2] = new String[4];''​ |Για κάθε θέση του παραπάνω πίνακα δεσμεύουμε ένα νέο μονοδιάστατο πίνακα από [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​String.html|java.lang.String]]. Οι νέοι πίνακες δεν έχουν απαραίτητα το ίδιο μέγεθος. |
  
  
-| Προηγούμενο:​ [[java:literals ​Κυριολεκτικά]] | [[:toc | Περιεχόμενα ]]   | Επόμενο:​ [[java:operators ​Τελεστές ]]  |+| Προηγούμενο:​ [[java:objectsΔημιουργία Αντικειμένων]] | [[:toc | Περιεχόμενα ]]   | Επόμενο:​ [[java:public_private_access_modifiers ​Περιορισμός της πρόσβασης με τους προσδιοριστές ​private και public]]  |
java/arrays.txt · Last modified: 2018/02/16 17:25 by gthanos