Я пытаюсь написать программу, которая просит пользователя ввести число, затем мне нужно создать метод под названием isPrime, чтобы создать расчет и распечатать результат в main. Я уверен, что мне не хватает чего-то небольшого, но я не могу получить точный результат.
public static void main(String[] args) {
System.out.print("Enter number: ");
int num = s.nextInt();
if (isPrime(num) == true) {
System.out.println("Number is prime");
} else if (isPrime(num) == false) {
System.out.println("Number is not prime");
}
}
public static boolean isPrime(int num){
for(int i = 2; i <= num/2; i++) {
if (num%i != 0) {
return true;
}
}
return false;
}




Вы должны изменить условие "if (num% i! = 0)" на if (num% i == 0)
См. Следующий код:
public class Prime {
public static void main(String[] args) {
int num = 29;
boolean flag = false;
for(int i = 2; i <= num/2; ++i)
{
// condition for nonprime number
if (num % i == 0)
{
flag = true;
break;
}
}
if (!flag)
System.out.println(num + " is a prime number.");
else
System.out.println(num + " is not a prime number.");
}
}
Используйте if и else (не проверяйте логическое условие повторно в первом случае). И не тестируйте == true в if. Этот
if (isPrime(num) == true)
{
System.out.println("Number is prime");
}
else if (isPrime(num) == false)
{
System.out.println("Number is not prime");
}
Просто должно быть
if (isPrime(num)) {
System.out.println("Number is prime");
} else {
System.out.pritnln("Number is not prime");
}
или даже что-то вроде
System.out.print("Number is ");
if (!isPrime(num)) {
System.out.print("not ");
}
System.out.println("prime");
Если вы хотите поставить фигурные скобки на отдельные линии, продолжайте. Что касается вашего метода isPrime; у вас есть обратные условия возврата (и тест тоже). Также мы можем его немного оптимизировать. Разверните первый четный тест, потому что тогда мы сможем пропустить все остальные элементы. Также нам нужно только проверить квадратный корень входного числа. Нравиться,
public static boolean isPrime(int num) {
if (num == 2) {
return true; // two is prime.
}
if (num < 1 || num % 2 == 0) {
return false; // all other even numbers are not prime.
}
for(int i = 3; i <= Math.sqrt(num); i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
Вам также необходимо проверить числа меньше единицы. Любое целое число, равное нулю или меньше, не является простым числом.
@flakes Достаточно честно.
Метод isPrime (int num) может потребоваться проверить, если num % i == 0, а не num % i != 0, потому что многие непростые числа пройдут условие и вернут истину.
Например, если вызывается isPrime(9), условное выражение проверит, является ли 9% 2! = 0, что истинно, и метод скажет, что 9 простое число, когда это не так.
В результате вы можете попробовать изменить метод на что-то вроде этого:
public static boolean isPrime(int num)
{
for(int i = 2; i <= num/2; i++)
{
if (num%i==0)
{
return false;
}
}
return true;
}
Посмотрите на свой if (num% i! = 0). Для num = 15 первая итерация даст истину, хотя это не простое число. Думаю об этом.