Проблема с конструктором: натуральное число с использованием стека <Integer> - PullRequest
0 голосов
/ 14 января 2011

Я пытаюсь создать произвольно длинное натуральное число, используя стек целых чисел.Я довольно новичок в Java, но вот что у меня есть:

import java.util.Stack;

public class BigNatural {      // I didn't choose that name >.>

private Stack< Integer > number;

public BigNatural(String value_in) {

while(value_in.length() > 0) {

char temp_char = value_in.charAt(0);

Integer temp_int = Character.digit(temp_char, 10);

this.number.push(temp_int);

if(value_in.length() > 1) {
value_in = value_in.substring(1); }

else { break; }
}
}

Я получаю NullPointerException на линии с this.number.push.Есть ли что-то, что я не делаю с точки зрения правильной инициализации стека?Добавление number = new Stack< Integer >(); позволило запустить мой инициализирующий тест, но я чувствую, что это создает только локальный стек, выходящий за рамки.Справка!

Редактировать: (см. Комментарии ниже)

public void increment () {
  Integer temp_int = 0;

  if(!this.number.empty()) {

    temp_int = this.number.pop();
    temp_int++;

    if(temp_int == 10) {
      this.increment();
      this.number.push(0);
    } else { 
      this.number.push(temp_int); 
    }    
  } else { 
    this.number.push(1);
  }
}

Еще раз спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 14 января 2011

Добавление number = new Stack< Integer >(); позволило запустить мой инициализирующий тест, но я чувствую, что он создает только локальный стек, выходящий за рамки.

Он не выйдет "наружу"области видимости ", потому что вы сохраняете его в классе number.

1 голос
/ 14 января 2011

Он не выйдет из области видимости, поскольку вы присваиваете вновь созданный Stack переменной класса number.

Кроме того, NullPointerException выбрасывается, потому что number не инициализирован.

Вам нужно инициализировать number перед циклом while, или вы можете изменить эту строку:

private Stack<Integer> number;

до

private Stack<Integer> number = new Stack<Integer>();
...