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

如何移除并返回ArrayList指定索引元素?deck首元素处理逻辑有误

搞定这个发牌方法的小问题

嘿,我来帮你解决这个问题!你想要的是先返回牌组里的第一张牌,再把它从牌组中移除对吧?其实ArrayList本身就有个方法能完美满足你的需求,而且比你现在的写法更简洁可靠。

先说说你当前代码可能的问题:你现在用deck.remove(topCard)是通过对象来移除元素,如果你的牌组里存在重复的Card对象(虽然正常牌组不会有,但代码逻辑上得考虑这种情况),这个方法会移除第一个匹配的元素,可能导致意外行为。另外你描述的“总是返回原第二个元素”,大概率是代码执行顺序搞反了(比如不小心先移除再获取),或者因为重复元素的匹配问题导致的。

最简单的修正方式

直接用ArrayList.remove(int index)方法——这个方法会移除指定索引的元素,同时返回被移除的元素,正好一步完成你要的“拿牌+移除”操作:

public Card dealCard() { 
    if(deck.size() > 0) { 
        // 移除索引0的元素,同时返回它,完美符合需求
        return deck.remove(0); 
    } else { 
        System.out.println("Fatal Error. Program now exiting."); 
        System.exit(0);
        // 加个return让编译器不报错,毕竟System.exit之后不会执行到这
        return null;
    }
}

如果你想保留原有逻辑的写法

要是你更习惯先获取再移除的逻辑,那可以改成按索引移除,而不是按对象移除,这样就不会有重复元素的匹配问题:

public Card dealCard() { 
    Card topCard = null; 
    if(deck.size() > 0) { 
        topCard = deck.get(0); 
        deck.remove(0); // 明确移除索引0的元素,而不是通过对象引用
    } else { 
        System.out.println("Fatal Error. Program now exiting."); 
        System.exit(0);
        return null;
    }
    return topCard;
}

这样不管有没有重复元素,都能准确移除你刚拿到的那张牌。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:46:18