You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何`count === 0 && (index = 0)`与`count === 0, index = 0;`逻辑有差异?

跳跃云重制版:逻辑问题解析与索引循环实现

一、逗号运算符与逻辑与(&&)的核心差异

你原来写的count === 0, index = 0;是逗号运算符的用法,而修改后的count === 0 && (index = 0)是利用了逻辑与的短路特性,两者行为完全不同:

  1. 逗号运算符的行为:

    • 逗号运算符会依次执行左右两个表达式,不管左边表达式结果是true还是false,右边表达式一定会执行。
    • 在原代码中,每次进入while循环都会强制把index重置为0,导致每次跳转都从云0出发,永远固定跳到(0 + k) % n的位置,无法正常遍历后续云,最终要么无限循环,要么得到错误的能量值。
  2. 逻辑与(&&)的短路特性:

    • 逻辑与运算中,只有左边表达式结果为true时,才会执行右边表达式;如果左边为false,右边表达式会直接跳过(短路)。
    • 这里只有第一次循环时count === 0为true,才会初始化index为0;后续循环count大于0,左边条件不成立,就不会再重置index,这样index能保留上一次跳转后的位置,继续计算下一个目标云,直到跳回云0结束循环。

二、索引循环跳转的正确实现思路

你提到用for循环无法实现回到数组起始位置的逻辑,本质是没抓住“循环直到回到云0”的终止条件,这里提供三种可靠实现方式:

方式1:修正后的while循环

let c = [1,1,1,0,1,1,0,0,0,0];
let e = 100;
let k = 3;
let n = c.length;

const jumpingOnClouds = () => {
    let count = 0;
    let index;
    // 循环条件:第一次必须执行(count===0),之后直到跳回云0
    while (count === 0 || index !== 0) {
      // 仅第一次循环初始化index为0
      count === 0 && (index = 0);
      // 计算下一个跳转的云索引
      index = (index + k) % n;
      // 扣除对应能量
      e = c[index] > 0 ? e - 3 : e - 1;
      count++;
    }
    return e;
};

console.log(jumpingOnClouds());

方式2:更直观的do-while循环

do-while天然适合“至少执行一次,直到满足终止条件”的场景:

let c = [1,1,1,0,1,1,0,0,0,0];
let e = 100;
let k = 3;
let n = c.length;

const jumpingOnClouds = () => {
    let currentIndex = 0;
    do {
        // 跳转到下一个云
        currentIndex = (currentIndex + k) % n;
        // 根据云类型扣能量
        e -= c[currentIndex] ? 3 : 1;
    // 直到跳回云0时结束循环
    } while (currentIndex !== 0);
    return e;
};

console.log(jumpingOnClouds());

方式3:for循环实现思路

如果一定要用for循环,可以先计算需要跳转的总次数(总次数等于数组长度除以k和数组长度的最大公约数):

let c = [1,1,1,0,1,1,0,0,0,0];
let e = 100;
let k = 3;
let n = c.length;

// 计算最大公约数
const gcd = (a, b) => b === 0 ? a : gcd(b, a % b);
const totalJumps = n / gcd(n, k);

const jumpingOnClouds = () => {
    let currentIndex = 0;
    for (let i = 0; i < totalJumps; i++) {
        currentIndex = (currentIndex + k) % n;
        e -= c[currentIndex] ? 3 : 1;
    }
    return e;
};

console.log(jumpingOnClouds());

内容的提问来源于stack exchange,提问作者Andrew Klapper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:05:34