2013-10-12 40 views
0

也许这个问题是愚蠢的,但我在Java中是新的,我不能算出这个...问题与BigInteger的

所以我有两个clases - 数字和BigDigit,问题就在这里Digit2.sub(Digit1);时Digit1是否定的,我得到

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

但是当我试图通作为argume nt不是Digit1,但是例如“-18370”,那么一切都可以,但基本上它应该是相同的。如果它是积极的,每一件作品都像魅力一样。任何人都可以给我一个提示,我错了吗?方法'add'始终有效,但'sub'只有正数Digit1。

修订 此代码的工作,当Digit1为正,或者如果uncomented 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个大括号,假设它们应该是2个独立的顶级课程) – Aaron

+0

怎么可能在数字中间得到'-'? –

回答

2

的问题是,你正在试图构建一个BigInteger有一个无效的号码(03781-)是由您的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),这是您看到的异常的来源。

+0

你刚刚救了我的一天!这样一个愚蠢的错误,我试图找到问题elsevear。 –