מערך מערכים

ש: כיצד אוכל להשתמש במערך מערכים?

א:

מחרוזת s = מחרוזת חדשה ("שלום, עולם"); // s הוא הפניה למחרוזת, המתייחסת לאובייקט // מחרוזת עם הערך "שלום עולם." s = מחרוזת חדשה ("Guten Tag, Welt"); // אותה התייחסות מחרוזת s מתייחסת כעת // לאובייקט מחרוזת אחר; כלומר // הפניה אחת התייחסה לשני // עצמים שונים (ברצף). // (שימו לב שיש לנו כעת אובייקט String // עם הערך "Hello, World", שאין בו // הפניות; לכן אובייקט זה כשיר // לאיסוף אשפה) String t; // t הוא הפניה למחרוזת עם ערך null // (לא מתייחס לאף אובייקט). // אם אתה מנסה להשתמש ב- t בנקודה זו, למשל על ידי // אומר int len ​​= t.length; תקבל // NullPointerException (צריך להיקרא // NullReferenceException). t = s;// התייחסות מחרוזת t מתייחסת כעת לאותו // אובייקט המכונה על ידי הפניה למחרוזת s, // כלומר אובייקט מחרוזת עם הערך "Guten Tag, Welt". // אז הנה לנו שתי // הפניות לאובייקט יחיד (במקביל).

מערכים בג'אווה הם עצמים בפני עצמם, בין אם הם מכילים פרימיטיבים ( ints, chars, booleans, וכן הלאה) ובין אם הם מכילים אובייקטים אחרים. המשמעות היא שמכנים מערכים כמו כל אובייקט אחר, בתוספת []סמנטיקה של צבירה / הפרשות. הנה דוגמה:

מחרוזת [] sa; // sa הוא הפניה אפסית // מנסה לגשת ל- sa.length גורם ל- NullPointerException. sa = מחרוזת חדשה [2]; // sa אינו עוד הפניה לאפס, הוא מתייחס לאובייקט // ספציפי שהוא מערך של שני הפניות מחרוזת null. // sa.length שווה כעת ל- 2 // (sa [0] ו- sa [1] הם שני אזכורי המחרוזת האפסיים). sa [0] = "שלום עולם"; sa [1] = "Guten Tag, Welt"; // עכשיו sa מתייחס למערך של שני הפניות מחרוזת שאינן אפס. sa = מחרוזת חדשה [1]; // sa.length שווה ל- 1 // אותה התייחסות sa מתייחסת כעת למערך אחר // (וקצר). // sa [0] הוא הפניה למחרוזת null // שמנסה לגשת ל- sa [1] גורם // ArrayIndexOutOfBoundsException. sa [0] = "שלום עולם"; // sa [0] אינו כעת אפס.

ניתן לענות על שאלתך לגבי מערכים על ידי התחשבות בכך

מחרוזת [] [] saa; saa [0] [0] = "עזרה";

יגרום ל- a NullPointerException, משום saaשהוא התייחסות אפס - כלומר, saaאינו מתייחס לאף אובייקט. על מנת להקצות ערך לאלמנט הראשון של המערך הראשון, saaעליו להתייחס למערך של אורך גדול מאפס, saa[0]ועליו להתייחס למערך מחרוזות לא אורך שאורכו גדול מאפס. אז אפשר להתחיל באומרו:

מחרוזת [] [] saa; // saa הוא התייחסות אפס למערך של מערכי מחרוזות // ניסיון saa.length כבר גורם ל- NullPointerException, // כמו שניסיון saa [0] עושה. saa = מחרוזת חדשה [1] []; // saa מתייחס כעת למערך של התייחסות null אחת למחרוזת []. // saalength שווה ל- 1. // saa [0] הוא null. saa [0] = מחרוזת חדשה [2]; // saa מתייחס כעת למערך של 1 התייחסות שאינה אפס // למחרוזת [] באורך 2. // saalength עדיין שווה ל- 1. // saa [0] .length שווה ל- 2 (אבל saa [0] [0] ו- // saa [0] [1] שניהם אפסים). saa [0] [0] = "שלום עולם"; saa [0] [1] = "תג גוט, וולט"; // עכשיו saa [0] [0] ו- saa [0] [1] שניהם אינם אפסים.

שים לב שאתה לא יכול להתייחס אליו saa[0][0]עד saa[0]שאינו רציני, ואינך יכול לעשות saa[0]אפס עוד לפני שאתה עושה saaאפס. בעיקרון, עליכם לבנות את מערך המערכים שלכם באופן הדרגתי.

יש קיצור קל לשימוש לאתחול הפניות למערך:

String [] [] saa = {{{"Hello, World}, {" Guten Tag, Welt "}}}; // זה יוצר אובייקט String [] [] כמו זה שנוצר // למעלה, ומקצה saa ל התייחס לאובייקט זה. // המרחב הלבן נועד להדגיש כי האובייקט // שנוצר הוא מערך של מחרוזת אחת [] המכילה // שני מחרוזות. 

בעזרת קיצור זה, ניתן לכתוב את הדוגמה שלנו כראוי:

מחרוזת [] [] saa = {{{"עזרה"}}}; 

עם זאת, הדבר גורם saaלהתייחסות למערך מחרוזות אחד אחד. שים לב שהתחביר שלמעלה פועל רק בעת אתחול הפניה למערך (אתחול הוא המקרה המיוחד של ההקצאה בזמן ההכרזה). הדרך הכללית יותר ליצור מערך חדש ולהקצות אותו להפניה חדשה או קיימת למערך נראית כך (במקרה של הפניה קיימת):

saa = מחרוזת חדשה [] [] {// שים לב לריק [] [] - המהדר מציג את // הגודל החוצה (נדרש ריק [] []). {{"שלום"}, {"עולם"}} // זה saa [0], // שימו לב לפסיק המפריד בין saa [0] לבין saa [1] {{"Guten Tag"}, {"Welt"} } // זה saa [1]}; // עכשיו saalength = 2, וגם saa [0] ו- saa [1] לכל אורך 2
מחשוב הליכה אקראי הוא בוטיק הייעוץ הגדול ביותר ב- Java / CORBA בניו יורק, ומתמקד בפתרונות עבור הארגון הפיננסי. יועצי Random Walk ידועים במומחיותם המובילה בג'אווה, ומפרסמים ומדברים על ג'אווה בכמה מהפורומים המכובדים ביותר בעולם.

סיפור זה, "מערך מערכים" פורסם במקור בהוצאת JavaWorld.