Java-программа для простой факторизации печатает слишком много - PullRequest
0 голосов
/ 23 декабря 2018

В школе мне дали решить проблему, которая выглядит следующим образом:

Напишите программу, которая читает положительное целое число больше 1, а затем печатает главные факторы числа при увеличениипорядок.Если число простое, распечатайте это число, за которым следует утверждение о том, что оно простое, как показано в одном из примеров.

Итак, я написал эту программу, и она ожидала поведениякогда я ставлю фактическое простое число.Если я введу 97, на выходе будет «97 - простое число».как и предполагалось.

Но когда я ввожу 120, он печатает «2 2 2 3 5 - простое число», где ожидаемое поведение будет заключаться только в печати чисел, а не в тексте «это простое число».

Метод, который проверяет, является ли входное число простым числом, и, если это так, печатает его множители:

public static void primeFactors(int n) {

    while (n % 2 == 0) {
        System.out.print(2 + " ");
        n = n/2;
    }

    for (int i = 3; i <= Math.sqrt(n); i = i+2) {
        while (n % i == 0) {
            System.out.print(i + " ");
            n = n/i;
        }
    }

    if (n > 2) {
        System.out.print(n + " is a prime number.");
    }
}

Основной метод:

public static void main (String [] args) {

Scanner reader = new Scanner(System.in);
    int n = reader.nextInt();
    primeFactors(n);
}

Поэтому мне нужна помощь, чтобы выяснить, как сделать так, чтобы "было простым числом".окончание печатается ТОЛЬКО, когда введенное число определенно является простым числом.

Ответы [ 3 ]

0 голосов
/ 23 декабря 2018

Я попытался создать метод, чтобы проверить, является ли число простым числом.Выглядело это так:

private static boolean isPrime(int n) {

if (n <= 1) {
  return false;
}

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

Но это также напечатало предложение в конце ..: /

0 голосов
/ 23 декабря 2018

Вы можете сохранить параметр n в переменной, чтобы сохранить его.

int input = n;

Затем в конце измените свой вывод на следующее:

if (n > 2) {
    System.out.print(n);
}
if (n == input) {
    System.out.print(" is a prime number.");
}
0 голосов
/ 23 декабря 2018

Я уверен, что если вы поиграете с ним немного больше, вы найдете ответ, но здесь вы идете: я бы написал метод public static boolean isPrime(int n), а затем:

if (isPrime(n)) {
        System.out.print(bla bla bla...);
} else {
    print here factors
}

Другой вариант (что немного уродливо - это «помнить», если вы нашли фактор: обратите внимание на boolean foundFactor и его использование:

public static void primeFactors(int n) {
boolean foundFactor = false;
while (n % 2 == 0) {
    foundFactor = true
    System.out.print(2 + " ");
    n = n/2;
}

for (int i = 3; i <= Math.sqrt(n); i = i+2) {
    while (n % i == 0) {
    foundFactor = true
        System.out.print(i + " ");
        n = n/i;
    }
}

if (n > 2 && !foundFactor) {
    System.out.print(n + " is a prime number.");
}

}

...