构造函数的问题:使用Stack <integer> </integer>的自然数

时间:2011-01-14 01:01:42

标签: java constructor initialization stack nullpointerexception

我正在尝试使用一堆整数创建一个任意长的自然数。我对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 个答案:

答案 0 :(得分:3)

  

添加number = new Stack< Integer >();允许我的初始化测试运行,但我觉得这只会创建一个超出范围的本地堆栈。

它不会“超出范围”,因为您将其保存在班级成员number中。

答案 1 :(得分:1)

它不会超出范围,因为您将新创建的Stack分配给类变量number

此外,由于NullPointerException未初始化,因此抛出number

您需要在number循环之前初始化while,或者您可以更改此行:

private Stack<Integer> number;

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