A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 华行天下 中级黑马   /  2013-8-15 14:17  /  1384 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一球从100米高度自由落下,每次落地后又反跳回原高度的一半;再落下,求它第10次落地时共经过多少米.第十次反弹多高...

public static void main(String args[]){
   
   double a =100;
   double b =a/2;
   int i =0;
   for (i =2;i<=10;i++){
    a = a+b*2;
    b = b/2;
   }System.out.println("第"+i+"次落地经过时"+"共"+a+"米");
    System.out.println("第"+i+"次落地时"+"共反弹"+b+"米");
请问一下 为什么i=2?我没有看懂..
我算出来的结果是第11次经过和弹起 可是我算的是第10次啊 怎么搞的但是 答案还对 我有点迷糊了..还有a=a+b*2也不怎么懂..希望明白人 帮小弟详细讲解一下

点评

你的发帖和想进黑马培训的帖子内容完全相同,刷帖的话小心技术分清零啊  发表于 2013-8-15 14:51

评分

参与人数 1技术分 -2 收起 理由
夜默 -2 考试没有不作弊的,但是也要想好被抓的后果.

查看全部评分

5 个回复

倒序浏览
本帖最后由 binghaiwang 于 2013-8-15 14:48 编辑

i=2是因为第一次第0次都没有反弹的高度,后边a=a+b*2   你画个这个球上下跳动的图就明白了, 小球在地面上弹起来再落下去其实就是走了b这个距离的2次,之后都是重复的了
回复 使用道具 举报
回复 使用道具 举报
循环结束是因为i>10(即i=11),所以你打印i时,就成了11次了,还有,你的a计算是正确的,但是你的b多除了一个2吧,因为下一次的反弹没有做,你就做到10次,而此时的b值是第11次的反弹!
i=2是因为肯定没有第0次,而第一次为100,且已经被前边double a =100;
初始化后并通过a = a+b*2;
进行了计算,所以i=2是从第二次开始算起的
a是用来计算总长度的,b是用来记录球弹起的高度,一个球弹起再落下,所以是b*2因此总长度为a = a+b*2;
不知道我的理解是否有误,不知道对你是否有正面的帮助
回复 使用道具 举报
public static void main(String args[]){
   
   double a =100;
   double b =a/2;
   int i =0;
   for (i =2;i<=10;i++){
    a = a+b*2;
    b = b/2;
   }System.out.println("第"+i+"次落地经过时"+"共"+a+"米");
    System.out.println("第"+i+"次落地时"+"共反弹"+b+"米");
请问一下 为什么i=2?//因为第一次落地和反弹数据就是初始化数据 a=100和b=a/2
我算出来的结果是第11次经过和弹起 可是我算的是第10次啊//注意i++,第十次循环后自增1,
还有a=a+b*2//弹起落下 ,抛物线,上下距离一样

可以修改下代码
class sdf{
public static void main(String args[]){
     
     double a =100;
     double b =a/2;
     int i =0;
     for (i =1;i<10;++i){
      a = a+b*2;
      b = b/2;
     }System.out.println("第"+i+"次落地经过时"+"共"+a+"米");
      System.out.println("第"+i+"次落地时"+"共反弹"+b+"米");
        
}
}out:第10次落地经过时共299.609375米
第10次落地时共反弹0.09765625米
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马