为什么我的程序没有按预期运行?

Why does my program not work as expected?

我正在研究 Euler 项目的第十二题。一切都与三角形数字有关;我试图找到第一个除数超过 500 的三角形数。我已经写了一个程序来找到这个,但是,它没有给我正确的答案,我不明白为什么。我在下面提供了我的代码:

public class problemTwelve {
  public static void main(String [] args) {
    int i = 1;
    int number = 1;
   while(getDivisors(number) < 500) {
     number += i;
     i++;
   }
   System.out.println("The first triangle number to have greater than 500 divisors is: " + number);
  }

  private static int getDivisors(int triangleNum) {
    int noOfDivisors = 0;
    int numToTest = (int) Math.sqrt(triangleNum);
    for(int i = 1; i <= numToTest; i++) {
      if((triangleNum % i) == 0) {
        noOfDivisors += 2;
      }
    }
    if((numToTest * numToTest) == triangleNum) {
      noOfDivisors--;
    }
    return noOfDivisors;
  }
}

程序在运行时给出的输出如下:

The first triangle number to have greater than 500 divisors is: 146611080

在欧拉项目上输入这个数字作为答案,我们可以看到它是错误的。我不知道我的程序哪里出错了...

你查的数字好像不是三角形的。只看代码,检查的第二个数字是2,不是三角数。

尝试将行

i++;
移到行
number+=i;

之前

你的数字必须从 0 而不是 1 开始,这是正确的代码:

int i = 1;
    int number = 0;
    while(getDivisors(number) < 500) {
        number += i;
        i++;
    }
    System.out.println("The first triangle number to have greater than 500 divisors is: " + number);
}


private static int getDivisors(int triangleNum) {
    int noOfDivisors = 0;
    int numToTest = (int) Math.sqrt(triangleNum);
    for(int i = 1; i <= numToTest; i++) {
        if(triangleNum % i == 0) {
            noOfDivisors += 2;
        }
    }
    if((numToTest * numToTest) == triangleNum) {
        noOfDivisors--;
    }
    return noOfDivisors;
}