2013-10-12 3 views
0

Может быть, этот вопрос глупый, но я новичок в Java, и я не могу понять это ...Проблемы с BigInteger в Java

Так у меня есть два clases - Digit и BigDigit и проблема здесь Digit2.sub(Digit1); когда Digit1 отрицательна я получаю

исключения в потоке "основной" java.lang.NumberFormatException:. Нелегальный встроенный символ знак в java.math.BigInteger (Unknown Source)

, но когда я попытался пройти как утверждают 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

Я думал, что ошибка означает, что у вас есть '-' в середине номера, а не в начале. Можете ли вы привести пример, который мы можем запустить? BTW Кажется, вам не нужно поле 'first' или' second', и вам не нужно хранить его как String. –

+0

Ваш код работает для меня (я добавил отсутствующие 2 фигурные скобки, предположив, что они должны были быть 2 отдельными классами верхнего уровня) – Aaron

+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), который является источником исключения, которое вы видите.

+0

Вы только что спасли мой день! Такая глупая ошибка, и я попытался найти проблему elsevear. –

Смежные вопросы