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

为何在方法中向ArrayList<deck>添加元素后无元素返回?

问题原因与修复方案

问题出在哪

  1. 未调用ResetDeck()方法:不执行这个初始化方法,deck始终是创建时的空集合状态。
  2. 错误访问实例变量: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:17:15