Загрузка данных


package by.student;

import java.util.Scanner;

public class Number {

    // Выводит чётные и нечётные числа
    public void Sort(Scanner input) {
        int[] numbers = readNumbers(input);

        System.out.print("Чётные числа: ");
        boolean foundEven = false;
        for (int number : numbers) {
            if (number % 2 == 0) {
                System.out.print(number + " ");
                foundEven = true;
            }
        }
        if (!foundEven) System.out.print("нет");

        System.out.print("\nНечётные числа: ");
        boolean foundOdd = false;
        for (int number : numbers) {
            if (number % 2 != 0) {
                System.out.print(number + " ");
                foundOdd = true;
            }
        }
        if (!foundOdd) System.out.print("нет");
        System.out.println();
    }

    // mode 1 — делятся на 3 или 9
    // mode 2 — делятся на 5 или 10
    // mode 3 — найти НОД и НОК
    public void Calculator(Scanner input, int mode) {
        int[] numbers = readNumbers(input);

        if (mode == 1) {
            System.out.print("Числа, которые делятся на 3 или 9: ");
            printDivisible(numbers, 3);
        } else if (mode == 2) {
            System.out.print("Числа, которые делятся на 5 или 10: ");
            printDivisible(numbers, 5);
        } else if (mode == 3) {
            printGcdAndLcm(numbers);
        } else {
            System.out.println("Неизвестный режим.");
        }
    }

    // Выводит простые числа
    public void SortPrimes(Scanner input) {
        int[] numbers = readNumbers(input);

        System.out.print("Простые числа: ");
        boolean found = false;

        for (int number : numbers) {
            if (isPrime(number)) {
                System.out.print(number + " ");
                found = true;
            }
        }

        if (!found) System.out.print("нет");
        System.out.println();
    }

    private int[] readNumbers(Scanner input) {
        int n;

        while (true) {
            System.out.print("Введите количество чисел N: ");

            while (!input.hasNextInt()) {
                System.out.print("Введите целое число: ");
                input.nextLine();
            }

            n = input.nextInt();

            if (n > 0) {
                break;
            }

            System.out.println("N должно быть больше нуля.");
        }

        int[] numbers = new int[n];

        for (int i = 0; i < n; i++) {
            System.out.print("Число " + (i + 1) + ": ");

            while (!input.hasNextInt()) {
                System.out.print("Введите целое число: ");
                input.next();
            }

            numbers[i] = input.nextInt();
        }

        return numbers;
    }

    private void printDivisible(int[] numbers, int divisor) {
        boolean found = false;

        for (int number : numbers) {
            if (number % divisor == 0) {
                System.out.print(number + " ");
                found = true;
            }
        }

        if (!found) System.out.print("нет");
        System.out.println();
    }

    private void printGcdAndLcm(int[] numbers) {
        long gcd = Math.abs((long) numbers[0]);
        long lcm = gcd;

        for (int i = 1; i < numbers.length; i++) {
            long value = Math.abs((long) numbers[i]);

            gcd = findGcd(gcd, value);

            if (lcm == 0 || value == 0) {
                lcm = 0;
            } else {
                lcm = Math.abs((lcm / findGcd(lcm, value)) * value);
            }
        }

        System.out.println("НОД: " + gcd);
        System.out.println("НОК: " + lcm);
    }

    private long findGcd(long a, long b) {
        while (b != 0) {
            long remainder = a % b;
            a = b;
            b = remainder;
        }
        return a;
    }

    private boolean isPrime(int number) {
        if (number < 2) return false;

        for (int i = 2; i <= number / i; i++) {
            if (number % i == 0) return false;
        }

        return true;
    }
}