User Tools

Site Tools


java:arrays

Differences

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

Link to this comparison view

java:arrays [2018/02/12 21:22]
gthanos [Πίνακες αναφορικού τύπου]
java:arrays [2022/02/23 15:35]
Line 1: Line 1:
-====== Πίνακες ====== 
  
-Οι πίνακες στην γλώσσα προγραμματισμού **Java** ορίζονται σε αναλογία με την **C** ως ένα σύνολο τιμών του ιδίου τύπου δεδομένων του οποίου ο αριθμός των μελών ορίζεται κατά την αρχικοποίηση του πίνακα. Η αρχικοποίηση ενός πίνακα γίνεται με χρήση του τελεστή **new**, σε μία δήλωση της μορφής 
- 
-<code java> 
-int [] anArray;  
-anArray = new int[5]; 
-int anotherArray[];  
-anotherArray = new int[10]; 
-     ή 
-int [] anArray = new int[5]; 
-int anotherArray[] = new int[10]; 
-</code> 
- 
-Ο παραπάνω κώδικας ορίζει δύο πίνακες τύπου **int** μεγέθους **5** και **10** αντίστοιχα. Παρατηρήστε ότι κατά τον ορισμό του πίνακα ο τελεστής **[]** μπορεί να τοποθετηθεί πριν ή μετά το όνομα της μεταβλητής. 
- 
-<WRAP tip 80% round center> 
-Σημειώστε ότι κατά σύμβαση προτιμάται η τοποθέτηση του τελεστή **[]** πριν το όνομα της μεταβλητής, και όχι μετά. 
-</WRAP> 
- 
-Εναλλακτικά, μπορείτε να ορίσετε το μέγεθος του πίνακα ορίζοντας και τα περιεχόμενα του στην δήλωση ορισμού του, όπως στο παρακάτω παράδειγμα: 
-<code java> 
-int[] numbers = {1,2,3,4,5,6,7,8,9,10}; 
-</code> 
- 
-Η αρίθμηση των στοιχείων του πίνακα ξεκινάει από τον δείκτη 0 και αυξάνει. Για παράδειγμα για ένα πίνακα 10 θέσεων, η αρίθμηση των στοιχείων του είναι **0-9**, όπως φαίνεται στο παρακάτω σχήμα. 
- 
-{{  :java:objects-tenelementarray.gif  }} 
- 
-Μπορείτε να δείτε ενδεικτικά το παρακάτω πρόγραμμα, όπου ορίζεται ένας πίνακας ακεραίων μεγέθους 3, ο πίνακας γεμίζει με τιμές και στη συνέχεια εκτυπώνονται τα περιεχόμενα του. 
- 
-<code java ArrayDemo.java> 
-class ArrayDemo { 
-  public static void main(String[] args) { 
-    int[] anArray; 
- 
-    anArray = new int[3]; 
-        
-    anArray[0] = 100; 
-    anArray[1] = 200; 
-    anArray[2] = 300; 
-     
-    for(int i=0; i < anArray.length; 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); 
-    }  
-  } 
-} 
-</code> 
- 
-<WRAP important 80% round center> 
-Οι πίνακες στη Java υλοποιούνται ως αντικείμενα. __Εφόσον αρχικοποιηθεί ένας πίνακας το μέγεθος του είναι αμετάβλητο__.  
- 
-Κάθε αντικείμενο πίνακα έχει ένα //read-only// πεδίο **length** που αποθηκεύει το μέγεθος του πίνακα. Μέσω του πεδίου //length// μπορείτε να έχετε πρόσβαση στο μέγεθος του εκάστοτε πίνακα. 
-</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?  |}}  | 
- 
- 
-===== Πίνακες δύο διαστάσεων ===== 
- 
-Οι πίνακες δύο διαστάσεων ορίζονται σε αναλογία με τους πίνακες μίας διάστασης ως εξής: 
- 
-<code java> 
-int [][] anArray; 
-anArray = new int[3][5]; 
-      ή 
-int [][] anArray = new int[3][5]; 
-</code> 
- 
-Το παραπάνω παράδειγμα ορίζει ένα πίνακα διαστάσεων **3x5**. Επιπλέον, μπορούμε να έχουμε διαφορετικό αριθμό στηλών σε κάθε γραμμή του πίνακα. Δείτε το παρακάτω πρόγραμμα που περιέχει ένα πίνακα δύο διαστάσεων. Στην πρώτη γραμμή του πίνακα έχουμε 3 στοιχεία, ενώ στην 2η δύο στοιχεία. 
-<code java MultiDimArrayDemo.java> 
-class MultiDimArrayDemo { 
-  public static void main(String[] args) { 
-    String [][] names; 
-    names = new String[3][]; 
-    names[0] = new String[3]; 
-    names[1] = new String[5]; 
-    names[2] = new String[4]; 
-     
-    names[0][0]="Mr. "; names[0][1]="Mrs. "; names[0][2]="Ms. "; 
-    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> 
- 
- 
-| Προηγούμενο: [[java:objects| Δημιουργία Αντικειμένων]] | [[:toc | Περιεχόμενα ]]   | Επόμενο: [[java:public_private_access_modifiers | Περιορισμός της πρόσβασης με τους προσδιοριστές private και public]]  | 
java/arrays.txt · Last modified: 2022/02/23 15:35 (external edit)