列出java中的所有毕达哥拉斯三胞胎

时间:2015-12-02 21:30:30

标签: java methods return pythagorean

我需要找到所有毕达哥拉斯三元组(a ^ 2 + b ^ 2 = c ^ 2),其中A和B的值小于100.我的代码没有给出正确的输出。谁能告诉我我的代码出了什么问题并改写了正确的代码呢?

public static void main(String[] args) {

    int sum = 0;

    for (int num1 = 1; num1 <= 100; num1++) {
        for (int num2 = 1; num2 < 100; num2++) {
            if (PerfectSquare(num1, num2, sum)) {
                System.out.println(num1 + " " + num2);
            }
        }
    }
}

public static boolean PerfectSquare(int number1, int number2, int sum) {

    int square1;
    int square2;
    double root;
    int sum1;

    number1 = (int) ((99 - 1 + 1) * Math.random() + 1);
    number2 = (int) ((99 - 1 + 1) * Math.random() + 1);

    square1 = (int) Math.pow(number1, 2.0);
    square2 = (int) Math.pow(number2, 2.0);
    sum = square1 + square2;
    root = Math.sqrt(sum);
    sum1 = (int) Math.pow(root, 2.0);

    if (!(sum == sum1)) {
        return false;
    }

    return true;
}

1 个答案:

答案 0 :(得分:1)

您正在使用随机数覆盖number1number2参数:

number1 = (int) ((99 - 1 + 1 ) * Math.random() + 1);
number2 = (int) ((99 - 1 + 1 ) * Math.random() + 1);

如果你这样做,你也可以不将任何值传递给方法。删除这些行。

此外,您需要将平方根舍入为整数:

root = (int) Math.sqrt(sum);

因为否则当你再次对它进行平方时你会得到相同的数字。

与正确性无关的其他要点:

  • 你可以通过将它们自身相乘来平方整数而不需要强制转换:

    square1 = number1 * number1;
    
  • 此:

    if (! (sum==sum1) ) {
    

    更容易写成

    if (sum != sum1) {
    
  • 您的sum方法参数是不必要的。将其声明为局部变量。

  • 您不需要遍历所有num1num2对,因为如果(num1, num2)是毕达哥拉斯三元组的相对和相邻边,那么(num2, num1)显然也是如此(如果num1num2不相同,那么num2num1也不是。因此,您可以使用以下方法检查更少的组合:

    for (int num1 = 1; num1 <= 100 ; num1++) {
      for (int num2 =1; num2 <num1; num2++) {