2014-02-17 28 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变量永远不会增加。我建议寻找%(模数)运算符来解决这个问题。

相关问题