Τα πίνακες χρησιμοποιούνται για να αποθηκεύουν πολλαπλές τιμές σε μια μόνο μεταβλητή, αντί να δηλώνονται ξεχωριστές μεταβλητές για κάθε τιμή.
Για να δηλώσετε έναν πίνακα, ορίστε τον τύπο της μεταβλητής με αγκύλες:
String[] CPU;
Ο παραπάνω κώδικας δηλώνει έναν πίνακα με το όνομα “CPU” τύπου String. Ο πίνακας είναι ακόμα κενός και μπορεί να γεμίσει με τιμές αργότερα στο πρόγραμμα.
Έχουμε πλέον δηλώσει μια μεταβλητή που κρατά έναν πίνακα από αλφαριθμητικές τιμές. Για να εισαγάγετε τιμές σε αυτόν, μπορείτε να τοποθετήσετε τις τιμές σε μια λίστα χωρισμένη με κόμματα, μέσα σε αγκύλες:
String[] CPU = {"Intel Core i5", "AMD Ryzen 5", "Intel Core i7", "AMD Ryzen 7"};
Η παραπάνω δήλωση δημιουργεί έναν πίνακα με το όνομα “CPU” και αποθηκεύει τις τέσσερις τιμές στον πίνακα. Οι τιμές περικλείονται σε αγκύλες και χωρίζονται με κόμματα.
Για να δημιουργήσετε έναν πίνακα ακεραίων, μπορείτε να γράψετε:
int[] numbers = {10, 20, 30, 40, 50};
Στο παραπάνω παράδειγμα, δημιουργείται ένας πίνακας με το όνομα “numbers” που περιέχει πέντε ακέραιες τιμές, δηλαδή 10, 20, 30, 40 και 50.
Μπορείτε να αποκτήσετε πρόσβαση σε ένα στοιχείο του πίνακα αναφερόμενοι στον αριθμό ευρετηρίου.
Η παρακάτω εντολή αποκτά πρόσβαση στην τιμή του πρώτου στοιχείου στον πίνακα CPU
:
String firstCPU = CPU[0];
Στο παραπάνω παράδειγμα, η μεταβλητή firstCPU
λαμβάνει την τιμή του πρώτου στοιχείου στον πίνακα CPU
, δηλαδή το "Intel Core i5"
. Το στοιχείο αυτό αντιστοιχεί στον αριθμό ευρετηρίου 0, καθώς οι αριθμοί ευρετηρίου ξεκινούν από το μηδέν στον πίνακα.
Για να αλλάξετε την τιμή ενός συγκεκριμένου στοιχείου, αναφερθείτε στον αριθμό ευρετηρίου:
CPU[2] = "Intel Core i9";
Στο παραπάνω παράδειγμα, η τιμή του τρίτου στοιχείου στον πίνακα CPU
αλλάζει από "Intel Core i7"
σε "Intel Core i9"
. Ο αριθμός ευρετηρίου 2 αντιστοιχεί στο τρίτο στοιχείο του πίνακα, καθώς οι αριθμοί ευρετηρίου ξεκινούν από το μηδέν.
[adinserter block=”2″]
Ας υποθέσουμε ότι έχουμε έναν πίνακα με τα ονόματα των μαθητών σε μια τάξη:
String[] students = {"Νίκος", "Μαρία", "Γιώργος", "Δημήτρης", "Ανδρέας"};
Για παράδειγμα, ας αλλάξουμε το όνομα του τέταρτου μαθητή από “Δημήτρης” σε “Ελένη”:
students[3] = "Ελένη";
Μετά από αυτήν την εντολή, ο πίνακας students
θα έχει την εξής μορφή:
{"Νίκος", "Μαρία", "Γιώργος", "Ελένη", "Ανδρέας"}
Παρατηρήστε ότι ο αριθμός ευρετηρίου για τον τέταρτο μαθητή είναι 3, αφού οι αριθμοί ευρετηρίου ξεκινούν από το μηδέν στον πίνακα.
Για να βρείτε πόσα στοιχεία έχει ένας πίνακας, χρησιμοποιήστε την ιδιότητα length
:
int[] myNum = {10, 20, 30, 40}; int arrayLength = myNum.length; System.out.println("The array has " + arrayLength + " elements.");
Στο παραπάνω παράδειγμα, η μεταβλητή arrayLength
παίρνει την τιμή του μήκους του πίνακα myNum
, δηλαδή 4. Στη συνέχεια, με τη χρήση της μεθόδου println()
τυπώνεται το μήνυμα “The array has 4 elements.”
Μπορείτε να περάσετε μέσα από τα στοιχεία ενός πίνακα με τη βοήθεια της επανάληψης for
και να χρησιμοποιήσετε την ιδιότητα length
για να καθορίσετε πόσες φορές πρέπει να εκτελεστεί η επανάληψη.
Το ακόλουθο παράδειγμα εμφανίζει όλα τα στοιχεία στον πίνακα CPU
:
for (int i = 0; i < CPU.length; i++) { System.out.println(CPU[i]); }
Στο παραπάνω παράδειγμα, η επανάληψη for
περνά από κάθε στοιχείο στον πίνακα CPU
και εκτυπώνει την τιμή του στην κονσόλα. Η συνθήκη i < CPU.length
ελέγχει αν ο αριθμός επαναλήψεων που απαιτούνται είναι μικρότερος από το μήκος του πίνακα CPU
. Ο αριθμός επαναλήψεων που απαιτούνται είναι ίσος με το μήκος του πίνακα CPU
. Επειδή οι αριθμοί ευρετηρίου στον πίνακα ξεκινούν από το μηδέν, πρέπει να ελέγξετε αν i
είναι μικρότερο από το μήκος του πίνακα, και όχι μικρότερο ή ίσο, για να αποφύγετε την προσπάθεια πρόσβασης σε ένα στοιχείο του πίνακα που δεν υπάρχει.
Επίσης, μπορείτε να χρησιμοποιήσετε μια βελτιωμένη μορφή της επανάληψης for
, την λεγόμενη “for-each” επανάληψη. Με αυτήν τη μορφή της επανάληψης for
, δεν χρειάζεται να χρησιμοποιήσετε μια μεταβλητή ευρετηρίου, αλλά μπορείτε να περάσετε κάθε στοιχείο απευθείας στην επανάληψη.
[adinserter block=”3″]
Το ακόλουθο παράδειγμα εμφανίζει όλα τα στοιχεία στον πίνακα GPU
, χρησιμοποιώντας την “for-each” επανάληψη:
for (String item : GPU) { System.out.println(item); }
Στο παραπάνω παράδειγμα, η “for-each” επανάληψη περνά από κάθε στοιχείο στον πίνακα GPU
και εκτυπώνει την τιμή του στην κονσόλα. Η μεταβλητή item
λαμβάνει κάθε στοιχείο στον πίνακα σε κάθε επανάληψη.
Για να δημιουργήσετε ένα πολυδιάστατο πίνακα, πρέπει να προσθέσετε κάθε πίνακα εντός των δικών του συνόλων αγκυλών:
int[][] numbers = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
Στο παραπάνω παράδειγμα, δημιουργείται ένας δισδιάστατος πίνακας με 3 σειρές και 3 στήλες. Κάθε σειρά είναι ένας πίνακας, και κάθε στοιχείο στον κύριο πίνακα περιέχει έναν πίνακα ακεραίων.
Για να προσπελάσετε ένα στοιχείο στον πολυδιάστατο πίνακα, χρησιμοποιήστε τον αντίστοιχο αριθμό δείκτη για κάθε διάσταση. Για παράδειγμα, για να προσπελάσετε το στοιχείο 5 στον πίνακα numbers
, μπορείτε να γράψετε:
int x = numbers[1][1];
Στο παραπάνω παράδειγμα, η πρώτη διάσταση (1) αναφέρεται στον δεύτερο πίνακα (4, 5, 6), και η δεύτερη διάσταση (1) αναφέρεται στο δεύτερο στοιχείο αυτού του πίνακα (5).
Μπορείτε επίσης να αλλάξετε την τιμή ενός στοιχείου στον πίνακα χρησιμοποιώντας τον αντίστοιχο δείκτη. Για παράδειγμα, για να αλλάξετε την τιμή του τελευταίου στοιχείου του πίνακα numbers
σε 10, μπορείτε να γράψετε:
numbers[2][2] = 10;
Στο παραπάνω παράδειγμα, η πρώτη διάσταση (2) αναφέρεται στην τρίτη σειρά του πίνακα, και η δεύτερη διάσταση (2) αναφέρεται στο τρίτο στοιχείο αυτής της σειράς.
Ναι, μπορούμε να χρησιμοποιήσουμε ένα for loop μέσα σε ένα άλλο for loop για να επιστρέψουμε τα στοιχεία ενός δισδιάστατου πίνακα (πρέπει ακόμη να δείξουμε τους δύο δείκτες):
int[][] numbers = { {1, 2}, {3, 4}, {5, 6} }; for (int i = 0; i < numbers.length; i++) { for (int j = 0; j < numbers[i].length; j++) { System.out.println(numbers[i][j]); } }
Στο παραπάνω παράδειγμα, ο πρώτος βρόχος for περιηγείται στις γραμμές του πίνακα, ενώ ο δεύτερος βρόχος for περιηγείται στα στοιχεία κάθε γραμμής. Έτσι, θα εμφανίσει τα παρακάτω στοιχεία:
1 2 3 4 5 6