在这两种情况下,while循环应该评估为true。
循环变量is variable设置为小于h
且大于零。
function snailClimb(){
var h = 6;
var u = 3;
var d = 1;
var f = 10;
var result = 0;
var dayTravel;
var container = [];
var initialDay = u - d;
container.push(initialDay);
var travel = u;
var totalDistance;
totalDistance = container.reduce((prev, curr) => prev + curr );
while( totalDistance < h && totalDistance > 0) { // BEFORE IT WAS || instead of &&
dayTravel = travel - (travel * (f/100));
if (dayTravel !== 0){
container.push(dayTravel);
}
travel = dayTravel;
container.push(-d);
result++;
totalDistance = container.reduce((prev, curr) => prev + curr ); // this was added as well.
}
console.log(totalDistance);
console.log(result);
}
snailClimb();
答案 0 :(得分:4)
这是无限循环的原因有两个。
您永远不会更新totalDistance
。在代码中totalDistance
是相同的值,因此如果第一次它始终为真则为真。
考虑while
条件的逻辑:
while(totalDistance&lt; 6 || totalDistance&gt; 0){...
如果totalDistance
超过6(h
的值),那么它将评估为:
while (false || true) ...
与while (true) ..
如果totalDistance
小于0,则评估为:
while (true || false ) ...
与while (true) ..
如果totalDistance
介于6和0之间,那么它将评估为:
while (true || true) ...
正如您所看到的,没有条件,while循环将终止。
你可能想要的是:
while (totalDistance < h && totalDistance > 0) { ...
遗憾的是,英语对and
和or
的逻辑用法非常懒惰。在英语中,当人们使用or
这个词时,他们的意思是逻辑and
,这是完全正常的。要小心用英语思考。编程时,您需要以Methamatically的方式思考。
答案 1 :(得分:3)
private void setTextView() {
TextView textView = new ResponsiveTextView(super.getContext());
LayoutParams params = new LayoutParams(new LinearLayout.LayoutParams(ViewGroup
.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
textView.setLayoutParams(params);
textView.setText(course.getName());
//You should reference the object being created rather than the super class
this.addView(textView);
}
永远不会在循环内部发生变化。因此,条件totalDistance
永远不会有不同的评估。
答案 2 :(得分:0)
您的循环会检查值totalDistance
和h
。
但是,您的循环只会更新dayTravel
,container
,travel
,result
。
您需要更新totalDistance
或h
才能退出循环(由于||
您需要更新totalDistance
,确实如此)。
答案 3 :(得分:0)
循环变量变量设置为小于
h
且大于零。
呃...那你为什么在地球上写这个?:
while( totalDistance < h || totalDistance > 0) {
while (totalDistance < h && totalDistance > 0) {
除此之外,您正在评估totalDistance
和h
以便进入循环,但它们从未被触及过。当然结果将是无限循环或无操作。 &#34;没什么大惊喜&#34;,沉重说。
我的建议?回到草稿或图表(如果有的话),再考虑一下你需要哪些变量以及如何使用它们。这是一团糟,据我所知,这是修复它的唯一方法。至少当我开始使用时,我必须修复我自己的混乱时起作用了。
但是,不要过分担心。经过一些尝试,我确信你应该能够编写你真正打算做的事情。祝你好运!答案 4 :(得分:0)
要获得预期结果,请使用以下选项
1.重要的事情要记住使用&#39;而#39;是为了确保有一些参数使其条件为假
2.修改条件以便将结果评估为h并成功执行while循环
while(结果&lt; h)
JS:
function snailClimb(){
var h = 6;
var u = 3;
var d = 1;
var f = 10;
var result=0;
var dayTravel;
var container = [];
var initialDay = u - d;
container.push(initialDay);
var travel = u;
var totalDistance=0;
while( result < h) {
dayTravel = travel - (travel * (f/100));
if (dayTravel !== 0){
container.push(dayTravel);
}
travel = dayTravel;
container.push(-d);
result++;
totalDistance = container.reduce((prev, curr) => prev + curr );
}
console.log("total Distance",totalDistance);
console.log("result", result + 1);
}
snailClimb();
codepen url供参考 - https://codepen.io/nagasai/pen/RVVLvd