Java 這道小題的錯誤在哪
問題描述
/* * 一球從100米高度自由落下,每次落地后反跳回原來高度的一半,再落下, * 求它在第10次落地時共經(jīng)過多少米?第10次反彈多高? * */修改的地方都加粗了public class Demo { public static void main(String[] args){//小球反彈后的高度double height = 100;//y用于記錄小球下落的高度double y = 0;//小球經(jīng)過的總路程**double sum = 0;**for(int i =1;i<=10;i++){ //記錄小球落下的高度 y = height ; //小球每次反彈后的高度 height = (**1.0**/2)*height; //因為第10次反彈的高度是不用加的 if(i<=9){//小球的總路程sum =y+height; }}System.out.println('共經(jīng)過'+sum+'米');System.out.println('第10次反彈的高度是:'+height+'米'); }}
問題解答
回答1:height = (1/2)*height ; 應(yīng)為 height = (1.0/2)*height ;, 否則它的值恒為 0.
因為 數(shù)值運算的類型轉(zhuǎn)換,導(dǎo)致整數(shù)的除法的結(jié)果也為整數(shù), 所以 1/2的結(jié)果為 0, 而不是 0.5.
還有 y 每次循環(huán)都重置了. 改為:
public class Demo { public static void main(String[] args){//小球的高度double height = 100;//小球經(jīng)過的距離double y = 0;for(int i=1;i<=10;i++){ //記錄小球每次往下落的距離,球彈起和下落,所以 height * 2 y = y + height*2; //反彈的高度 height = (1.0/2)*height ;}// 第一次落地沒有經(jīng)歷彈起過程,需減掉初始高度y = y - 100;System.out.println('共經(jīng)過'+y+'米');System.out.println('第10次反彈的高度是:'+height+'米'); }}回答2:
y = height 每次循環(huán)都重置了 y 值,哪里是在累加……
JavaScript 代碼算法示意
var height = 100var sum = height;for (var i = 2; i <= 10; i++) { sum += height; height /= 2}// sum == 299.609375,即總路程// 最后一次是第10次彈起再下落的總長,所以再除以2才是彈起的高度height /= 2; // 0.09765625回答3:

所以代碼可以這樣寫public class Demo {
public static void main(String[] args){ //小球的高度 double height = 100; //第一次小球經(jīng)過的距離 double y = height; //不算上第一次,到第10次還要經(jīng)歷9次 for(int i=1;i<=9;i++){ //反彈的高度每次都是前一次的一半height = (1/2)*height;//每一次彈跳往返都是高度的兩倍y += height*2; } System.out.println('共經(jīng)過'+y+'米'); System.out.println('第10次反彈的高度是:'+height+'米');}
}
相關(guān)文章:
1. docker gitlab 如何git clone?2. docker鏡像push報錯3. docker api 開發(fā)的端口怎么獲取?4. macos - mac下docker如何設(shè)置代理5. debian - docker依賴的aufs-tools源碼哪里可以找到啊?6. dockerfile - 我用docker build的時候出現(xiàn)下邊問題 麻煩幫我看一下7. docker - 如何修改運行中容器的配置8. docker start -a dockername 老是卡住,什么情況?9. angular.js使用$resource服務(wù)把數(shù)據(jù)存入mongodb的問題。10. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個是怎么回事????

網(wǎng)公網(wǎng)安備