0

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

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

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

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

更新 此代码在Digit1为正或未注释时有效Digit1.add( Digit2);,然后在 sum 为正时有效。但不是负面的:(

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);}
}
4

1 回答 1

2

问题是您正在尝试BigInteger使用无效数字 ( 03781-) 构造 a 。该字符串是通过反转-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),这是您看到的异常的来源。

于 2013-10-13T10:45:08.813 回答