Τα πίνακες χρησιμοποιούνται για να αποθηκεύουν πολλαπλές τιμές σε μια μόνο μεταβλητή, αντί να δηλώνονται ξεχωριστές μεταβλητές για κάθε τιμή.
Για να δηλώσετε έναν πίνακα, ορίστε τον τύπο της μεταβλητής με αγκύλες:
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; // Αποθήκευση του μήκους του πίνακα στη μεταβλητή arrayLength System.out.println("The array has " + arrayLength + " elements."); // Εκτύπωση μηνύματος που περιλαμβάνει το μήκος του πίνακα
Ο παραπάνω κώδικας περιέχει σχόλια για κάθε γραμμή, περιγράφοντας τι κάνει η κάθε εντολή. Ας τα αναλύσουμε:
int[] myNum = {10, 20, 30, 40};
: Δημιουργία ενός πίνακα με τέσσερις ακέραιες τιμές. Ο πίνακας ονομάζεταιmyNum
και περιέχει τις τιμές 10, 20, 30 και 40.int arrayLength = myNum.length;
: Αποθήκευση του μήκους του πίνακαmyNum
στη μεταβλητήarrayLength
. Η μέθοδοςlength
επιστρέφει τον αριθμό των στοιχείων του πίνακα.System.out.println("The array has " + arrayLength + " elements.");
: Εκτύπωση ενός μηνύματος στην κονσόλα. Το μήνυμα περιλαμβάνει το μήκος του πίνακαmyNum
, που αποθηκεύεται στη μεταβλητήarrayLength
. Η μέθοδοςprintln
χρησιμοποιείται για να εμφανίσει το μήνυμα, με τη χρήση του τελεστή+
για τη συνένωση των συμβολοσειρών και τη μεταβλητήarrayLength
.
Με τη βοήθεια της επανάληψης for
μπορείτε να περάσετε από τα στοιχεία ενός πίνακα. Η ιδιότητα length
χρησιμοποιείται για να καθορίσει πόσες φορές θα εκτελεστεί η επανάληψη, δηλαδή το μήκος του πίνακα.
Το ακόλουθο παράδειγμα εμφανίζει όλα τα στοιχεία στον πίνακα CPU
:
// Επανάληψη για κάθε στοιχείο του πίνακα CPU for (int i = 0; i < CPU.length; i++) { // Εκτύπωση του τρέχοντος στοιχείου του πίνακα CPU System.out.println(CPU[i]); }
Σο παραπάνω τμήμα κώδικα χρησιμοποιεί μια επανάληψη (for
) για να προσπελάσει και να εκτυπώσει κάθε στοιχείο του πίνακα CPU
. Η μεταβλητή i
χρησιμοποιείται ως μετρητής για την πρόοδο της επανάληψης και αρχικοποιείται στην τιμή 0. Η επανάληψη συνεχίζει εκτελούμενη όσο η μεταβλητή i
είναι μικρότερη από το μήκος του πίνακα CPU
. Σε κάθε επανάληψη, το τρέχον στοιχείο του πίνακα CPU
εκτυπώνεται στην οθόνη με τη χρήση της εντολής System.out.println()
.
Επίσης, υπάρχει η δυνατότητα να χρησιμοποιήσετε μια βελτιωμένη μορφή της επανάληψης for
, γνωστή ως “for-each” επανάληψη. Με αυτήν τη μορφή της επανάληψης for-each
, δεν απαιτείται η χρήση μιας μεταβλητής δείκτη, αλλά μπορείτε να περάσετε κάθε στοιχείο απευθείας στην επανάληψη.
Παρακάτω παρουσιάζεται η σύνταξη της “for-each” επανάληψης:
for (type variable : array) { // Σώμα της επανάληψης }
Σε αυτήν τη μορφή, η μεταβλητή variable
λαμβάνει την τιμή κάθε στοιχείου του πίνακα array
σε κάθε επανάληψη. Μπορείτε να χρησιμοποιήσετε απευθείας τη μεταβλητή variable
μέσα στο σώμα της επανάληψης για τις απαραίτητες ενέργειες που επιθυμείτε να πραγματοποιήσετε με κάθε στοιχείο.
[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} }; // Δημιουργία ενός δισδιάστατου πίνακα με τρείς υποπίνακες // Ο πρώτος υποπίνακας περιέχει τα στοιχεία 1 και 2 // Ο δεύτερος υποπίνακας περιέχει τα στοιχεία 3 και 4 // Ο τρίτος υποπίνακας περιέχει τα στοιχεία 5 και 6 for (int i = 0; i < numbers.length; i++) { // Επανάληψη για κάθε υποπίνακα στον πίνακα numbers for (int j = 0; j < numbers[i].length; j++) { // Επανάληψη για κάθε στοιχείο στον υποπίνακα numbers[i] System.out.println(numbers[i][j]); // Εκτύπωση του τρέχοντος στοιχείου } }
Ο παραπάνω κώδικας εκτελεί τις παρακάτω ενέργειες:
- Δημιουργεί έναν δισδιάστατο πίνακα με τρείς υποπίνακες.
- Χρησιμοποιεί δύο εμφωλευμένες δομές επανάληψης για να εξερευνήσει και να εκτυπώσει κάθε στοιχείο του πίνακα.
- Κατά τη διάρκεια κάθε επανάληψης, χρησιμοποιείται η μέθοδος
System.out.println()
για να εκτυπωθεί το τρέχον στοιχείο στην οθόνη. - Η εντολή
System.out.println()
εμφανίζει το στοιχείο και προχωρά σε μια νέα γραμμή μετά την εκτύπωση.
Έτσι, ο κώδικας εκτυπώνει τα στοιχεία του πίνακα σε διαδοχικές γραμμές της κονσόλας. Συγκεκριμένα, θα εκτυπωθούν οι αριθμοί 1, 2, 3, 4, 5 και 6, καθένας σε μια ξεχωριστή γραμμή.