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

Converting Binomial Tree in C++ to Java

本文关键字:转换 Java 二项式 C++      更新时间:2023-10-16

我有以下代码,我正在尝试将其从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);
    }
}

行长度是动态的二维数组在 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]));
     }

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

[空][空,空][空、空、空][空、空、空、空]...

值得注意的是,Java根本没有"二维数组"(从某种意义上说,所有维度都作为连续的内存块一起分配)。它所拥有的只是一维数组,其基类型可以是引用类型。引用类型可以是数组的类型。

声明,例如

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

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

有关此内容的正式讨论,请阅读 Java 语言规范。