Java 计算数字是否为三角形时与while语句混淆

Java 计算数字是否为三角形时与while语句混淆,java,Java,我一直很难想出如何解一个函数。我被指派开发一个小程序,它告诉我一个数字是否是“三角形”(当[1,n]区间中某些连续数字相加为n时,一个数字是三角形的。根据定义,数字10是三角形的,因为在[1,10]区间中,1+2+3+4=10) 到目前为止,我已经编写了以下代码: class TriangularNumber{ boolean numTriangular(int n) { boolean triangular = false; int i = n; while(n&

我一直很难想出如何解一个函数。我被指派开发一个小程序,它告诉我一个数字是否是“三角形”(当[1,n]区间中某些连续数字相加为n时,一个数字是三角形的。根据定义,数字10是三角形的,因为在[1,10]区间中,1+2+3+4=10)

到目前为止,我已经编写了以下代码:

class TriangularNumber{

  boolean numTriangular(int n) {
    boolean triangular = false;
    int i = n;
    while(n>=0 && triangular){
    //UE06 is a class which contains the function "f0", which makes the addition of all the numbers in a determined interval
    UE06 p = new UE06();
      if ((p.f0(1, i))==n)
        triangular = true;
      else
        i=i-1;
    }
    return triangular;
  }

boolean testTriangular = numTriangular(10) == true && 
  numTriangular(7) == false && 
  numTriangular(6) == true;

  public static void main(String[] args){

    TriangularNumber p = new TriangularNumber();
    System.out.println("testTriangular = " + p.testTriangular);
   } 
}
根据我做的那些布尔测试,函数是错误的。在我看来,函数是这样的:

  • 我声明初始状态下的输入数字不是三角形的 (三角形=假)和i=n(确定间隔[1,i],其中 函数将被评估
  • 当n大于或等于0且数字不是三角形时 循环开始
  • 循环是这样的:如果 [1,i]间隔为n,数字为三角形,导致循环 结束。如果这个陈述是错误的,我从i到(i-1),开始 以该特定间隔再次循环,依此类推,直到 加法是n
  • 我无法发现我“算法”中的错误,有什么建议吗

    谢谢!

    而(n>=0&&triangal){
    triangal=false
    因此,您永远不会执行该函数

    另一个问题是,如果你进入你的循环,这个数字不是三角形,你永远不会和它,因为你测试n,但减少i

    再试一次?;)(这看起来像是一个家庭作业,所以,我不是为您编写函数,只是帮助您指出代码中的一些问题)

    ,而(n>=0&&triangal){
    triangal=false
    因此,您永远不会执行该函数

    另一个问题是,如果你进入你的循环,这个数字不是三角形,你永远不会和它,因为你测试n,但减少i


    再试一次?;)(这看起来像是一个家庭作业,因此,我不为您编写函数,只需帮助您并指出代码中的一些问题)

    在循环中,条件应更改为:

    while(i>=0 && !triangular)
    

    在循环中,条件应更改为:

    while(i>=0 && !triangular)
    

    我会用数学来避免循环。前n的和是
    n*(n+1)/2
    ,所以你可以用
    sqrt(n*2)


    我会用数学来避免循环。前n的和是
    n*(n+1)/2
    ,所以你可以用
    sqrt(n*2)


    如果这是一个家庭作业,请相应地标记它。还有,你的问题是什么?我添加了家庭作业标记,对不起!如果这是一个家庭作业,请相应地标记它。还有,你的问题是什么?我添加了家庭作业标记,对不起!在我的代码中更改这一部分解决了错误。但我似乎不明白为什么我不能添加n和“三角形”,while语句中的不是“初始状态”吗?非常感谢!@Darkkurama您在while语句中所拥有的是您所描述的:当i大于或等于0(i>=0)且数字不是三角形(!三角形)时。您需要使用i而不是n,因为对于每个迭代,您的子集由[1;i]定义每次迭代后,你都要减少你的子集(i=i-1)。否则你会陷入一个无限循环,试图求解:sum(1,n)=n在我的代码中改变这一部分就解决了这个错误。但是我似乎不明白为什么我不能把n和“三角形”放在一起,while语句中的“初始状态”不是什么吗“?非常感谢!@Darkkurama您在while语句中所描述的是:当i大于或等于0(i>=0)且数字不是三角形(!三角形)时。您需要使用i而不是n,因为对于每个迭代,您的子集由[1;i]定义,并且在每次迭代后减少子集(i=i-1)。否则,您将陷入一个试图求解的无限循环中:sum(1,n)=nTanks!这有助于理解带有@laguille解释的while语句谢谢!这有助于理解带有@laguille解释的while语句
    1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 210 231 253 276 300 325 351 378 406 435 465 496 528 561 595 630 666 703 741 780 820 861 903 946 990