首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA BigInteger类错误: BigInteger:模不正

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

Stack Overflow用户
提问于 2016-01-30 17:20:06
回答 1查看 830关注 0票数 0

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

线程“主”java.lang.ArithmeticException中的例外: BigInteger:在test.GCD(test.java:9)、test.main(test.java:22)的test.GCD(test.java:9)处模不正

这是我的密码。

代码语言:javascript
复制
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);
    }
}
}

没有语法错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-30 17:26:39

问题在于基本语句

代码语言:javascript
复制
if (b.equals(0))

它试图将BigInteger b与明显不相等的装箱整数0进行比较,从而导致0作为模数被致命地传递。你可以用

代码语言:javascript
复制
if (b.equals(BigInteger.ZERO)) {
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35104671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档