项目Euler 12在java中使用while循环

时间:2013-02-28 06:36:48

标签: java

我想通过这种方式解决Project Euler Problem 12但是我遇到了一些问题,任何人都可以告诉我我在哪里犯错误。

**问题 -

通过添加自然数来生成三角数的序列。所以第7个三角形数字是1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.前十个术语是:

1,3,6,10,15,21,28,36,45,55,......

让我们列出前七个三角形数字的因子:

 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28

我们可以看到28是第一个超过五个除数的三角形数。

第一个三角形数的值超过500个除数是多少?

import java.util.ArrayList;
import java.util.List;

public class Problem12 {
int j=1;
static int num; 
List<Integer> ls = new ArrayList<Integer>();
public void trangule(int i){
 num= i*(i+1)/2;    
while(j>0);
{
   for(j =1; j<num/2; j++){
   if(num%j==0)
    {int temp= num/j;

    ls.add(temp);
    }
   if(ls.size()==500)
   {
    System.out.println(ls.get(ls.size()-1));   
   }   
   }


}

}
public static void main(String[] args) {
Problem12 ob =new Problem12();
 for(int i =1; i<=500; i++) 
 { ob.trangule(i);}

}

}

1 个答案:

答案 0 :(得分:2)

你有一个空语句while循环:

while(j>0);

;结束循环,因此它始终在条件j>0上循环,这始终为真,因此代码永远不会超过该点。

我不确定while循环首先是什么,即使您删除;它仍然永远不会离开该循环。事实上,我认为你不需要它。

其他一些注意事项:

  • 问题中提到的问题是&#34;第一个三角形数字的值是多少超过五百个除数?&#34;第一个超过五百韩元必须有500个除数,这是你目前的检查。
  • 您没有在迭代之间清除ls,因此ArrayList将继续累积所有三角形数字组合的因子(您可以使用ArrayList#clear执行此操作)