מערכים
מה זה מערך?
מערך (array) הוא אוסף של ערכים מאותו טיפוס, מאוחסנים בזיכרון רציף. הגישה לערך במערך היא מיידית דרך אינדקס (מיקום).
חשוב לזכור: מערכים ב-Java הם באורך קבוע. אחרי שיצרת מערך בגודל 10, לא ניתן להגדיל אותו.
הכרזה ויצירה
הכרזה
int[] numbers; // מומלץ
// או
int numbers[]; // חוקי אבל פחות נפוץ
יצירה - גודל ידוע
int[] numbers = new int[5];
נוצר מערך באורך 5, כל התאים מאותחלים ל-0 (ברירת מחדל של int).
יצירה - עם ערכים
int[] numbers = {10, 20, 30, 40, 50};
או בצורה המלאה:
int[] numbers = new int[]{10, 20, 30, 40, 50};
גישה לאיברים
int[] numbers = {10, 20, 30, 40, 50};
int first = numbers[0]; // 10
int last = numbers[4]; // 50
numbers[2] = 99; // שינוי ערך
זכרו: האינדקס הראשון הוא 0, לא 1! מערך בגודל 5 יש לו אינדקסים 0, 1, 2, 3, 4.
אורך המערך
int[] numbers = {10, 20, 30};
int len = numbers.length; // 3
שימו לב: length הוא שדה (בלי סוגריים), בניגוד למחרוזת שבה
length() הוא פונקציה.
מעבר על מערך
עם for רגיל
int[] numbers = {10, 20, 30, 40, 50};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}
עם for-each
for (int n : numbers) {
System.out.println(n);
}
ArrayIndexOutOfBoundsException
אם תנסו לגשת לאינדקס מחוץ לתחום - תקבלו חריגה:
int[] numbers = {1, 2, 3};
int x = numbers[5]; // ArrayIndexOutOfBoundsException!
ברירות מחדל
כשיוצרים מערך עם new, התאים מקבלים ערכי ברירת מחדל:
| טיפוס | ברירת מחדל |
|---|---|
int, long, short, byte |
0 |
float, double |
0.0 |
char |
'\u0000' |
boolean |
false |
אובייקטים (String וכו') |
null |
מערך של מחרוזות
String[] names = {"אורי", "דוד", "רחל"};
System.out.println(names[0]); // אורי
מערכים דו-ממדיים
מערך של מערכים - שימושי לטבלאות, לוחות משחק וכו':
הכרזה
int[][] matrix = new int[3][4]; // 3 שורות, 4 עמודות
עם ערכים
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
גישה
int cell = matrix[1][2]; // 6 (שורה 1, עמודה 2)
matrix[0][0] = 100;
מעבר על מערך דו-ממדי
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
או עם for-each:
for (int[] row : matrix) {
for (int value : row) {
System.out.print(value + " ");
}
System.out.println();
}
מחלקת Arrays - פעולות שימושיות
import java.util.Arrays;
int[] numbers = {5, 2, 8, 1, 9};
// מיון
Arrays.sort(numbers); // {1, 2, 5, 8, 9}
// הדפסה
System.out.println(Arrays.toString(numbers)); // [1, 2, 5, 8, 9]
// מילוי
int[] zeros = new int[10];
Arrays.fill(zeros, 0);
// העתקה
int[] copy = Arrays.copyOf(numbers, numbers.length);
int[] partial = Arrays.copyOfRange(numbers, 1, 4);
// השוואה
boolean equal = Arrays.equals(numbers, copy);
דוגמה: מציאת המספר הגדול ביותר
int[] numbers = {23, 45, 12, 67, 34, 89, 5};
int max = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
System.out.println("הגדול ביותר: " + max);
דוגמה: היפוך מערך
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length / 2; i++) {
int temp = numbers[i];
numbers[i] = numbers[numbers.length - 1 - i];
numbers[numbers.length - 1 - i] = temp;
}
System.out.println(Arrays.toString(numbers)); // [5, 4, 3, 2, 1]
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
מה האינדקס של האיבר האחרון במערך בגודל 5?
הצגת התשובה
תשובה ב. האינדקסים מתחילים ב-0, ולכן במערך בגודל 5 הם 0 עד 4.
-
איך מקבלים את אורך המערך
arr?הצגת התשובה
תשובה ד. length במערך הוא שדה, בלי סוגריים. ב-String זו מתודה: length().
-
מה קורה כשניגשים ל-
arr[10]במערך בגודל 5?הצגת התשובה
תשובה ד. Java בודקת גבולות בזמן ריצה וזורקת חריגה על אינדקס לא חוקי.