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

记忆游戏代码疑问:仅点击单张卡片时为何检查secondCard非空且值相等?

关于记忆游戏代码逻辑的疑问解答

嘿,这个问题问得特别准——你一下子就抓住了这段代码里的逻辑漏洞!先把你的代码贴出来方便分析:

if (clicked == 1 ) { 
    firstCard=cardAction; 
    if (secondCard!=null && firstCard.getValue() == secondCard.getValue()){ 
        firstCard.setText(""); 
        secondCard.setText(""); 
    } 
    firstCard.setText (Integer.toString (firstCard.getValue ())); 
}

你的疑问完全正确!

当你第一次点击卡片时,secondCard确实应该是null,所以这个if判断里的条件secondCard!=null && ...根本不会触发——也就是说,这段代码里的匹配检查在第一次点击时完全是多余的,而且逻辑顺序还错得离谱。

这段代码的核心问题

正常的记忆游戏逻辑应该是分两步走的:

  1. 第一次点击:记录卡片、显示数值,不做匹配检查
  2. 第二次点击:记录第二张卡片、显示数值,再检查是否匹配,然后处理匹配/不匹配的结果

但这段代码把「匹配检查」放在了第一次点击的分支里,不仅时机不对,还犯了一个更致命的错误:就算某次点击时secondCard不为空(比如第二次点击,但代码只处理了clicked==1的情况),它先执行了「清空卡片文本」的操作,紧接着又立刻把firstCard的数值重新显示出来——等于刚清空又恢复,完全达不到匹配成功后隐藏卡片的效果。

修正后的逻辑示例

我们可以调整代码逻辑,让它符合记忆游戏的正常流程:

// 假设clicked初始为0,用来标记是第几次点击
if (clicked == 0) {
    // 第一次点击:记录并显示第一张卡片
    firstCard = cardAction;
    firstCard.setText(Integer.toString(firstCard.getValue()));
    clicked = 1; // 切换到等待第二张卡片的状态
} else if (clicked == 1) {
    // 第二次点击:记录并显示第二张卡片
    secondCard = cardAction;
    secondCard.setText(Integer.toString(secondCard.getValue()));
    
    // 检查两张卡片是否匹配
    if (firstCard.getValue() == secondCard.getValue()) {
        // 匹配成功:清空两张卡片的文本
        firstCard.setText("");
        secondCard.setText("");
    } else {
        // 匹配失败:延迟几秒后隐藏两张卡片的数值(模拟翻回去的效果)
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                firstCard.setText("");
                secondCard.setText("");
            }
        }, 3000); // 3秒后执行
    }
    
    // 重置状态,准备下一轮匹配
    clicked = 0;
    firstCard = null;
    secondCard = null;
}

简单来说,原代码的逻辑顺序和触发时机都搞错了,你一开始的疑问完全合理——那个匹配检查在第一次点击时确实毫无意义,而且整个代码的流程不符合记忆游戏的正常交互逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:36:55