java中未写入数组的元素
所以我写了一个程序,用来解一个给定一个参数int n的具体方程。我的密码是: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
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,这将给出浮点值