Java 這道小題的錯誤在哪
問題描述
/* * 一球從100米高度自由落下,每次落地后反跳回原來高度的一半,再落下, * 求它在第10次落地時共經過多少米?第10次反彈多高? * */修改的地方都加粗了public class Demo { public static void main(String[] args){//小球反彈后的高度double height = 100;//y用于記錄小球下落的高度double y = 0;//小球經過的總路程**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('共經過'+sum+'米');System.out.println('第10次反彈的高度是:'+height+'米'); }}
問題解答
回答1:height = (1/2)*height ; 應為 height = (1.0/2)*height ;, 否則它的值恒為 0.
因為 數值運算的類型轉換,導致整數的除法的結果也為整數, 所以 1/2的結果為 0, 而不是 0.5.
還有 y 每次循環都重置了. 改為:
public class Demo { public static void main(String[] args){//小球的高度double height = 100;//小球經過的距離double y = 0;for(int i=1;i<=10;i++){ //記錄小球每次往下落的距離,球彈起和下落,所以 height * 2 y = y + height*2; //反彈的高度 height = (1.0/2)*height ;}// 第一次落地沒有經歷彈起過程,需減掉初始高度y = y - 100;System.out.println('共經過'+y+'米');System.out.println('第10次反彈的高度是:'+height+'米'); }}回答2:
y = height 每次循環都重置了 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; //第一次小球經過的距離 double y = height; //不算上第一次,到第10次還要經歷9次 for(int i=1;i<=9;i++){ //反彈的高度每次都是前一次的一半height = (1/2)*height;//每一次彈跳往返都是高度的兩倍y += height*2; } System.out.println('共經過'+y+'米'); System.out.println('第10次反彈的高度是:'+height+'米');}
}
相關文章:
1. python - 獲取到的數據生成新的mysql表2. javascript - js 對中文進行MD5加密和python結果不一樣。3. mysql里的大表用mycat做水平拆分,是不是要先手動分好,再配置mycat4. window下mysql中文亂碼怎么解決??5. sass - gem install compass 使用淘寶 Ruby 安裝失敗,出現 4046. python - (初學者)代碼運行不起來,求指導,謝謝!7. 為啥不用HBuilder?8. python - flask sqlalchemy signals 無法觸發9. python的文件讀寫問題?10. 為什么python中實例檢查推薦使用isinstance而不是type?
