-1

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

1 回答 1

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]));
     }

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

[无效的]
[空,空]
[空,空,空]
[空,空,空,空]
...

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

声明如

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

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

有关此问题的正式讨论,请阅读Java 语言规范

于 2015-03-07T13:11:43.367 回答