מערך מונה (Counter Array)
מערך מונה סופר כמה פעמים כל ערך מופיע. האינדקס מייצג את הערך (או קטגוריה), והתוכן הוא מספר ההופעות.
דוגמה: ספירת ציונים
נניח שיש מערך ציונים בין 0 ל-100, ואנחנו רוצים לספור כמה תלמידים קיבלו כל ציון:
public static int[] countGrades(int[] grades) { int[] counter = new int[101]; // אינדקסים 0-100 for (int i = 0; i < grades.length; i++) { counter[grades[i]]++; } return counter; }
אחרי הריצה, counter[90] יכיל את מספר התלמידים שקיבלו 90.
דוגמה: ספירת ספרות
// כמה פעמים כל ספרה מופיעה במספר public static int[] countDigits(int num) { int[] counter = new int[10]; // ספרות 0-9 while (num > 0) { counter[num % 10]++; num /= 10; } return counter; }
מערך צובר (Accumulator Array)
מערך צובר צובר סכומים (או ערכים אחרים) לפי קטגוריות. במקום לספור הופעות, מצטברים ערכים.
דוגמה: סכום ציונים לפי כיתה
// students[i][0] = מספר כיתה (0-5), students[i][1] = ציון public static int[] sumByClass(int[][] students) { int[] sums = new int[6]; // 6 כיתות for (int i = 0; i < students.length; i++) { int classNum = students[i][0]; int grade = students[i][1]; sums[classNum] += grade; } return sums; }
דוגמה: הכנסות לפי חודש
// month: 1-12, amount: סכום public static double[] revenueByMonth(int[] months, double[] amounts) { double[] revenue = new double[13]; // אינדקסים 1-12 for (int i = 0; i < months.length; i++) { revenue[months[i]] += amounts[i]; } return revenue; }
השוואה – מונה מול צובר
| מערך מונה | מערך צובר | |
|---|---|---|
| מה עושים | סופרים הופעות | צוברים סכומים |
| פעולה | counter[x]++ | sums[x] += value |
| גודל מערך | טווח הערכים + 1 | מספר הקטגוריות |
| דוגמה | כמה תלמידים קיבלו 90 | סכום ציונים בכיתה א' |
שימוש בשילוב – ממוצע לפי קטגוריה
לפעמים צריך גם מונה וגם צובר כדי לחשב ממוצע:
public static double[] averageByClass(int[] classes, int[] grades) { int[] sums = new int[6]; int[] counts = new int[6]; for (int i = 0; i < classes.length; i++) { sums[classes[i]] += grades[i]; counts[classes[i]]++; } double[] avgs = new double[6]; for (int i = 0; i < 6; i++) { if (counts[i] > 0) avgs[i] = (double) sums[i] / counts[i]; } return avgs; }
שאלות נפוצות
באיזה גודל ליצור את מערך המונה?
גודל מערך המונה = טווח הערכים האפשריים + 1. למשל, אם ציונים בין 0 ל-100, צריך מערך בגודל 101.
מה קורה אם שוכחים לאתחל את מערך המונה?
ב-Java מערך int חדש מאותחל אוטומטית ל-0, אז אין בעיה. אבל חשוב לזכור את זה כעיקרון.
האם מערך מונה עובד רק עם int?
האינדקסים חייבים להיות int. אם הערכים שסופרים הם תווים, אפשר להשתמש בערך ה-ASCII כאינדקס, למשל counter['A'].