JS基于数组实现四位计数器遇0099进位BUG,求更优实现方案
四位数字计数器JS实现方案
原代码BUG原因
你的代码的进位逻辑做了硬编码限制,仅支持最多两位同时进位,遇到0099这类需要连续进位到第三位的场景时就会触发逻辑错误。
最优实现方案
优先推荐用数值存储+前导零补全的方案,不需要手动实现进位逻辑,代码简洁易维护:
// 初始化计数器数值 let count = 0; // 每次调用获取下一个四位计数 function getNextCounter() { return String(count++).padStart(4, '0'); } // 测试示例 console.log(getNextCounter()); // 输出 0000 console.log(getNextCounter()); // 输出 0001 // 临界值测试 count = 99; console.log(getNextCounter()); // 输出 0099 console.log(getNextCounter()); // 输出 0100 count = 9999; console.log(getNextCounter()); // 输出 9999,再调用可以根据需求处理溢出逻辑
数组模拟进位修正方案
如果需要通过数组模拟进位逻辑(比如教学演示等场景),可以将原代码的硬编码进位逻辑改为通用进位处理:
let c = [0,0,0,0].reverse(); // 个位加1 c[0]++; // 通用进位逻辑,支持任意长度的计数数组 for (let i = 0; i < c.length; i++) { if (c[i] >= 10) { c[i] = 0; if (i < c.length - 1) { c[i+1]++; } else { // 计数器溢出时的自定义处理,比如重置为0或者抛出提示 console.warn('计数器已超出4位最大值9999'); } } } const result = c.reverse().join(''); console.log(result);
该方案没有限制进位位数,0009→0010、0099→0100、0999→1000这类场景都可以正常处理。
内容的提问来源于stack exchange,提问作者Robin De Wolf
相关产品推荐
相关产品推荐

