2017-12-02 120 views
1
package checkPrime; 

import java.util.Scanner; 

public class CheckPrime { 

    public static void main(String[] args) { 

     boolean isPrime = true; 

     Scanner scanner = new Scanner(System.in); 

     System.out.print("Enter a number: "); 
     int n = scanner.nextInt(); 

     scanner.close(); 

     for (int i = 2; i < n; i++) { 

      if (n % i == 0) { 

       isPrime = false; 

      } 

     } 

     if (isPrime = false || n == 1) { 

      System.out.print(n + " is not prime."); 

     } else { 

      System.out.print(n + " is prime."); 

     } 

    } 

} 

所以我写了这个程序来检查一个数字是否为素数,并且它工作正常,但是我在声明了布尔型“isPrime”的行上得到这个错误:“本地变量isPrime的值未被使用“。它不影响我的程序的功能,但我想知道是否有任何方法可以让它消失。“本地变量的值未使用。”

+1

通过执行'isPrime = false',您不检查值,您将其初始化。将其更改为'isPrime == false'或'!isPrime' – Squiddie

+0

使用'=='比较值;一个'='是**赋值**。所以'if(isPrime = false || n == 1)'是错误的,它必须是:'if(isPrime == false || n == 1)',甚至更好的是:'if(!isPrime || n == 1)'。 – Jesper

回答

0

if说法是错误的 - 你正在使用的=运营商分配falseisPrime,而不是检查,如果它是false==操作:

if (isPrime == false || n == 1) { 
    // Here-^ 
    System.out.print(n + " is not prime."); 
} else { 
    System.out.print(n + " is prime."); 
} 

或者,由于isPrimeboolean,只是对其进行评估直接:

if (!isPrime || n == 1) { 
    // Here^ 
    System.out.print(n + " is not prime."); 
} else { 
    System.out.print(n + " is prime."); 
} 
1

你在这里犯了一个错误:

if (isPrime = false || n == 1) { 

它应该是:发生

if (isPrime == false || n == 1) { 
      ^^ 
     double equals! 

的警告,因为没有双等号,你需要将其与false比较分配给isPrime代替。如果你这样做,那么在整个程序中,你只分配到isPrime,但从未使用过它的值。

顺便说一下,赋值语句的赋值是赋值给它的,所以isPrime = false总是会计算为false。这也是编译器没有警告你使用=的原因。

+0

要特别注意...为了避免这种错误,请始终反向测试:'false == isPrime',这样如果您不小心使用了一个'=','false = isPrime'会生成编译器错误,而'isPrime = false'编译并运行,但不能按需要执行。 –