2012-10-23 112 views
-3
public static long sum7() 
{ 
    int c = 1; 
    boolean isprime = true; 
    long prime = 0; 
    for (long i = 3; i <= Long.MAX_VALUE; i++) 
    { 
     for (long j = 2; j < i; j++) 
     { 
      if (i % j == 0) 
      { 
       isprime = false; 
       break; 
      } 
     } 
     if (isprime == true) 
     { 
      c++; 
     } 
     if (c == 10001) 
     { 
      prime = i; 
      break; 
     } 
    } 
    return prime; 
} 
static Scanner scanner1 = new Scanner(System.in); 

public static void main(String[] args) 
{ 
    System.out.println(sum7()); 
} 

我正在嘗試下面的代碼爲一個項目歐拉問題(Q7),我應該找到10001素數,但它只是不工作。構建成功,但它沒有顯示任何請幫助。在此先感謝....Java代碼不起作用

+14

請定義「不工作」。我們中的大多數人在閱讀頭腦時都很糟糕,不知道代碼應該做什麼,不做什麼以及它不應該做什麼和正在做什麼。 –

+1

另外,如果你說這個函數試圖做什麼會是有幫助的......「項目歐拉問題」對我來說毫無意義。 –

+0

你得到了什麼錯誤或你想要的答案是什麼? –

回答

2

這並不清楚你想要做什麼,所以我不得不根據代碼猜測。我假設你想找到第10001個素數。

首先,您忘了在循環結束時將isprime重新設置爲true。就像現在一樣,在第一次迭代之後它將永遠是錯誤的,這意味着3是唯一檢測到的素數,並且在此之後您將一直循環到2^63(實際上是無限),並且最終返回0.

您可以通過將boolean isprime = true;移動到循環的開頭來更好地解決問題並縮小變量範圍。您可能還會將prime移動到循環中,並將if c==10001位更改爲直接返回。其他,c = c++;不正確。您正在遞增變量,然後將其重置爲舊值。您應該執行c++;c = c + 1

+0

在旁註: - 你不需要if(isprime == true )',只是'如果(isprime)'足夠了。 –

+0

是的,但需要在循環的每次迭代中將其設置爲true。 – Antimony

+0

對不起。我的錯。沒有看到它是一個嵌套循環。 :(\ –