我收到了一个有趣的JavaScript练习练习,我正在努力理解。下面的问题(截图)需要通过while循环来解决。
球的恢复系数,0到1之间的数字,表示当球击中刚性表面时保存多少能量。例如,系数为.9意味着弹跳球在每次弹跳后将升至其先前高度的90%。
编写程序以输入恢复系数和以米为单位的初始高度,并报告球在从其初始高度下降到高于10厘米的高度之前弹跳的次数。同时报告在此之前球的总行进距离。
网球,篮球,超级球和垒球的恢复系数分别为.7,.75,.9和.3。
我正在尝试使用下面的代码来完成此操作,但它只是挂起。
function code1() {
var heightM = getInputOne();
var heightCm = heightM * 100;
var coefficient = getInputTwo();
var distance = getInputOne();
var bounce = 0;
while (heightCm >= 10) {
bounce = bounce + 1;
distance = distance + (heightM * coefficient * 2);
heightCm = heightCm * coefficient;
}
console.log(bounce);
console.log(distance);
}
以下是在其中调用的函数
// Return the text in the 'In 1:' box
function getInputOne() {
var input = getElement("inOne");
return input.value;
}
// Return the text in the 'In 2:' box
function getInputTwo() {
var input = getElement("inTwo");
return input.value;
}
任何有关此的帮助将不胜感激。另外,请告诉我其他数据可能有用。
答案 0 :(得分:1)
有一些问题:
从input.value
属性读取的值是字符串,而不是数字。这会影响+
运算符在以下表达式中的工作方式:
distance = distance + (heightM * coefficient * 2);
由于distance
是一个字符串,+
是串联,而不是加法。所以distance
只会增长一串数字。
虽然您在每次迭代中都会调整heightCm
,但您不会对heightM
执行相同操作。它保持原始值,因此距离计算错误。
您应该检查coefficient
的输入值是否在限制范围内。如果允许值为1或更大,那么计算出的高度将在循环的每次迭代中增加,这将使其挂起。
所以我会建议这段代码:
function getBounces(heightM, coefficient) {
var distance = heightM; // avoid reading input twice
var bounce = 0;
while (heightM >= 0.10) { // just compare with meters...
bounce = bounce + 1;
heightM = heightM * coefficient;
distance = distance + heightM * 2;
if (bounce > 100) throw "error";
}
return [bounce, distance];
}
document.getElementById('calc').addEventListener('click', function() {
var heightM = getInputOne();
var coefficient = getInputTwo();
if (coefficient >= 1 || coefficient < 0) {
alert('invalid input for coefficient');
return;
}
var result = getBounces(heightM, coefficient);
outputResults(result[0], result[1]);
});
// Return the text in the 'In 1:' box
function getInputOne() {
var input = document.getElementById("inOne");
return +input.value; // add the + for conversion to number
}
// Return the text in the 'In 2:' box
function getInputTwo() {
var input = document.getElementById("inTwo");
return +input.value; // add the + for conversion to number
}
function outputResults(bounce, distance) {
var output = document.getElementById("bounce");
output.textContent = bounce;
output = document.getElementById("dist");
output.textContent = distance.toFixed(2);
}
Height: <input id="inOne">m<br>
Coefficient: <input id="inTwo"> (0 ... 0.99)<br>
<button id="calc">Calculate</button>
<br>
Bounces: <span id="bounce"></span><br>
Distance: <span id="dist"></span>m<br>