也许这个问题很愚蠢,但我是 Java 新手,我无法弄清楚......
所以我有两个类 - Digit 和 BigDigit,问题就在这里 Digit2.sub(Digit1);
当 Digit1 为负数时,我得到 p>
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/