BigInteger循环和逻辑无法按计划运行

时间:2014-03-16 04:33:05

标签: java math biginteger

所以我试图制作一些代码,它基本上是因为它们的数字很大。我试图将使用longs的代码转换为BigIntegers,但结果只返回了很多2和0。在这里。

package primes;
import java.math.BigInteger;
public class Primes {
    public static void main(String[] args) {
        BigInteger y = new BigInteger("0");
        BigInteger count= new BigInteger("2");
        BigInteger input = new BigInteger("12321");
        BigInteger one = new BigInteger("1");

        while(input.compareTo(input)!=1) {
            y=input.mod(count);
            System.out.println(y);

            if(y.compareTo(y)==0) {
                input=input.divide(count);
                System.out.println(count);
            } else if(y.compareTo(y)!=0) {
                count.add(one);
            }
        }
    }
}

好吧,我看到了count.add(一个)的问题;但我仍然不确定compareTo函数的工作原理。只是为了澄清每个循环应该做什么,我只是要粘贴适用于longs的正常运行脚本的代码。

package longprimes;
public class LongPrimes {
public static void main(String[] args) {
    long input = 121L;
    long count = 2;
    long y;
    while (input!=1){
        y = input%count;
        if(y==0){
            input = input/count;
            System.out.println(count);
        }
        else if(y!=0){
            count++;
        }
    }
}

}

当我稍微更新一下BigInteger代码时,看起来发生了什么,它会影响它,但它不会分割输入,以便它只是继续找到剩余部分,但如果它是0,它没有' t实际上将输入分开以结束循环。

1 个答案:

答案 0 :(得分:0)

看起来这是一项家庭作业,所以我只想指出一些事情:

input.compareTo(input)!=1可能不是你想要的。理想情况下,当input为1时,您希望完成循环。但是如果左边的数字小于,等于或大于另一个数字,compareTo将返回-1,0或1。考虑这个条件实际返回的是什么。

y.compareTo(y)==0是一回事。您正在将数字y与自身进行比较。理想情况下,您希望与零进行比较。

count.add(one)并没有真正做任何事情。考虑一下当你做的时候会发生什么

1 + 2;

您正在计算将one添加到count的结果,但您也忽略了结果。您可能希望将该结果保存在某处。