
怪事!怪事!JAVA;.题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
publicclassTest20{publicstaticvoidmain(String[]args){doublea[]=newdouble[20];//用数组a代表...
public class Test20 {
public static void main(String[] args) {
double a[] = new double[20]; //用数组a代表前20个分数中的分子
a[0] = 2;
a[1] = 3;
for (int i = 0; i < 18; i++) {
a[i+2] = a[i+1] + a[i];
}
double b[] = new double[20]; //用数组b代表前20个分数中的分子
b[0] = 1;
b[2] = 2;
for (int i = 0; i < 18; i++) {
b[i+2] = b[i+1] + b[i];
}
double sum = 0.0;
for (int i = 0; i < 20; i++) {
sum = sum + a[i]/b[i];
}
System.out.println(sum);
}
}
为什么运行结果是infinity? 展开
public static void main(String[] args) {
double a[] = new double[20]; //用数组a代表前20个分数中的分子
a[0] = 2;
a[1] = 3;
for (int i = 0; i < 18; i++) {
a[i+2] = a[i+1] + a[i];
}
double b[] = new double[20]; //用数组b代表前20个分数中的分子
b[0] = 1;
b[2] = 2;
for (int i = 0; i < 18; i++) {
b[i+2] = b[i+1] + b[i];
}
double sum = 0.0;
for (int i = 0; i < 20; i++) {
sum = sum + a[i]/b[i];
}
System.out.println(sum);
}
}
为什么运行结果是infinity? 展开
5个回答
展开全部
sum的值超出了double能表示的范围,所以是infinity
由于b[1]没有被赋值过,默认是0,作为被除数就超出double范围了。
b[2] = 2;改为b[1]=2;即可
由于b[1]没有被赋值过,默认是0,作为被除数就超出double范围了。
b[2] = 2;改为b[1]=2;即可
展开全部
b[0] = 1;
b[2] = 2;
你这个写的是b[2] 应该是b[1]啊
b[2] = 2;
你这个写的是b[2] 应该是b[1]啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
b[1]从来没有被赋值,所以是0,于是a[1]/b[1]就是infinity了。b[2] = 2;这句你大概是想写b[1] = 2;吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的代码写错了哦,请看你代码的11~12行,
b[0] = 1;
b[2] = 2;
第二个应该是b[1] = 2;吧?你直接是b[2]=2;那么b[1]=0;出现了分母是0,结果肯定会infinity啦
b[0] = 1;
b[2] = 2;
第二个应该是b[1] = 2;吧?你直接是b[2]=2;那么b[1]=0;出现了分母是0,结果肯定会infinity啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
求解?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询