java中未写入数组的元素

java中未写入数组的元素,java,arrays,Java,Arrays,所以我写了一个程序,用来解一个给定一个参数int n的具体方程。我的密码是: static double getSolution1(int n) { double [] a = new double[n+1]; a[0] =-1; for (int i = 1; i < n+1; i++) { a[i] = a[i-1] * ( ( 2 / ( 3 * n ) ) * Math.cos(2 * a[i-1]) ); } re

所以我写了一个程序,用来解一个给定一个参数int n的具体方程。我的密码是:

 static double getSolution1(int n)
{
    double [] a = new double[n+1];
    a[0] =-1;
    for (int i = 1; i < n+1; i++)
    {
        a[i] = a[i-1] * ( ( 2 / ( 3 * n ) ) * Math.cos(2 * a[i-1]) );
    }
    return a[n];
}
static double getSolution1(int n)
{
双精度[]a=新双精度[n+1];
a[0]=-1;
对于(int i=1;i

据我所知,代码运行良好,应该填充数组的各个部分。但这并没有发生,除了我告诉程序的[0]=-1之外,它将所有其他条目视为0,就好像它没有经历循环一样。使用调试,这是我能真正找到的唯一问题。如何解决这个问题?

2/3*n会给你零,使用所有浮点数或双精度浮点数,比如2.0f 3.0f

将“2/(3*n)”评估为int;结果是0


要解决这个问题,请将其更改为“2.0/(3.0*n)”

正如Pulkit所说,2/3*n产生零。为什么?

整数除法总是将结果四舍五入到最接近的整数。因此:

2 / 3 = .666
floor(.666) = 0
要防止出现这种情况,可以在2或3的末尾添加
f
。这将导致操作以浮点而不是整数计算,从而避免舍入

2f / 3f
您还可以将
d
添加到2或3。这将导致操作计算为双精度而不是整数

2d / 3d

表达式(2/(3*n)返回一个整数类型。因此,对于1和0之间的每个数字,int类型将为0。您可以做的是让编译器将2和3视为浮点类型或双精度类型。您可以使用2.0而不是2。或者使用3.0而不是3

对不起,请您再解释一下,好吗?当您使用2/3这样的整数时,结果为零,因此您的所有数组元素都将被删除乘以零。为了防止出现这种情况,请使用2.0f/3.0f,这将给出浮点值