首页 > 解决方案 > 在循环内创建对象

问题描述

我正在制作基于文本的游戏,但在循环内创建对象时遇到问题

这是我的代码

int i = 1;
        Skill[] Skill_List = null;
        String[] Skill_Info;
        File directory = new File("D:\Program Files\Game_dev2\src\Database\Skills");
        int FileCount = directory.list().length;
        while (i < FileCount - 1) {
            Scanner Skill_Info_Data = new Scanner(
                    new File("D:\Program Files\Game_dev2\src\Database\Skills\Skill" + (i) + ".csv"));
            int j = 0;
            while (Skill_Info_Data.hasNext()) {
                Skill_Info = Skill_Info_Data.nextLine().split(",");
                String Name = Skill_Info[0];
                String Type = Skill_Info[1];
                String Desc = Skill_Info[2];
                int Skill_Level = Integer.parseInt(Skill_Info[3]);
                int Effect = Integer.parseInt(Skill_Info[4]);
                int Effect2 = Integer.parseInt(Skill_Info[5]);
                int Manacost = Integer.parseInt(Skill_Info[6]);
                int Cooldown = Integer.parseInt(Skill_Info[7]);
                String Skill_From = Skill_Info[8];
                int Power_Gain = Integer.parseInt(Skill_Info[9]);

                Skill_List = new Skill[] { new Skill(Name, Type, Desc, Skill_Level, Effect, Effect2, Manacost, Cooldown,
                        Skill_From, Power_Gain) };
                j++;
            }
            i++;
        }

问题是数组中只存储了 1 名熟练人员,我对如何解决这个问题一无所知。

标签: java

解决方案


主要问题在这里:

Skill_List = new Skill[] { new Skill(Name, Type, Desc, Skill_Level, Effect, Effect2, Manacost, Cooldown, Skill_From, Power_Gain) };

Skill_List您每次都覆盖旧变量,因此您只有 1 个项目。你可以这样做:

Skill_List[j] = new Skill(Name, Type, Desc, Skill_Level, Effect, Effect2, Manacost, Cooldown, Skill_From, Power_Gain);

但在您这样做之前,您需要提前知道数组将容纳多少项目,并创建具有该数量的数组。所以你会改变

Skill[] Skill_List = null;

Skill[] Skill_List = new Skill[10];

但这将您限制为 10 个技能。更好的选择是使用List. 这些容器可以容纳可变数量的数据。

ArrayList<Skill> Skill_List = new ArrayList<Skill>();  // Create empty list
//...
Skill_List.add(new Skill(Name, Type, Desc, Skill_Level, Effect, Effect2, Manacost, Cooldown, Skill_From, Power_Gain));

每次调用add列表都会增长 1。如果你真的想要一个数组,可以toArray()在构建列表后调用该函数。


推荐阅读