JAVA BigInteger类错误:BigInteger:模数不正

时间:2016-01-30 17:20:07

标签: java compiler-errors biginteger

我制作了在两个数字之间获取GCD(最大公共分区)的代码。 这是因为我应该输入第19位的数字,我想我需要使用BigInteger Math类。但是,在编译我的代码后,我有这个错误。

  

线程“main”中的异常java.lang.ArithmeticException:BigInteger:模数不为正   java.math.BigInteger.mod(BigInteger.java:2415)at   test.GCD(test.java:9)at test.GCD(test.java:9)at   test.GCD(test.java:9)at test.GCD(test.java:9)at   test.main(test.java:22)

这是我的代码。

import java.util.*;
import java.math.BigInteger;

public class test {
public static BigInteger GCD(BigInteger a, BigInteger b) {
    if (b.equals(0))
        return a;
    else
        return GCD(b, a.mod(b));
}

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    BigInteger p = BigInteger.valueOf(1);
    BigInteger q = BigInteger.valueOf(1);
    BigInteger i = BigInteger.ONE;
    BigInteger z = BigInteger.ONE;
    p = sc.nextBigInteger();
    q = sc.nextBigInteger();

    while (true) {
        if (GCD(p, q).compareTo(i) == -1) {
            System.out.print("1");
        }
        else if(GCD(p, q).compareTo(i) == 0) {
            System.out.print("1");
        }
        else if(GCD(p,q).compareTo(i) == 1) {
            break;
        }
        i.add(z);
    }
}
}

没有语法错误。

1 个答案:

答案 0 :(得分:1)

问题在于基本陈述

if (b.equals(0))

试图将BigInteger b与明确不相等的盒装整数0进行比较,导致0致命地传递为模数。你可以用

if (b.equals(BigInteger.ZERO)) {