在Java中查找同时包含三角形数字和星号的数字

stu*_*der 2 java methods while-loop

这是我被分配的问题:

所谓的"星号"s是由下式定义的数:s = 6n(n-1)+ 1其中n是星号的索引.因此,前六个(即n = 1,2,3,4,5和6)星号是:1,13,37,73,121,181

相反,所谓的"三角形数"t是从1到n的数字之和:t = 1 + 2 + ... +(n-1)+ n.因此,前六个(即n = 1,2,3,4,5和6)三角形数字为:1,3,6,10,15,21

编写一个Java应用程序,该应用程序生成int类型的所有值的列表,这些值都是星号和三角形号.

解决此问题时,您必须编写并使用至少一个函数(例如isTriangeNumber()isStarNumber()determineTriangeNumber()determineStarNumber()).此外,您必须只使用此处提供的公式来解决问题.

tl; dr:需要输出星号和三角数的值.

不幸的是,我只能得到结果在无限循环中输出值'1',即使我在while循环中递增1.

public class TriangularStars {
    public static void main(String[] args) {

    int n=1;            
    int starNumber = starNumber(n);
    int triangleNumber = triangleNumber(n);

    while ((starNumber<Integer.MAX_VALUE)&&(n<=Integer.MAX_VALUE))
    {
        if ((starNumber==triangleNumber)&& (starNumber<Integer.MAX_VALUE))
                {
                    System.out.println(starNumber);
                }
        n++;
    }
  }


public static int starNumber( int n)
{
    int starNumber;
    starNumber= (((6*n)*(n-1))+1);
    return starNumber;

}
public static int triangleNumber( int n)
{
    int triangleNumber;
    triangleNumber =+ n;
    return triangleNumber;
}
Run Code Online (Sandbox Code Playgroud)

}

dur*_*597 6

这是一个骨架.自己完成剩下的事情:

问自己的问题:

  1. 如何制作三角形数字?
  2. 我怎么知道某些东西是星号?
  3. 为什么我只需要继续直到三角形为负?三角形怎么会变成消极的?

祝好运!

public class TriangularStars {
  private static final double ERROR = 1e-7;

  public static void main(String args[]) {
    int triangle = 0;
    for (int i = 0; triangle >= 0; i++) {
      triangle = determineTriangleNumber(i, triangle);
      if (isStarNumber(triangle)) {
        System.out.println(triangle);
      }
    }
  }

  public static boolean isStarNumber(int possibleStar) {
    double test = (possibleStar - 1) / 6.;
    int reduce = (int) (test + ERROR);
    if (Math.abs(test - reduce) > ERROR)
      return false;

    int sqrt = (int) (Math.sqrt(reduce) + ERROR);
    return reduce == sqrt * (sqrt + 1);
  }

  public static int determineTriangleNumber(int i, int previous) {
    return previous + i;
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
253
49141
9533161
1849384153
Run Code Online (Sandbox Code Playgroud)