为何在方法中向ArrayList<deck>添加元素后无元素返回?
问题原因与修复方案
问题出在哪
- 未调用
ResetDeck()方法:不执行这个初始化方法,deck始终是创建时的空集合状态。 - 错误访问实例变量:
deck是私有实例变量,不能直接通过PokerTHEMain.deck访问,必须先创建类的对象实例。
修复后的完整代码
import java.util.ArrayList; public class PokerTHEMain { private String[] cardTypes = {"Spades", "Hearts", "Clubs", "Diamonds"}; private String[] cardValues = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; private ArrayList<String> deck = new ArrayList<>(); void ResetDeck() { this.deck.clear(); for (int cardTypesItem = 0; cardTypesItem < this.cardTypes.length; cardTypesItem++) { for (int cardValuesItem = 0; cardValuesItem < this.cardValues.length; cardValuesItem++) { this.deck.add(this.cardValues[cardValuesItem] + " of " + this.cardTypes[cardTypesItem]); } } } // 给外部提供获取deck的方法(因deck是私有变量,无法直接访问) public ArrayList<String> getDeck() { return this.deck; } public static void main(String[] args) { // 1. 创建类的实例 PokerTHEMain pokerInstance = new PokerTHEMain(); // 2. 调用初始化方法填充牌组 pokerInstance.ResetDeck(); // 3. 获取牌组并遍历输出 for (String card : pokerInstance.getDeck()) { System.out.println(card); } } }
关键修复说明
- 必须先创建
PokerTHEMain的实例,才能调用非静态的ResetDeck()方法(你的ResetDeck不是静态方法,无法通过类名直接调用)。 - 一定要执行
pokerInstance.ResetDeck(),这一步才会把扑克牌元素添加到deck集合中。 - 由于
deck是私有变量,外部无法直接访问,因此添加getDeck()方法来获取集合内容。 - 使用增强for循环遍历集合,相比普通for循环更简洁,也能避免索引越界问题。
额外建议
- 遵循Java命名规范:方法名采用小驼峰写法(比如把
ResetDeck改成resetDeck),类名采用大驼峰写法,提升代码可读性。 - 如果想使用静态变量/方法,也可以将
deck和ResetDeck改为静态,但实例化的方式更符合面向对象的设计思路。
内容的提问来源于stack exchange,提问作者user20523676
相关产品推荐
相关产品推荐

