我正在制作一款基于文本的游戏,在循环内创建对象时遇到问题
这是我的代码
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个熟练的技术人员,我对解决此问题的想法已经耗尽。
答案 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()
函数。