黑马程序员技术交流社区

标题: 一球从100米高度自由落下,每次落地后反跳回原高度的一... [打印本页]

作者: 沐小北    时间: 2014-7-18 16:56
标题: 一球从100米高度自由落下,每次落地后反跳回原高度的一...
  1. /*
  2. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  3. */


  4. class  Ball
  5. {
  6.         public static void main(String[] args)
  7.         {

  8.                 //定义2个变量,h代表高度,s是经过的路程
  9.                 double h = 100, s = 100;        //从100米高度落下,所以s初始值就是100
  10.                 for (int i = 1; i < 10; i++);        //因为第一次已经计算在内(s=100),所以需要在落下9次.即循环9次
  11.                         s = s + h;        //每次落下的高度就是相加
  12.                         h = h / 2;        //每次高度都减少一半

  13.                 System.out.println("经过路程:" + s);
  14.                 System.out.println("反弹高度:" + h / 2);
  15.         }
  16. }
复制代码
輸出結果:經過路程:200;反彈高度:25;


作者: meibinlove    时间: 2014-7-18 17:15
我也打了一遍,和你的输出结果不一样
作者: meibinlove    时间: 2014-7-18 17:19
你的代码至少输出了十八个值
作者: meibinlove    时间: 2014-7-18 17:21
我看错了,你的for循环没加大括号,只有两个值
作者: 沐小北    时间: 2014-7-18 17:25
meibinlove 发表于 2014-7-18 17:21
我看错了,你的for循环没加大括号,只有两个值

哦  知道了  路程是不是一千米。
作者: More    时间: 2014-7-18 17:29
for循环跟一个分号  for循环等于没有定义
作者: meibinlove    时间: 2014-7-18 17:33
沐小北 发表于 2014-7-18 17:25
哦  知道了  路程是不是一千米。

咱用公式推一下:第一次是一百,第二次是一半也就是五十,以此类推结果不超过200;我也用的double类型,结果是199.8046875,第十次反弹是:0.1953125
作者: 单线程xia    时间: 2014-7-18 17:33
看到循环后面一个大大的分号
作者: meibinlove    时间: 2014-7-18 17:35
单线程xia 发表于 2014-7-18 17:33
看到循环后面一个大大的分号

没注意:L
作者: Imp_x    时间: 2014-7-18 23:47
meibinlove 发表于 2014-7-18 17:33
咱用公式推一下:第一次是一百,第二次是一半也就是五十,以此类推结果不超过200;我也用的double类型, ...

在思路上我有一个问题想问一下= =第一次直接落地是100米  然后是反跳原高度的一半对吧  那反弹上去就50米  又重新掉下来也50米 所以一上一下这样路程不也100米吗??然后50米 25米 12.5米 ......这样子  难道不应该是这样的吗0.0问的是共经过多少米
作者: 沐小北    时间: 2014-7-19 09:06
More 发表于 2014-7-18 17:29
for循环跟一个分号  for循环等于没有定义

哦   多大了一个,但是我打印的结果 确实是 1000米的。
作者: 沐小北    时间: 2014-7-19 09:07
Imp_x 发表于 2014-7-18 23:47
在思路上我有一个问题想问一下= =第一次直接落地是100米  然后是反跳原高度的一半对吧  那反弹上去就50米 ...

我们的思维是一致的,呵呵……
作者: Imp_x    时间: 2014-7-19 12:03
自己敲了一遍代码= =算出来路程S=299.609375  反弹高度0.09765625
作者: scoto263    时间: 2014-11-17 15:44
哥们,感觉你的好像不对呀100米弹了10次还能弹到25米的高空??
作者: scoto263    时间: 2014-11-18 00:02
嗯,代码很精练
作者: ye361571404    时间: 2014-11-19 14:19
meibinlove 发表于 2014-7-18 17:33
咱用公式推一下:第一次是一百,第二次是一半也就是五十,以此类推结果不超过200;我也用的double类型, ...

我和你的一样
作者: onETT    时间: 2015-5-9 04:56
ye361571404 发表于 2014-11-19 14:19
我和你的一样

只算下落的,没算弹起的!
作者: fanxin_meng    时间: 2015-7-3 16:23
Imp_x 发表于 2014-7-19 12:03
自己敲了一遍代码= =算出来路程S=299.609375  反弹高度0.09765625

这个应该是正解吧
作者: heshaosheng    时间: 2016-1-5 10:32
本帖最后由 heshaosheng 于 2016-1-5 11:04 编辑

/*
*题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;
*再落下,求它在?第10次落地时,共经过多少米?第10次反弹多高?
*/

public class LuoQiu{
         public static void main(String[] args){
                 double last_height = 0;     //记录最后的一次反弹高度
                 double current_height = 100;    //初始当前高 /*
* 如果要计算下落使用 double count_height = current_height ,
* 现在不使用下落计算
*/                 double count_height = 0;      //记录反弹高度总和
                 for(int i=1;i<=10;i++){
                         if(i != 10){                                //如果是第十次前的落球
                                 current_height = current_height / 2;      //记录当前反弹高度
                         }else{
                                 current_height = last_height = current_height / 2;    //如果是第十次落球(最后一次)记录当前反弹高度(也是最后一次反弹高度)
                         }
                         count_height += current_height;        //10次反弹高度总和(只计算反弹高度,如果计算下落使用count_height += current_height * 2)。
                 }
                 System.out.println("球在第十次落地后共经过了 "+count_height+" 米,第十次反弹的高度为 "+last_height+" 米");
         }
}






作者: heshaosheng    时间: 2016-1-5 10:38
最后的输出结果为 99.90234375(只计算反弹高度,没有计算下落)米和0.09765625米。

QQ图片20160105103559.png (1.71 KB, 下载次数: 88)

QQ图片20160105103559.png





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