User Tools

Site Tools


java:arrays

This is an old revision of the document!


Πίνακες

Οι πίνακες στην γλώσσα προγραμματισμού Java ορίζονται σε αναλογία με την C ως ένα σύνολο τιμών του ιδίου τύπου δεδομένων του οποίου ο αριθμός των μελών ορίζεται κατά την αρχικοποίηση του πίνακα. Η αρχικοποίηση ενός πίνακα γίνεται με χρήση του τελεστή new, σε μία δήλωση της μορφής

int [] anArray; 
anArray = new int[5];
int anotherArray[]; 
anotherArray = new int[10];
     ή
int [] anArray = new int[5];
int anotherArray[] = new int[10];

Ο παραπάνω κώδικας ορίζει δύο πίνακες τύπου int μεγέθους 5 και 10 αντίστοιχα. Παρατηρήστε ότι κατά τον ορισμό του πίνακα ο τελεστής [] μπορεί να τοποθετηθεί πριν ή μετά το όνομα της μεταβλητής.

Σημειώστε ότι κατά σύμβαση προτιμάται η τοποθέτηση του τελεστή [] πριν το όνομα της μεταβλητής, και όχι μετά.

Εναλλακτικά, μπορείτε να ορίσετε το μέγεθος του πίνακα ορίζοντας και τα περιεχόμενα του στην δήλωση ορισμού του, όπως στο παρακάτω παράδειγμα:

int[] numbers = {1,2,3,4,5,6,7,8,9,10};

Η αρίθμηση των στοιχείων του πίνακα ξεκινάει από τον δείκτη 0 και αυξάνει. Για παράδειγμα για ένα πίνακα 10 θέσεων, η αρίθμηση των στοιχείων του είναι 0-9, όπως φαίνεται στο παρακάτω σχήμα.

Μπορείτε να δείτε ενδεικτικά το παρακάτω πρόγραμμα, όπου ορίζεται ένας πίνακας ακεραίων μεγέθους 3, ο πίνακας γεμίζει με τιμές και στη συνέχεια εκτυπώνονται τα περιεχόμενα του.

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);
    } 
  }
}

Οι πίνακες στη Java υλοποιούνται ως αντικείμενα. Εφόσον αρχικοποιηθεί ένας πίνακας το μέγεθος του είναι αμετάβλητο.

Κάθε αντικείμενο πίνακα έχει ένα read-only πεδίο length που αποθηκεύει το μέγεθος του πίνακα. Μέσω του πεδίου length μπορείτε να έχετε πρόσβαση στο μέγεθος του εκάστοτε πίνακα.

Πίνακες αναφορικού τύπου

Ας θεωρήσουμε το παρακάτω παράδειγμα κώδικα με βάση την κλάση Rectangle της προηγούμενης ενότητας.

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(100, 200, originOne);
 
    rectangles[0] = rectOne;
    rectangles[1] = new Rectangle(50, 100, new Point(5,10));
    rectangles[2] = rectOne;
    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[1] = rectangles[3];
  }
 
}

Στον παραπάνω κώδικα στην γραμμή Rectangle [] rectangles = new Rectangle[4]; δημιουργούμε ένα πίνακα από δείκτες σε αντικείμενα τύπου Rectangle. Αρχικά ο πίνακας έχει σε όλες τις θέσεις του την τιμή null. Στις επόμενες γραμμές αναθέτουμε αντικείμενα σε κάθε θέση του πίνακα. Οι θέσεις 0 και 2 του πίνακα δείχνουν στο ίδιο αντικείμενο στο οποίο δείχνει και η μεταβλητή rectOne.

Εάν επιχειρήσουμε να σχεδιάσουμε το παραπάνω διάγραμμα αυτό θα δείχνει ως εξής:

Πίνακες δύο διαστάσεων

Οι πίνακες δύο διαστάσεων ορίζονται σε αναλογία με τους πίνακες μίας διάστασης ως εξής:

int [][] anArray;
anArray = new int[3][5];
      ή
int [][] anArray = new int[3][5];

Το παραπάνω παράδειγμα ορίζει ένα πίνακα διαστάσεων 3×5. Επιπλέον, μπορούμε να έχουμε διαφορετικό αριθμό στηλών σε κάθε γραμμή του πίνακα. Δείτε το παρακάτω πρόγραμμα που περιέχει ένα πίνακα δύο διαστάσεων. Στην πρώτη γραμμή του πίνακα έχουμε 3 στοιχεία, ενώ στην 2η δύο στοιχεία.

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.");
  }
}
java/arrays.1518459426.txt.gz · Last modified: 2018/02/12 18:17 by gthanos