JavaScript到标准Java的转换问题
我有一个JavaScript方法,我需要在标准Java中转换它,但我对行有一点问题
if (jsum) sum += bj;
jsum=!jsum;
及
return x < 0.0 && (n & 1) ? -ans : ans;
显示错误:运算符未定义。 我知道我不能在Java中使用这种语法,但我还不明白什么是正确的语法,可以在没有问题的情况下保持最初的目的
完整的JS方法是
function bessel_fkb(n,x)
{
if (n == null || n.length == 0) return "n not specified";
var iac = 40.0;
var bigno = 1.0e10;
var bigni = 1.0e-10;
var j,jsum,m,ax,bj,bjm,bjp,sum,tox,ans;
ax=Math.abs(x);
if (ax == 0.0) return 0.0;
else if (ax > n) {
tox = 2.0/ax;
bjm=BesselJ0(ax);
bj=BesselJ1(ax);
for (j=1;j<n;j++) {
bjp=j*tox*bj-bjm;
bjm=bj;
bj=bjp;
}
ans=bj;
} else {
tox=2.0/ax;
if (Math.sqrt(iac*n) >= 0)
m=2*((n + Math.floor(Math.sqrt(iac*n))) / 2);
else
m=2*((n + Math.ceil(Math.sqrt(iac*n))) / 2);
jsum=0;
bjp=ans=sum=0.0;
bj=1.0;
for (j=m;j>0;j--) {
bjm=j*tox*bj-bjp;
bjp=bj;
bj=bjm;
if (Math.abs(bj) > bigno) {
bj *= bigni;
bjp *= bigni;
ans *= bigni;
sum *= bigni;
}
if (jsum) sum += bj;
jsum=!jsum;
if (j == n) ans=bjp;
}
sum=2.0*sum-bj;
ans /= sum;
}
return x < 0.0 && (n & 1) ? -ans : ans;
}
我的完整Java转换尝试是:
public double bessel_fkb(double n, double x)
{
double iac = 40.0;
double bigno = 1.0e10;
double bigni = 1.0e-10;
double jsum,m,ax,bj,bjm,bjp,sum,tox,ans;
ax=Math.abs(x);
if (ax == 0.0) return 0.0;
else if (ax > n) {
tox = 2.0/ax;
bjm=BesselJ0(ax);
bj=BesselJ1(ax);
for (int j=1;j<n;j++) {
bjp=j*tox*bj-bjm;
bjm=bj;
bj=bjp;
}
ans=bj;
} else {
tox=2.0/ax;
if (Math.sqrt(iac*n) >= 0)
m=2*((n + Math.floor(Math.sqrt(iac*n))) / 2);
else
m=2*((n + Math.ceil(Math.sqrt(iac*n))) / 2);
jsum=0;
bjp=ans=sum=0.0;
bj=1.0;
for (int j=(int)m;j>0;j--) {
bjm=j*tox*bj-bjp;
bjp=bj;
bj=bjm;
if (Math.abs(bj) > bigno) {
bj *= bigni;
bjp *= bigni;
ans *= bigni;
sum *= bigni;
}
if (jsum) sum += bj;
jsum=!jsum;
if (j == n) ans=bjp;
}
sum=2.0*sum-bj;
ans /= sum;
}
return x < 0.0 && (n & 1) ? -ans : ans;
}
# 1 楼答案
注意
n
可能是int
型而不是double
,并且jsum
最可能是int
型或boolean
型下面的答案假设
n
为int
型jsum
为boolean
型在JavaScript中:
在Java中:
在JavaScript中:
在Java中:
如果
n
实际需要类型double
,那么在对1执行逐位和&
操作之前,必须将n
大小写为long
因为Java有严格的类型,所以最好弄清楚实际使用情况并相应地使用类型
# 2 楼答案
这:
应该是:
你必须引入一个明确的比较
这是:
应该是:
JavaScript在适当的上下文中执行非布尔类型的隐式转换,但Java不执行。(编辑啊,哎呀,必须先转换成
long
或其他东西)当然,从
double
到long
的转换不一定有意义。如果JavaScript代码可以工作,那么它应该是正常的。当然,如果可以的话,你可以重新做一次,把“n”变成一个整数(或长)# 3 楼答案
您不能这样写:
因为
(n&1)
在Java中不是有效的操作,因为n是双精度的,所以在JavaScript中,您可以通过这种方式测试n
是否是奇数,所以您只需编写:编辑:
您误解了
jsum
角色,无法将var jsum
视为double
,在Java中必须是boolean
看
毫无意义
jsum
作为双重# 4 楼答案
参数应该是int,我看到的jsum sum像布尔值一样使用
试试看: