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

Converting Binomial Tree in C++ to Java

我尝试将以下代码从 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];,它使二维数组动态化,而这在 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);
    }
}

行长动态的二维数组在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 根本没有 "two dimensional arrays"(在所有维度都作为连续的内存块一起分配的意义上)。它只有一维数组,其基类型可以是引用类型。引用类型可以是数组。

声明如

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

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

要对此进行正式讨论,请阅读 the Java Language Specification