大家来找茬,题目很简单但是问题出在哪呢

波风水门 2012-03-23 04:05:21
/**
【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。
*/
import java.util.*;
public class TestFractionSum {
private static double sum = 0.0;
public static void main(String args[]) {
int temp;
double numerator,denominator,fun;
System.out.println("你想计算前多少项的和,请输入一个正整数:");
Scanner input = new Scanner(System.in);
temp = input.nextInt();
for(int i=1;i<=temp;i++) {
numerator = (double)(i + 1);
denominator = (double)i;
sum = sum + numerator/denominator;
fun = numerator + denominator;
denominator = numerator;
numerator = fun;
}
System.out.println("前"+temp+"项的和是:"+sum);
}
}


这个是本人写的程序,检查了一下思路,觉得没有错,但是在测试答案的正确性的时候却出现了误差,请各位大侠指教!
...全文
603 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
波风水门 2012-03-23
  • 打赏
  • 举报
回复
大家说的都对,我就把分数给最先回复的对我有用的那个了!
波风水门 2012-03-23
  • 打赏
  • 举报
回复
确实 当时以为分子分母是一个等差数列,后面发现了改了过来,前面初始化分子分母的就忘了改了,哎弄久了头疼,谢谢给位了!
菖蒲老先生 2012-03-23
  • 打赏
  • 举报
回复
numerator = (double)(i + 1);
denominator = (double)i;
这两句不能写在循环体内,
删掉,不然你下面赋值全部无效。

放在for循环外定义。
double numerator =2.0;
double denominator =1.0;

luyang1016 2012-03-23
  • 打赏
  • 举报
回复
是不是少个括号啊
一条大红龙 2012-03-23
  • 打赏
  • 举报
回复
楼主,你这个for循环里写的有问题,你for循环里有分两段,
第一段:
//根据循环的下表给numerator和denominator赋值
numerator = (double) (i + 1);
denominator = (double) i;
//循环加
sum = sum + numerator / denominator;

第二段:
fun = numerator + denominator;
denominator = numerator;
numerator = fun;
这一段根据分子分母的规律给numerator和denominator循环赋值。

但关键问题是:每次循环过来都会执行第一段代码,根据循环下表赋值,
也就是说,你的第二段代码其实是死代码,执行到了,但是没有用到。

修改方法:numerator和denominator在循环外面初始化,然后在循环里面根据规律赋值。


numerator = (double) (2);
denominator = (double) 1;
for (int i = 1; i <= temp; i++) {
sum = sum + numerator / denominator;
fun = numerator + denominator;
denominator = numerator;
numerator = fun;
}


这样应该就没问题了
X497347200 2012-03-23
  • 打赏
  • 举报
回复
规律:
1.第二个数的分子是前一个数分子+分母。
2.第二个数的分母是前一个数的分子。
X497347200 2012-03-23
  • 打赏
  • 举报
回复

double sum=0;
double numerator =2;
double denominator =1;
int temp = input.nextInt();
for(int i=1;i<=temp;i++) {
sum = sum + numerator/denominator;
double numerator_record=numerator;
numerator=numerator+denominator;
denominator=numerator_record;
}


quhuafeng521 2012-03-23
  • 打赏
  • 举报
回复
import java.util.*;
/**
【程序20】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。
*/

public class TestFractionSum {
private static double sum = 0.0;

public static void main(String args[]) {
int temp;
double numerator, denominator, fun;
System.out.println("你想计算前多少项的和,请输入一个正整数:");
Scanner input = new Scanner(System.in);
temp = input.nextInt();
numerator = 2.0;
denominator = 1.0;
for (int i = 1; i <= temp; i++) {

sum = sum + numerator / denominator;
fun = numerator + denominator;
denominator = numerator;
numerator = fun;
}
System.out.println("前" + temp + "项的和是:" + sum);
}
}

你的FOR每次都会重置分子也分母的。
topdrrr 2012-03-23
  • 打赏
  • 举报
回复
这个fun完全没用到计算上吧?

非第一次运算 sum就不该再是 numerator/denominator

比如当i等于3

第三个sum应该是5/3

而楼主这个却是 4/3

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧