Java中BigInteger的问题

时间:2013-10-12 21:51:01

标签: java biginteger

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

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

  

线程“main”中的异常java.lang.NumberFormatException:非法嵌入的符号字符       在java.math.BigInteger。(未知来源)

但是当我尝试传递作为参数而不是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);}
}

1 个答案:

答案 0 :(得分:2)

问题是您正在尝试使用无效数字BigInteger构建03781-。通过在-18730方法中反转reverse来创建此字符串。

这是没有添加的内容:

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),这是您看到的异常的来源。