Проверьте, является ли данное число простым или нет? - PullRequest
0 голосов
/ 07 апреля 2020

Я новичок в java, и я написал код, чтобы проверить, является ли данный массив чисел простым или нет, но проблема в том, что когда число не является простым числом, вывод этого числа отображает «Prime» и "Не премьер" оба ответа. Можете ли вы помочь мне решить эту проблему? Вот мой код.

    Scanner scan = new Scanner(System.in);
    int number = scan.nextInt();
    int[] arr = new int[number];
    for (int i = 0; i < number; i++) {
        arr[i] = scan.nextInt();

    }

    for (int i = 0; i < number; i++) {
        int num = arr[i];
        for (int j = 2; j <= Math.sqrt(num); j++) {
            if (num % j == 0 && num !=2) {
                System.out.println(num + "Not prime");
                break;
            }
        }
        System.out.println(num +"Prime");
    }

Ответы [ 4 ]

2 голосов
/ 07 апреля 2020

Если вы заинтересованы в том, чтобы сделать ваш код немного более эффективным, вы можете go этот маршрут.

int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
        15, 16, 17, 18, 19, 20 };
for (int num : numbers) {
    System.out.println(num + ((isPrime(num) ? " is" : " is not") + " a prime"));
}       

private static boolean isPrime(int num) {
    // two is a prime
    if (num == 2) {
       return true;
    }
    // numbers 1 or less or any even 
    // number (sans 2) are not primes
    if (num <= 1 || num % 2 == 0) {
        return false;
    }
    // Now you can check for odd divisors.
    // and increment by 2 starting with 3.
    for (int i = 3; i <= Math.sqrt(num); i+=2) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}
1 голос
/ 07 апреля 2020

Используйте логическое значение для отслеживания, является ли число простым. Предположим, что это правда (простое) для начала, и установите его как ложное, если обнаружено, что оно не простое.

boolean isPrime = true;

После этого определите сообщение на основе этого логического значения.

String message = isPrime ? "Prime" : "Not prime";
1 голос
/ 07 апреля 2020

Вы должны помнить, было ли число простым или нет. Ваш код этого не делает, поэтому оба отпечатка достигнуты.

Scanner scan = new Scanner(System.in);
int number = scan.nextInt();
int[] arr = new int[number];
for (int i = 0; i < number; i++) {
    arr[i] = scan.nextInt();

}

for (int i = 0; i < number; i++) {
    int num = arr[i];
    boolean isPrime = true;

    for (int j = 2; j <= Math.sqrt(num); j++) {
        if (num % j == 0 && num !=2) {
            isPrime = false;
            break;
        }
    }

    if (isPrime) {
        System.out.println(num +"Prime");
    } else {
        System.out.println(num + "Not prime");
    }

}
0 голосов
/ 07 апреля 2020

Вы можете исправить это, например, введя логическую переменную:

    for (int i = 0; i < number; i++) {
        int num = arr[i];
        boolean isPrime = true;
        for (int j = 2; j <= Math.sqrt(num); j++) {
            if (num % j == 0 && num !=2) {
                isPrime = false;
                break;
            }
        }
        if (isPrime) {
           System.out.println(num +"Prime");
        } else {
           System.out.println(num + "Not prime");
        } 
    }
...