VBA到Java转换循环

VBA到Java转换循环,java,vba,Java,Vba,以下是原始vba代码: 对于i=0到M St(i)=i*dS' C(N,i)=最大值(0,z*(St(i)-X)) 下一个 对于j=N-1到0,步骤-1 对于i=1到M-1 pu=0.5*(v^2*i^2+b*i)*dt pm=1-v^2*i^2*dt pd=0.5*(v^2*i^2-b*i)*dt C(j,i)=Df*(pu*C(j+1,i+1)+pm*C(j+1,i)+pd*C(j+1,i-1)) 如果AmeEurFlag=“a”,则 C(j,i)=最大值(z*(St(i)-X),C(j,i

以下是原始vba代码:

对于i=0到M
St(i)=i*dS'
C(N,i)=最大值(0,z*(St(i)-X))
下一个
对于j=N-1到0,步骤-1
对于i=1到M-1
pu=0.5*(v^2*i^2+b*i)*dt
pm=1-v^2*i^2*dt
pd=0.5*(v^2*i^2-b*i)*dt
C(j,i)=Df*(pu*C(j+1,i+1)+pm*C(j+1,i)+pd*C(j+1,i-1))
如果AmeEurFlag=“a”,则
C(j,i)=最大值(z*(St(i)-X),C(j,i))
如果结束
下一个
如果z=1,则
C(j,0)=0
C(j,M)=(St(i)-X)
其他的
C(j,0)=X
C(j,M)=0
如果结束
下一个
我想转换成java这是我的代码:

for (int i = 0; i < M; i++) 
{
    St[i] = i * dS;
    C[(int) N][i] = Math.max(0, z * (St[i] - X)); 
}


for (int j = (int) (N - 1); j < 0; j--) 
{
    for (int i = 1; i < M-1; i++) 
    {
        pu = 0.5 * (Math.pow(v, 2) * Math.pow(i, 2)+ b * i) * dt;
        pm = 1 - Math.pow(v, 2) * Math.pow(i, 2)* dt;
        pd = 0.5 * (Math.pow(v, 2)* (Math.pow(i, 2) - b * i) * dt);

        C[j] [i] = Df * (pu * C[j + 1] [i + 1] + pm * C[j + 1] [i] + pd * C[j + 1] [i - 1]);
        if (AmeEurFlag == "a" ) 
        {
            C[j] [i] = Math.max(z * (St[i] - X), C[j][i]);

        }
        }

    if (z == 1) 
    {
        C[j][0] = 0;
        C[j][M] = (St[i] - X);
    }           
    else
    {
        C[j][0] = X;
        C[j][M] = 0;

    }
}
for(int i=0;i
我这行有个错误 C[j][M]=(St[i]-X);
因为没有“i”变量。我不在第一圈。所以eclipse说您应该创建一个变量。在vba中,我可以在代码的开头创建一个变量,比如:“Dim I As Integer”,但在java中,这是可能的吗?我怎样才能解决这个问题?提前感谢

我在循环之前声明。因为这是一个Java问题,所以在这种语言中for循环有很大的不同,您必须考虑范围

int i;
for (i = 1; i < M-1; i++) 
{
}
//i retains its value here
inti;
对于(i=1;i

原因是在VBA中,一旦初始化,i将保留在范围内。在Java for循环中,该变量在完成时被销毁,除非之前声明了它。VB让我头疼,因为我经常在代码中重复使用。

我所指的是什么??这是循环?这个问题似乎离题了,因为它是关于任何教程中都会涉及的基本Java语法。实际上我不确定,但在VBA代码中,它只在循环中使用,并在代码的开头创建。“Maybe Dim i As Integer”给出了一个默认值,如0?@chrylis我的问题不是关于Java语法。这是关于VBA的。我不明白VBA中循环之后如何使用“I”变量,以及如何转换为Java?