在循环内创建对象

时间:2018-09-04 18:27:25

标签: java

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

这是我的代码

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个熟练的技术人员,我对解决此问题的想法已经耗尽。

1 个答案:

答案 0 :(得分:2)

主要问题在这里:

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()函数。

相关问题