У меня есть следующий код, который я пытаюсь преобразовать из C++ в Java. Предполагается, что код будет генерировать биномиальное дерево, которое будет использоваться для расчета цены опционов на акции. Вот следующий C++ код:Преобразование биномиального дерева в C++ в Java
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? – RealSkeptic
Ну нет указателей в java. И способ, которым 2d-массив инициализируется в коде C++, является динамическим. –
На самом деле, java - это почти ТОЛЬКО основанные указатели и распределение кучи. Они называют их ссылкой, но поведение в значительной степени идентично указателям C++ (минус указатель арифметики). – MikeMB