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

如何在switch-case中匹配多值?及骰子对面数字代码简化

骰子对面数字求解的代码优化问题

问题描述

给定一个标准6面立方体骰子(每个面印有1至6的数字),输入骰子的一个面数字N,需求解其对面的数字。示例:输入N=6,输出1(数字6的对面是1)。

我通过常规switch-case逐一判断6个面的数字并返回对应对面数字,代码通过了测试用例,但希望简化代码。同时想请教:如何在switch-case语句中同时检查两个值?

现有实现代码

oppositeFaceOfDice(N) {
    //code here
    switch(N){
        case 1:return 6;
        break;
        case 6:return 1;
        break;
        case 2:return 5;
        break;
        case 5:return 2;
        break;
        case 3:return 4;
        break;
        case 4:return 3;
        break;
        default: return -1;
    }
}

我尝试的简化代码

oppositeFaceOfDice(N) {
    switch(N){
        case 1||6 : return 6?1:6;
        break;
        case 2||5: return 2?5:2;
        break;
        case 3||4: return 4?3:4;
        break;
    }
}

解答

1. 你尝试的简化代码存在的问题

  • case 1||6写法错误:1||6是逻辑表达式,结果为1,所以这个case只会匹配N=1,无法匹配N=6,同理其他case也只能匹配前一个数字。
  • return 6?1:6逻辑错误:6是真值,这个表达式永远返回1,无法根据输入的N返回对应对面数字。

2. 最简洁的实现方式

利用标准骰子对面数字之和为7的特性,一行代码就能解决:

oppositeFaceOfDice(N) {
    return (N >= 1 && N <= 6) ? 7 - N : -1;
}

这个写法既简洁高效,又保留了对无效输入返回-1的判断。

3. 坚持用switch-case的正确简化写法

可以利用switch的case穿透特性,让同一个逻辑处理多个值:

oppositeFaceOfDice(N) {
    switch(N){
        case 1:
        case 6: return N === 1 ? 6 : 1;
        case 2:
        case 5: return N === 2 ? 5 : 2;
        case 3:
        case 4: return N === 3 ? 4 : 3;
        default: return -1;
    }
}

当N匹配case 1时,因为没有break,会继续执行case 6后的代码,从而同时处理1和6的情况。

4. switch-case中同时检查两个变量的方法

switch本质是匹配表达式的结果,因此可以将两个变量组合成一个可匹配的表达式(比如字符串):

function checkTwoVars(a, b) {
    switch (`${a},${b}`) {
        case '1,6':
        case '6,1':
            console.log("这两个数字是骰子的对面");
            break;
        case '2,5':
        case '5,2':
            console.log("这两个数字是骰子的对面");
            break;
        default:
            console.log("这两个数字不是对面");
    }
}

如果是判断两个变量满足某种条件,用if-else通常更直观,但如果一定要用switch,就需要构造一个能唯一标识组合情况的表达式来匹配。


内容的提问来源于stack exchange,提问作者Avon K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:40:16