我有以下代码,我试图从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);
}
}
答案 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。