2013-10-12 72 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。 –