Προγραμματισμός

Σειρά συστοιχιών

Ε: Πώς μπορώ να χρησιμοποιήσω μια σειρά από πίνακες;

ΕΝΑ:

String s = new String ("Γεια, Κόσμος"); Το // s είναι μια αναφορά συμβολοσειράς, η οποία αναφέρεται σε ένα αντικείμενο // συμβολοσειράς με τιμή "Γεια, Κόσμος". s = νέα συμβολοσειρά ("Guten Tag, Welt"); // Η ίδια αναφορά String αναφέρεται τώρα // σε διαφορετικό αντικείμενο String. δηλαδή, // μία μόνο αναφορά έχει αναφερθεί σε δύο // διαφορετικά αντικείμενα (διαδοχικά). // (Σημειώστε ότι έχουμε τώρα ένα αντικείμενο String // με την τιμή "Hello, World", το οποίο δεν έχει // αναφορές. Επομένως, αυτό το αντικείμενο είναι κατάλληλο // για συλλογή απορριμμάτων) String t; // t είναι μια αναφορά συμβολοσειράς με μηδενική τιμή // (δεν αναφέρεται σε κανένα αντικείμενο). // Εάν προσπαθήσετε να χρησιμοποιήσετε το t σε αυτό το σημείο, π.χ. από // λέγοντας int len ​​= t.length; θα λάβετε ένα // NullPointerException (θα πρέπει να ονομάζεται // NullReferenceException). t = s; // Η αναφορά String t αναφέρεται τώρα στο ίδιο // αντικείμενο που αναφέρεται από το String Reference s, // δηλαδή ένα αντικείμενο String με την τιμή "Guten Tag, Welt". // Λοιπόν, εδώ έχουμε δύο // αναφορές σε ένα αντικείμενο (ταυτόχρονα). 

Οι πίνακες στην Java είναι αντικείμενα από μόνα τους, είτε περιέχουν πρωτόγονες (intμικρό, απανθρακώνωμικρό, booleans και ούτω καθεξής) ή περιέχουν άλλα αντικείμενα. Αυτό σημαίνει ότι οι πίνακες αναφέρονται όπως οποιοδήποτε άλλο αντικείμενο, με την προσθήκη του [] Σημασιολογία συσσωμάτωσης / διαφωνίας. Ακολουθεί ένα παράδειγμα:

Συμβολοσειρά [] sa; // sa είναι μια μηδενική αναφορά // η προσπάθεια πρόσβασης στο sa.length προκαλεί μια NullPointerException. sa = νέα συμβολοσειρά [2]; Το // sa δεν είναι πλέον μηδενική αναφορά, αναφέρεται σε ένα συγκεκριμένο αντικείμενο // που είναι ένας πίνακας δύο αναφορών String null. // sa.length είναι τώρα ίσο με 2 // (sa [0] και sa [1] είναι οι δύο αναφορές String null) sa [0] = "Γεια, Κόσμος"; sa [1] = "Guten Tag, Welt"; // Τώρα sa αναφέρεται σε μια σειρά από δύο μη μηδενικές αναφορές String. sa = νέα συμβολοσειρά [1]; // sa.length ισούται με 1 // Η ίδια αναφορά sa τώρα αναφέρεται σε διαφορετικό πίνακα // (και μικρότερο). // sa [0] είναι μια μηδενική αναφορά συμβολοσειράς // που προσπαθεί να αποκτήσει πρόσβαση στο sa [1] προκαλεί μια // ArrayIndexOutOfBoundsException. sa [0] = "Γεια, Κόσμος"; // sa [0] είναι πλέον μηδενικό. 

Μπορείτε να απαντήσετε στην ερώτησή σας σχετικά με τους πίνακες

Συμβολοσειρά [] [] saa; saa [0] [0] = "Βοήθεια"; 

θα προκαλέσει α NullPointerException, επειδή σάα είναι μηδενική αναφορά - δηλαδή, σάα δεν αναφέρεται σε κανένα αντικείμενο. Για να εκχωρήσετε μια τιμή στο πρώτο στοιχείο του πρώτου πίνακα, σάα πρέπει να αναφέρεται σε μια σειρά με μήκος μεγαλύτερο από το μηδέν και σάα [0] πρέπει να αναφέρεται σε μια μη κενή συστοιχία συμβολοσειρών, το μήκος της οποίας είναι επίσης μεγαλύτερο από το μηδέν. Έτσι, θα μπορούσε κανείς να ξεκινήσει λέγοντας:

Συμβολοσειρά [] [] saa; // saa είναι μια μηδενική αναφορά σε έναν πίνακα συστοιχιών συμβολοσειράς // Η δοκιμή του saa.length προκαλεί ήδη ένα NullPointerException, // όπως προσπαθεί το saa [0]. saa = νέα συμβολοσειρά [1] []; Το // saa αναφέρεται τώρα σε έναν πίνακα 1 μηδενικής αναφοράς σε μια συμβολοσειρά []. // saa το μήκος είναι ίσο με 1. // saa [0] είναι null. saa [0] = νέα συμβολοσειρά [2]; Το // saa αναφέρεται τώρα σε έναν πίνακα 1 μη μηδενικής αναφοράς // σε μια συμβολοσειρά [] μήκους 2. // saa το μήκος εξακολουθεί να ισούται με το 1. // saa [0]. το μήκος είναι ίσο με 2 (αλλά saa [0] [0] και // saa [0] [1] είναι και τα δύο μηδενικά). saa [0] [0] = "Γεια σας, Κόσμος"; saa [0] [1] = "Guten Tag, Welt"; // Τώρα το saa [0] [0] και το saa [0] [1] είναι και τα δύο μηδενικά. 

Παρατηρήστε ότι δεν μπορείτε να αναφερθείτε saa [0] [0] μέχρι σάα [0] είναι μηδενικό και δεν μπορείτε να κάνετε σάα [0] μηδέν μέχρι να το κάνετε σάα μηδεν. Βασικά, πρέπει να δημιουργήσετε σταδιακά τη σειρά των συστοιχιών σας.

Υπάρχει μια εύχρηστη στενογραφία για την προετοιμασία των αναφορών πίνακα:

String [] [] saa = {{{"Hello, World}, {" Guten Tag, Welt "}}}; // δημιουργεί ένα αντικείμενο String [] [] όπως αυτό που δημιουργήθηκε // παραπάνω και εκχωρεί saa σε Ανατρέξτε σε αυτό το αντικείμενο. // Ο κενός χώρος προορίζεται να τονίσει ότι το // αντικείμενο που δημιουργήθηκε είναι ένας πίνακας μιας συμβολοσειράς [] που // περιέχει δύο συμβολοσειρές. 

Χρησιμοποιώντας αυτό το στενό, το παράδειγμά μας θα μπορούσε να γραφτεί σωστά ως:

Συμβολοσειρά [] [] saa = {{{"Βοήθεια"}}}; 

Ωστόσο, αυτό ισχύει σάα Ανατρέξτε σε έναν έναν προς έναν πίνακα συμβολοσειρών. Σημειώστε ότι η παραπάνω σύνταξη λειτουργεί μόνο κατά την προετοιμασία μιας αναφοράς πίνακα (η προετοιμασία είναι η ειδική περίπτωση ανάθεσης κατά τη στιγμή της δήλωσης). Ο πιο γενικός τρόπος για να δημιουργήσετε έναν νέο πίνακα και να τον αντιστοιχίσετε σε μια νέα ή υπάρχουσα αναφορά πίνακα μοιάζει με αυτόν (στην περίπτωση μιας υπάρχουσας αναφοράς):

saa = new String [] [] {// σημειώστε το κενό [] [] - ο μεταγλωττιστής υπολογίζει το // μέγεθος έξω (απαιτείται κενό [] []). {{"Γεια", {"World"}} // αυτό είναι saa [0], // σημειώστε το κόμμα που διαχωρίζει το saa [0] και το saa [1] {{"Guten Tag"}, {"Welt"} } // αυτό είναι saa [1]}; // τώρα saa.length = 2 και saa [0] και saa [1] επίσης το καθένα έχει μήκος 2 
Το Random Walk Computing είναι η μεγαλύτερη μπουτίκ συμβούλων Java / CORBA στη Νέα Υόρκη, με έμφαση σε λύσεις για την οικονομική επιχείρηση. Γνωστοί για την κορυφαία τεχνογνωσία Java, οι σύμβουλοι Random Walk δημοσιεύουν και μιλούν για την Java σε μερικά από τα πιο σεβαστά φόρουμ στον κόσμο.

Αυτή η ιστορία, "Array of arrays" δημοσιεύθηκε αρχικά από το JavaWorld.