也许这个问题很愚蠢,但我是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);}
}
答案 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
),这是您看到的异常的来源。