2014-02-17 29 views
-1

所以我開始了Euler項目,第一個問題很簡單,但是我無法得到答案,因爲我創建的程序沒有運行。它編譯得很好,但是當我運行它時,它永遠不會運行。歐拉項目說,「有效實施的問題將允許在不到一分鐘的時間內在適中的計算機上獲得解決方案」。這導致我的問題。我是否陷入了無限循環或者我的電腦沒有能力運行我的程序?我的程序是否有運行時錯誤,或者我的電腦無法運行我的程序?

的問題是:如果我們在下面列出10是3或5的倍數的所有自然數,我們得到了3,5,6和9這倍數的總和爲23

查找總和3或5低於1000

public class Euler1 
{ 
public static void main(String[] args) 
{ 
    double x = 1; 
    int count = 0; 
    int total = 0; 

    while(x < 1000) 
    { 
     if((x/3 == (int)x) || (x/5 == (int)x)) 
     { 
     count++; 
     x++; 
     total += x; 
     } 
    } 

    System.out.println(total); 
} 

所有倍數}的

+0

除非x爲零,x/3或x/5將如何等於x?你的代碼沒有任何意義。注意,這裏沒有編譯錯誤或運行時錯誤,所以標籤無關緊要。 – EJP

+0

Protip:http://en.wikipedia.org/wiki/Modulo_operation – Kevin

+0

我強烈建議學習使用調試器。 –

回答

5

你的程序是錯誤的。

while(x < 1000) 
{ 
    if((x/3 == (int)x) || (x/5 == (int)x)) 
    { 
     count++; 
     x++; 
     total += x; 
    } 
} 

請注意,如果條件爲真,x只會增加。 x從1開始,所以條件不成立,所以x永遠不會遞增並保持在1.

此外,x/3 == (int)xx/5 == (int)x不是正確的可分性測試。它們都不是真的,除非x是0.

2

的問題是,如果你的if條件在中while環假,x永遠不會被遞增......

(而且將永遠是假的,除非x爲0)

1

你陷入了一個無限循環。您的if語句永遠不會被調用,因爲它永遠不會返回true,除非x0,因此您的x變量永遠不會增加。我建議尋找%(模數)運算符來解決這個問題。

相關問題