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
Next revision
Previous revision
Next revision Both sides next revision
java:arrays [2017/02/14 08:02]
gthanos
java:arrays [2018/02/13 09:05]
gthanos [Πίνακες δύο διαστάσεων]
Line 54: 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 73: 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:variables Μεταβλητές]] | [[:toc | Περιεχόμενα ]]   | Επόμενο: [[java:operators Τελεστές ]]  |+| Προηγούμενο: [[java:objectsΔημιουργία Αντικειμένων]] | [[:toc | Περιεχόμενα ]]   | Επόμενο: [[java:public_private_access_modifiers Περιορισμός της πρόσβασης με τους προσδιοριστές private και public]]  |
java/arrays.txt · Last modified: 2022/02/23 15:35 (external edit)