2014-12-21 29 views
2

我试图做一个函数来给出最接近的素数,输入的人数,我没有成功。顺便说一下,我现在开始编程,并为循环混淆了我,任何提示? 这里的代码如下:我不能让这个函数给我所有的素数

public static void main(String[] args) { 
     // Entry Mechanism 
     Scanner input = new Scanner(System.in); 

     // Variables 
     int n1, biggestPrime; 

     System.out.print("Number: "); 
     n1 = input.nextInt(); 

     biggestPrime = biggestPrime(n1); 

    } 

    public static int biggestPrime(int n1) { 
     int biggestPrime = 0; 
     boolean isPrime = true; 

     if (n1 < 0) 
      return 0; 

     for (int i = n1; i == 0 && isPrime == false; i--) { 
      if (i % n1 == 0) { 

       isPrime = false; 
      } 
     } 
     return biggestPrime; 
    } 
+2

你期望你的函数返回,你认为哪一行代码会发生这种情况? – SLaks

+0

*最接近的*表示“x <=数字”?因为这不是最接近的,但这就是你正在做的... –

+1

Hmn,'isPrime'是真的,for循环希望'isPrime'是假的,那永远不会发生......尝试使'isPrime'假默认('boolean isPrime = false') – Charlie

回答

2

我认为,你会不会试图找到一个素数的最大素数...

public static void main(String[] args) { 
    // Entry Mechanism 
    Scanner input = new Scanner(System.in); 

    // Variables 
    int n1, biggestPrime; 

    System.out.print("Number: "); 
    n1 = input.nextInt(); 

    biggestPrime = biggestPrime(n1); 

} 

public static int biggestPrime(int n1) { 
    int biggestPrime = 0; 
    int num_max = 100000; 

    if (n1 < 0) { 
     return 0; 
    } 
    else { 
     for (int i = n1; i< num_max; i++) { 
      for (int j = 2; j < Math.sqrt(i); j++) { 
       System.out.println(j + " " + i); 
       if (i==j) { 
        biggestPrime = i; 
        // break: 
        j = num_max; 
        i = num_max; 
       } 
       if (i % j == 0) { 
        break; 
       }      
      } 
     } 
    } 
    return biggestPrime; 
} 
+1

你并不真的需要这样的: '为(INT J = 2;Ĵ Vitaly

+0

是的你是对的。 Thx我会编辑它 – xdola

相关问题