由于某种原因,程序类没有执行代码

时间:2014-11-28 22:11:03

标签: java

我尝试编写代码以获得大数字的最大素数因子(在本例中为600851475143)。 在编写了四种不同的方法(2显示结果,2显示其他计算)后,我编写了程序类,并尝试运行它。

当我运行它时,结果应出现在控制台中,但没有显示任何内容。我试图制作应该公开打印的变量,然后手动打印,但它没有用。最后,我在main方法中编写了最简单的System.out.print()命令,但控制台中没有出现任何内容。

我不知道问题是什么。这里有人有线索吗?

班级:

public class Problem3 {
    public float sum1;
    public float sum2;
    private float num =  600851475143f;

    public void methodGuy(){
        while(sum1==0){
            for(int i=2; i<num/2; i++){
                if(num%i==0){
                    sum1=num/i;
                } else {}
            }
        }
    }
    public void show1(){
        System.out.println("the result of Guys method is: " + sum1);
    }

    public void methodOr(){
        for(int i=2; i<num/2; i++){
            for(float x=num/2; x>2; x=x-1){
                if(i*x==num){
                    sum2=x;
                }
            }
        }
    }
    public void show2(){
        System.out.println("the result of Ors method is: " + sum2);
    }
}

程序类:

public class Program {
    public static void main(String[] args) {
        Problem3 x = new Problem3();

        x.methodGuy();
        x.show1();
        x.methodOr();
        x.show2();
    }
}

1 个答案:

答案 0 :(得分:1)

methodGuy永远不会终止,因为int不能那么大。

int的最大可能值为2147483647.如果您的int是该数字,并且您向其添加一个,则该数字将会回绕并变为负数。所以在i++之后,下一个值将是-2147483648。由于只要i小于600851475143/2 = 300425237071.5,循环就会继续,并且因为i总是小于那个,所以你的循环是无限的。

最好是让inum都有long类型,而不是intfloat。即使你这样做,你的循环可能会运行很长时间。

事实上,如果没有因素,循环将是无限的,因为sum永远不会被设置为0以外的东西,然后因为你说while (sum==0),循环才会开始再一次,无限地做同样的事情。因此除了回绕问题之外,您的算法仍然需要工作。

进一步说明:您绝对不希望使用float,因为无法准确表示数字600851475143。 num的实际值为600851480576。