为什么在javascript中跳过这个while循环?

时间:2017-04-30 22:58:26

标签: javascript while-loop

在这两种情况下,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();

5 个答案:

答案 0 :(得分:4)

这是无限循环的原因有两个。

  1. 您永远不会更新totalDistance。在代码中totalDistance是相同的值,因此如果第一次它始终为真则为真。

  2. 考虑while条件的逻辑:

    while(totalDistance&lt; 6 || totalDistance&gt; 0){...

  3. 如果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) { ...
    

    遗憾的是,英语对andor的逻辑用法非常懒惰。在英语中,当人们使用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)

您的循环会检查值totalDistanceh

但是,您的循环只会更新dayTravelcontainertravelresult

您需要更新totalDistanceh才能退出循环(由于||您需要更新totalDistance,确实如此)。

答案 3 :(得分:0)

  

循环变量变量设置为小于h 大于零。

呃...那你为什么在地球上写这个?:

while( totalDistance < h || totalDistance > 0) {

while (totalDistance < h && totalDistance > 0) {

除此之外,您正在评估totalDistanceh以便进入循环,但它们从未被触及过。当然结果将是无限循环或无操作。 &#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