黑马程序员技术交流社区

标题: Java问题 [打印本页]

作者: 华行天下    时间: 2013-8-15 14:17
标题: Java问题
一球从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也不怎么懂..希望明白人 帮小弟详细讲解一下

作者: binghaiwang    时间: 2013-8-15 14:45
本帖最后由 binghaiwang 于 2013-8-15 14:48 编辑

i=2是因为第一次第0次都没有反弹的高度,后边a=a+b*2   你画个这个球上下跳动的图就明白了, 小球在地面上弹起来再落下去其实就是走了b这个距离的2次,之后都是重复的了
作者: EYE_SEE_YOU    时间: 2013-8-15 14:46
这是答案
作者: 曹满林    时间: 2013-8-15 15:51
循环结束是因为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;
不知道我的理解是否有误,不知道对你是否有正面的帮助
作者: 清心玉质    时间: 2013-8-15 17:18
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米





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