三数字判断逻辑异常:输入全同数字为何同时输出30和40?
三数字判断逻辑错误导致重复输出问题解析
需求与问题
我需要实现一个三数字判断功能:
- 三个数字完全相同 → 输出30
- 仅有两个数字相同 → 输出40
- 其余情况 → 输出20
但输入三个8时,程序同时输出了30和40,不符合预期。我的代码如下:
let readline = require("readline-sync"); let nb1 = parseInt(readline.question("Enter nb1 please : ")); let nb2 = parseInt(readline.question("Enter nb2 please : ")); let nb3 = parseInt(readline.question("Enter nb3 please : ")); if (nb1 == nb2 && nb2 == nb3) { console.log(30); } if (nb1 == nb2 || nb2 == nb3 || nb3 == nb1) { console.log(40); } else { console.log(20); }
问题原因
代码使用了两个独立的if语句,而非互斥的条件分支:
当三个数字完全相同时,第一个if条件成立,输出30;此时第二个if的条件(任意两个数字相等)也必然成立,所以会继续执行输出40,导致两次输出。
修复方案
把第二个if改为else if,让三个条件形成互斥的分支结构,这样当第一个条件满足时,后续分支不会执行:
let readline = require("readline-sync"); let nb1 = parseInt(readline.question("Enter nb1 please : ")); let nb2 = parseInt(readline.question("Enter nb2 please : ")); let nb3 = parseInt(readline.question("Enter nb3 please : ")); if (nb1 == nb2 && nb2 == nb3) { console.log(30); } else if (nb1 == nb2 || nb2 == nb3 || nb3 == nb1) { console.log(40); } else { console.log(20); }
内容的提问来源于stack exchange,提问作者solange
相关产品推荐
相关产品推荐

