将C ++中的二项树转换为Java

时间:2015-03-07 12:56:33

标签: java c++ arrays multidimensional-array binomial-theorem

我有以下代码,我试图从C ++转换为Java。该代码应该生成一个二叉树,用于计算股票期权价格。 以下是C ++代码:

class Price {
public:
    double stockPrice;
    double optionPrice;
};

int numIntervals = 500;
Price ** binomialTree;
binomialTree = new Price*[numIntervals+1];

for (i = 0; i <= numIntervals; i++) {
    binomialTree[i] = new Price[i + 1];
}
for (i = 0; i <= numIntervals; i++) {
    for (j = 0; j <= i; j++) {
        binomialTree[i][j].stockPrice = sNaught * pow(up, j) * pow(down, i-j);
    }
}

我需要初始化二叉树的java代码,以便我可以迭代它并计算各种价格。抛弃我的部分是binomialTree[i] = new Price[i+1];,它发生在循环内部,使得2D数组动态,你可以在java中做。这就是我提出的运行方式,但与给定的值相比,结果价格不正确。

class Price {
    double stockPrice = 0.0;
    double optionPrice = 0.0;

    Price(double sP, double oP) {
        this.stockPrice = sP;
        this.optionPrice = oP;
    }
}

int i,j;
Price[][] binomialTree = new Price[numIntervals+1][numIntervals+2];

for (i = 0; i <= numIntervals; i++) {
    for (j = 0; j <= i; j++) {
        binomialTree[i][j] =  new Price(option.getsNought() * Math.pow(up, j) * Math.pow(down, i-j), 0);
    }
}

1 个答案:

答案 0 :(得分:2)

在Java中,行长度是动态的二维数组非常有可能。由于我没有完整的设置,以下是一个简短的例子:

     Price[][] binomialTree = new Price[20][];
     for ( int i = 0 ; i < 20 ; i++ ) {
         binomialTree[i] = new Price[i+1];
     }

     for ( int i = 0; i < 20; i ++ ) {
          System.out.println( Arrays.toString(binomialTree[i]));
     }

这个的输出是(因为我们还没有填充数组):

[null]
[null, null]
[null, null, null]
[null, null, null, null]
...

值得注意的是,Java没有&#34;二维数组&#34; (在某种意义上,所有维度都被分配在一起作为一个连续的内存块)。它只有一维数组,其基类型可以是引用类型。引用类型可以是数组的引用类型。

声明,例如

Price[][] arr = new Price[5][7];

只是语法糖,与创建Price数组的5元素引用数组相同,然后创建5个引用Price的7个数组,并将它们分配给每个元素第一个阵列。

有关此问题的正式讨论,请阅读the Java Language Specification