java - Java 中 BigInteger 的问题

标签 java biginteger

也许这个问题很愚蠢,但我是 Java 新手,我无法弄清楚......

所以我有两个类 - Digit 和 BigDigit,问题就在这里 Digit2.sub(Digit1);当 Digit1 为负数时,我得到

Exception in thread "main" java.lang.NumberFormatException: Illegal embedded sign character at java.math.BigInteger.(Unknown Source)

但是当我尝试传递参数而不是 Digit1 而是示例“-18370”时,一切正常,但基本上应该是相同的。如果它是积极的,那么一切都会像魅力一样发挥作用。谁能给我提示我哪里出错了?方法“add”始终有效,但“sub”仅适用于正数 Digit1。

已更新 此代码在 Digit1 时有效为正或如果未注释 Digit1.add( Digit2); ,然后当总和为正时起作用。但不是消极的:(

import java.math.BigInteger;

public class Digit {

public static void main(String[] args)
{
    BigDigit Digit1 = new BigDigit("-18730");
    BigDigit Digit2 = new BigDigit("77730");

   // Digit1.add( Digit2);
    Digit1.display();
    Digit1.reverse();
    Digit1.display();

   Digit2.sub( Digit1);
   Digit2.display();
   Digit2.reverse();
   Digit2.display();
    }
}
class BigDigit {
public String number;
public BigInteger first;
public BigInteger second;

public BigDigit(String str) {number = str;}

public String add(BigDigit sk) {
    first = new BigInteger(number);
    second = new BigInteger(sk.number);
    return number = first.add(second).toString();
}

public String reverse() {
    return number = new StringBuffer(number).reverse().toString();
}

public void sub(BigDigit sk) {
    first = new BigInteger(number);
    second = new BigInteger(sk.number);     
    }
public void display() {System.out.println(number);}
}

最佳答案

问题是您正在尝试使用无效数字 (03781-) 构造一个 BigInteger。该字符串是通过在 reverse 方法中反转 -18730 创建的。

这是在没有添加的情况下打印的内容:

C:\>java Digit
-18730
03781-
Exception in thread "main" java.lang.NumberFormatException: Illegal embedded sign character
        at java.math.BigInteger.<init>(Unknown Source)
        at java.math.BigInteger.<init>(Unknown Source)
        at BigDigit.sub(Digit.java:42)
        at Digit.main(Digit.java:15)

这是我启用添加时打印的内容

C:\>java Digit
59000
00095
77730
03777

反转正整数 (59000) 不会留下嵌入的减号 (00095),这是您所看到的异常的根源。

关于java - Java 中 BigInteger 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19339574/

相关文章:

java - 使用 Jackson 生成 CSV,不带引号的字符

c - 以 256 为基数的算术

java - 使用之前的答案,无法通过同时击键同时获取两张图片到 "move"

java - 解密电子邮件中附加的 GPG 文件

c# - 在 C# 中有大量数字的斐波那契数列

java - 在 N 中找到第一个非零数!在 java

java - 从整数转换为 BigInteger

Java : Not sure if correct use of BigInteger

java - 如何将配置属性传递给 SparkListener?

java - 使用标签中断时java中出现"Undefined label"错误