2015-03-06 2 views
-1

Я получаю сообщение об ошибке отсутствия (32) при компиляции, и я не уверен, почему. Какие-нибудь советы?IsPrime? - missing return statement

Я думал, что статус возврата был моим заявлением о возврате.

import java.util.Scanner; 

public class PrimeChecker 
{ 
    public static void main(String[] args) 
    { 
    int number; 
    Scanner keyboard = new Scanner(System.in); 

    System.out.print("Enter a number: "); 
    number = keyboard.nextInt(); 

    if (isPrime(number)) 
     System.out.println("Your number is not prime."); 
    else 
     System.out.println("Your number is prime."); 
    } 

    public static boolean isPrime(int number) 
    {  

    for (int i = 2; i < number; i++) 
    { 
     boolean status; 

     if (number % i == 0) 
      status = true; 
     else 
      status = false; 
     return status; 
    } 
    } 

} 
+3

Подумайте, что произойдет, если число равно 0. – assylias

ответ

0

Добавить ложное возвращение в конце. Потому что, если ваш number меньше 2 для блока не будет работать, так что вы должны иметь оператор возврата из ряда для блока

public static boolean isPrime(int number) 
{  

for (int i = 2; i < number; i++) 
{ 
    boolean status; 

    if (number % i == 0) 
     status = true; 
    else 
     status = false; 
    return status; 
} 
if(number==2){ 
    return true; 
} 
return false 
} 
+0

Спасибо! Итак, если возвращение в конце истинно, тогда скажите, что пользователь вводит 1, он будет возвращаться как не простой? – zerrisk

+0

он покажет 1 как не простой, но он покажет 2 также как не просто – Burusothman

2

Вы должны добавить оператор возврата после цикла:

public static boolean isPrime(int number) 
    {  

    for (int i = 2; i < number; i++) 
    { 
     boolean status; 

     if (number % i == 0) 
      status = true; 
     else 
      status = false; 
     return status; 
    } 
    return false; 
    } 

Поскольку метод должен возвращать значение, если ваш цикл никогда не выполняется.

Но ваш цикл никогда не заканчивался после первого значения, потому что вы возвращаетесь в каждом случае.

+0

Большое вам спасибо! – zerrisk

0

Вы должны поставить инструкцию return в конце функции. Вы добавили возврат в for loop.

public static boolean isPrime(int number) { 
    for (int i = 2; i < number; i++){ 
     boolean status; 

     if (number % i == 0) 
      status = true; 
     else 
      status = false; 
     return status; 
    } 
    return false; 
} 
+0

Большое спасибо! – zerrisk

0

Во-первых, эта функция не является простым контролером числа: алгоритм будет закончен после первой итерации. Эта функция будет простой проверки числа, если и только если i==number&&number%i==0. Извлечь status переменную от цикла и поместить ее в конце функции. Удерживайте в памяти: полное сканирование числа неэффективно.

0

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

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

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

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