2015-12-21 265 views
-3

我有一段代碼,我寫了這個代碼給我任何數字的最大素數因子。Java - 終止無限循環

public static void main(String[] args) { 

     long n = 49; 
     while (true) { 
      long x = sPrimeFactor(n); 
      if (x < n) n /= x; 
      else 
       System.out.println(n); 
     } 

    } 

    public static long sPrimeFactor (long n){ 
     if (n <= 1) return 1; 
     long cap = (long) Math.sqrt(n); 
       for (long i = 2; i <= cap; i++) { 
        if (n % i == 0) return i; 
       } 
       return n; 
    } 

正如你可能想象,這種鎖定無限循環,其中數量最大的主要因素將只保留通過函數循環。

當我的解決方案已經達到時,我該如何分解它?

編輯:這是我只是愚蠢。我應該先查找它。在任何情況下,這是解決它的代碼:

public static void main(String[] args) { 

     long n = (long) 49; 
     while (true) { 
      long p = sPrimeFactor(n); 
      if (p < n) n /= p; 
      if (p == n) break; 
     } 
     System.out.println(n); 

    } 

    public static long sPrimeFactor (long n){ 
     if (n <= 1) return 1; 
     long cap = (long) Math.sqrt(n); 
       for (long i = 2; i <= cap; i++) { 
        if (n % i == 0) return i; 
       } 
       return n; 
    } 

回答

0
while (true) {} 

您需要設置一個標誌,使while循環阻止你實現你的目標之後。

或使用break;是另一種方式