如何移除并返回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
相关产品推荐
相关产品推荐

