// 08_Arrays.java - עבודה עם מערכים

import java.util.Arrays;

public class ArraysExample {
    public static void main(String[] args) {
        // יצירת מערך עם גודל קבוע
        int[] empty = new int[5];
        System.out.println("מערך ריק: " + Arrays.toString(empty));

        // יצירה עם ערכים
        int[] numbers = {10, 20, 30, 40, 50};
        System.out.println("מערך מוגדר: " + Arrays.toString(numbers));

        // גישה ואורך
        System.out.println("הראשון: " + numbers[0]);
        System.out.println("האחרון: " + numbers[numbers.length - 1]);
        System.out.println("אורך: " + numbers.length);

        // שינוי ערך
        numbers[2] = 999;
        System.out.println("אחרי שינוי: " + Arrays.toString(numbers));

        // מעבר עם for רגיל
        System.out.println("\nמעבר עם for:");
        for (int i = 0; i < numbers.length; i++) {
            System.out.println("[" + i + "] = " + numbers[i]);
        }

        // מעבר עם for-each
        System.out.println("\nמעבר עם for-each:");
        for (int n : numbers) {
            System.out.println(n);
        }

        // מציאת מקסימום ומינימום
        int[] values = {23, 45, 12, 67, 34, 89, 5};
        int max = values[0];
        int min = values[0];
        for (int v : values) {
            if (v > max) max = v;
            if (v < min) min = v;
        }
        System.out.println("\nmax: " + max + ", min: " + min);

        // חישוב ממוצע
        int sum = 0;
        for (int v : values) sum += v;
        double avg = (double) sum / values.length;
        System.out.println("ממוצע: " + avg);

        // מיון
        int[] toSort = {5, 2, 8, 1, 9, 3};
        Arrays.sort(toSort);
        System.out.println("\nממוין: " + Arrays.toString(toSort));

        // העתקה
        int[] copy = Arrays.copyOf(numbers, numbers.length);
        System.out.println("עותק: " + Arrays.toString(copy));

        // מערך דו-ממדי
        System.out.println("\n--- מערך דו-ממדי ---");
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        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();
        }

        // מערך של מחרוזות
        String[] names = {"אורי", "דוד", "רחל"};
        for (String name : names) {
            System.out.println("שלום " + name);
        }

        // היפוך מערך
        int[] toReverse = {1, 2, 3, 4, 5};
        for (int i = 0; i < toReverse.length / 2; i++) {
            int tmp = toReverse[i];
            toReverse[i] = toReverse[toReverse.length - 1 - i];
            toReverse[toReverse.length - 1 - i] = tmp;
        }
        System.out.println("\nהפוך: " + Arrays.toString(toReverse));
    }
}
