为什么这不起作用? (毕达哥拉斯三重奏)

时间:2018-04-11 06:31:51

标签: java

public class Problem9 {

    public static boolean isTriplet( int a, int b, int c ){
        if( a*a + b*b == c*c && a < b && b < c )
            return true;
        else 
            return false;
    }

    public static boolean isEqual( int a, int b, int c ){
        int z = a + b + c;
        if( z == 1000 )
            return true;   
        else 
            return false;
    }

    public static void main(String[] args){

        for( int a=0; a < 200; a++ ){
            for( int b=0; b < 200; b++ ){
                for( int c=0; c < 200; c++ ){
                    if( isEqual(a,b,c) && isTriplet(a,b,c))
                        System.out.print( a +" "+ b + " "+ c );
                }
            }
        }
    }
}

这不应该工作吗? 我无法弄清楚为什么这不起作用。 这两种方法都可以单独工作,但是当我运行时它仍然没有打印出来。

3 个答案:

答案 0 :(得分:5)

abc始终小于200,a + b + c将始终小于600,因此永远不会等于1000.所以{{1} }返回isEqual。这足以使false成为假。因此,如果您的程序没有打印任: - )

答案 1 :(得分:1)

如果你想找到一个满足isEqual(a,b,c)isTriplet(a,b,c)的三元组,你必须增加你的循环范围。

将循环更改为:

for(int a=0; a < 1000; a++ ){
    for(int b=0; b < 1000; b++ ){
        for(int c=0; c < 1000; c++ ){
            if( isEqual(a,b,c) && isTriplet(a,b,c))
                System.out.print( a +" "+ b + " "+ c );
        }
    }
}

将产生一个三元组:

200 375 425

答案 2 :(得分:0)

200 + 200 + 200 = 600,它永远不会像程序中那样等于1000所以它不会给出任何输出!所以它没有任何输出!