Java基础编程题
解决时间 2021-05-02 13:06
- 提问者网友:鐵馬踏冰河
- 2021-05-02 02:54
一个球从100米高度自由落下,每次落地后反弹回原高度的一半;再落下,求在第几次之后反弹高度小于0.1米,并计算在这一次落地时共经过多少米?
public class WrongCode {
public static void main(String[] args) {
double sn = 100.0;
double hn = 100.0 / 2;
int n;
for (n = 1; n <= 20; n++) {
if (hn < 0.1) {
break;
}
sn = sn + 2 * hn / 2;
hn = hn / 2;
}
System.out.println("在第" + (n - 1) + "次反弹的高度小于0.1米!");
System.out.println("第" + (n - 1) + "次落地共经过" + sn + "米");
System.out.println("第" + (n - 1) + "次反弹的高度是" + hn + "米");
}
}
请问这段代码中的逻辑错误是什么?
最佳答案
- 五星知识达人网友:躲不过心动
- 2021-05-02 03:13
这是我的答案。希望对你有所帮助
public class Test {
public static void main(String[] args) {
double high = 100;//高度
double sum = 0;//经过路程
for (int i = 1; i < 100; i++) {
if (i == 1) {
sum += high;//第一次落下单独计算
} else {
sum += high * 2;//第一次落下来还要弹上去,然后再下来。所有要乘以2
}
high = high / 2;
System.out.println("第" + i + "次落地共经过" + sum + "米");
System.out.println("第" + i + "次反弹的高度是" + high + "米");
if (high < 0.1) {
System.out.println("在第" + i + "次反弹的高度小于0.1米!");
return;
}
}
}
}
全部回答
- 1楼网友:第四晚心情
- 2021-05-02 06:21
- 2楼网友:往事隔山水
- 2021-05-02 05:55
public class WrongCode {
public static void main(String[] args) {
double i ;//每次反弹高度
int count = 1;//计次数
double sum = 100;//计共进过路程
for( i = 100/2 ; i >= 0.1 ; count++ , sum = sum + i , i = i / 2 ){
System.out.println("第" + count + "次落地共经过" + sum + "米");
System.out.println("第" + count + "次反弹的高度是" + i + "米");
}
System.out.println("在第" + count + "次反弹的高度小于0.1米!");
}
}
- 3楼网友:刀戟声无边
- 2021-05-02 05:01
首先是小球是从1开始计算的,sn = sn + 2 * hn / 2;这句代码就不知道什么意思了
- 4楼网友:你可爱的野爹
- 2021-05-02 03:57
sn = sn + 2 * hn / 2; hn是第n次反弹的高度,没必要除以2
而且应该放在if的前面,先加上后,再判断
System.out.println("在第" + (n - 1) + "次反弹的高度小于0.1米!");
这里三个(n - 1) 都应该是 n, 因为hn<0.1那里break时就是第n次反弹,没必要-1
我要举报
大家都在看
推荐资讯