Самодельный класс BCD — ошибка умножения BCD

Я делаю класс BCD в качестве упражнения для школы и сталкиваюсь с некоторыми проблемами. Ниже мой класс BCD.

Моя проблема связана с методомmultiBCDs. Он отлично работает с меньшими числами, такими как 4329 * 4, однако с более крупными продуктами, такими как произведение 4329 и 29385, я получаю ошибку NullPointerException в первой строке моего метода addBCDs:

int[] added = new int[other.numberOfDigits()];

Я попытался отследить проблему и не смог найти проблему. Почему я получаю эту ошибку и как ее исправить?

Спасибо за помощь!


person swallow    schedule 05.11.2014    source источник
comment
Код не компилируется, вам не хватает умноженияBy и умноженияByTen.   -  person Robert Bain    schedule 05.11.2014
comment
@RobertBain Извините! забыл включить его - просто отредактировал его, чтобы включить эти два, теперь он должен работать нормально   -  person swallow    schedule 05.11.2014
comment
У меня работает следующий основной метод. Что мне не хватает? public static void main(String[] args) { BCD bcd = new BCD(new int[] {4329, 29385}); bcd.print(); }   -  person Robert Bain    schedule 05.11.2014
comment
@RobertBain Это просто объединяет два числа - вот как это у меня в драйвере: BCD bcd = new BCD (4329); BCD bcd2 = новый BCD (29385); BCD bcd3 = bcd.multiplyBCDs(bcd2); bcd3.print();   -  person swallow    schedule 06.11.2014


Ответы (2)


В методе:

public BCD multiplyBy(int num)

В последнем операторе else никогда не выполняется следующее условие:

if (x == digits.length - 1 && carry != 0)

и поэтому «анс» никогда не устанавливается и остается нулевым.

person Robert Bain    schedule 05.11.2014
comment
Пожалуйста, рад, что помогло. Из любопытства, что вы установили, когда условие не было выполнено? - person Robert Bain; 06.11.2014
comment
Я только что сделал оператор else под этим оператором if, в котором говорилось ans = new BCD(answer). До сих пор он отлично работал для всех моих тестов. - person swallow; 06.11.2014

int[] added = new int[other.numberOfDigits()];

Единственный способ получить NPE в этой строке — это если other равно нулю.

person user207421    schedule 05.11.2014
comment
Я так и думал, но не могу понять, почему other будет нулевым. Единственное, о чем я могу думать, это строка newBCD = newBCD.addBCDs(dig);, но для newBCD установлено значение 0, поэтому я думаю, что это должно работать... - person swallow; 06.11.2014
comment
Затем вам нужно пересмотреть свои предположения, потому что это, безусловно, нулевое значение. - person user207421; 06.11.2014