黑马程序员技术交流社区

标题: 请问 出现这种问题的原因 [打印本页]

作者: wangyuyus    时间: 2013-11-5 21:44
标题: 请问 出现这种问题的原因
一球从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-11-5 22:02
第一次落地:100米
第二次落地:升50米,降50米
第三次落地:升25米,降25米
a是经过的距离,b是下一次反跳的高度
第一次落地:a=100,b=a/2=50
for循环是说第i次落地时(i从2到10),求出a和b的值
第2次落地:
一升一降的距离正好是b*2=50*2=100,加上之前跑过的距离a=100,所以 a = a+b*2=200,下一次反跳的高度是这次的一半25=b/2,所以b=b/2
作者: wenbaoxing    时间: 2013-11-5 22:33
请看我的注解:
  1. package com.itheima.test;

  2. //一球从100米高度自由落下,每次落地后又反跳回原高度的一半;再落下,求它第10次落地时共经过多少米.
  3. //第十次反弹多高...
  4. class Test {
  5.         public static void main(String args[]) {
  6.                
  7.                 //定义开始时是从100米处落下,相当于第一次落地,经过的路程是100米
  8.                 double a = 100;
  9.                
  10.                 //定义第一次落地后会反弹至多高,也就是第二次下落时的初始高度
  11.                 double b = a / 2;
  12.                
  13.                 //定义一个变量记录落地的次数
  14.                 int i = 0;
  15.                
  16.                 //前面已经算出了第一次落地所经过的路程,也计算出了第二次初始下落的高度,
  17.                 //下面的for语句一次计算第2、3、4...次的总路程,和反弹高度,并分别用a、b两个变量进行记录
  18.                 for (i = 2; i <= 10; i++) {
  19.                         a = a + b * 2;
  20.                         b = b / 2;
  21.                 }
  22.                 System.out.println("第" + i + "次落地经过时" + "共" + a + "米");
  23.                 System.out.println("第" + i + "次落地时" + "共反弹" + b + "米");
  24.         }
  25. }

  26. // 请问一下 为什么i=2?我没有看懂..我算出来的结果是第11次经过和弹起 可是我算的是第10次啊 怎么搞的但是 答案还对
  27. // 我有点迷糊了..还有a=a+b*2也不怎么懂..希望明白人 帮小弟详细讲解一下
复制代码

作者: 楞个里格朗    时间: 2013-11-5 23:27
a在这里指的是所有次数弹跳高度总和,b指的是落地后又返回原来高度的一半。整体来看不管小球跳多少次b都是a的1/2高度 。
a=a+b*2的意思是:
a新总高度(a)=上一次总高度(a)+下一次起跳和落地高度(b*2)
至于你说的i为什么等于2你可以自己想象下,它是从小球第一次下落开始计数的,所以当小球落地回弹到最高点时,落地次数为1 而到达最高点的次数已经达到2了。楼主找个小球试试就知道了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2