这是我在大学里开展的一个项目,除了初始化游戏的游戏课程之外,一切似乎都很好。这里是一个片段从csv文件中读取
public class Game{
private Player player;
private World world;
private ArrayList<NonPlayableFighter> weakFoes;
private ArrayList<NonPlayableFighter> strongFoes;
private ArrayList<Attack> attacks;
private ArrayList<Dragon> dragons;
public Game() throws IOException{
player = new Player("");
world = new World();
weakFoes = new ArrayList<NonPlayableFighter>();
strongFoes = new ArrayList<NonPlayableFighter>();
attacks = new ArrayList<Attack>();
dragons = new ArrayList<Dragon>();
loadAttacks ("Database-Attacks_20309.csv");
loadFoes ("Database-Foes_20311.csv");
loadDragons ("Database-Dragons_20310.csv");
}
之后,后面跟着一些getters和我应该实现的4个方法。 这些方法loadCSV(String filePath)
,loadAttacks(String filePath)
,loadFoes(String filePath)
,loadDragons(String filePath)
我创建loadCSV(String filePath)
,使得它返回的String []这里的ArrayList:
private ArrayList<String[]> loadCSV(String filePath) throws IOException{
String currentLine = "";
ArrayList<String[]> result = new ArrayList<String[]>();
FileReader fileReader = new FileReader(filePath);
BufferedReader br = new BufferedReader(fileReader);
currentLine = br.readLine();
while (currentLine != null){
String[] split = currentLine.split(",");
result.add(split);
}
br.close();
return result;
}
然后我想加载一些攻击,敌人,和龙和将它们插入适当的ArrayList中。
我施加loadAttacks(String filePath)
这里:
private void loadAttacks(String filePath) throws IOException{
ArrayList<String[]> allAttacks = loadCSV(filePath);
for(int i = 0; i < allAttacks.size(); i++){
String[] current = allAttacks.get(i);
Attack temp = null;
switch(current[0]){
case "SA": temp = new SuperAttack(current[1],
Integer.parseInt(current[2]));
break;
case "UA": temp = new UltimateAttack(current[1],
Integer.parseInt(current[2]));
break;
case "MC": temp = new MaximumCharge();
break;
case "SS": temp = new SuperSaiyan();
break;
}
attacks.add(temp);
}
}
我写,使得它需要该ArrayList使用开关从而创建适当的攻击并添加从loadCSV(String filePath)
和搜索返回在每个String []在第一字符串ArrayList的内它来攻击。
然后我想为Foes读取另一个CSV文件,并且CSV文件的结构是这样的,第一行有一些属性,第二行有一些类型为SuperAttack的攻击,第三行有一些类型为Ultimate攻击的攻击。同样在每个敌人内部都有一个布尔属性,用于判断它是强还是弱敌,从而将它置于正确的Arraylist中。下面是loadFoes(String filePath)
代码:
private void loadFoes(String filePath) throws IOException{
ArrayList<String[]> allFoes = loadCSV(filePath);
for(int i = 0; i < allFoes.size(); i += 3){
String[] current = allFoes.get(i);
String[] supers = allFoes.get(i+1);
String[] ultimates = allFoes.get(i+2);
ArrayList<SuperAttack> superAttacks = new ArrayList<SuperAttack>();
ArrayList<UltimateAttack> ultimateAttacks = new ArrayList<UltimateAttack>();
NonPlayableFighter temp = null;
for(int j = 0; i < supers.length; j++){
int index = attacks.indexOf(supers[j]);
if(index != -1){
superAttacks.add((SuperAttack)attacks.get(index));
}
else break;
}
for(int j = 0; i < ultimates.length; j++){
int index = attacks.indexOf(ultimates[j]);
if(index != -1){
ultimateAttacks.add((UltimateAttack)attacks.get(index));
}
else break;
}
if(current[7].equalsIgnoreCase("True")){
temp = new NonPlayableFighter(current[0], Integer.parseInt(current[1]),
Integer.parseInt(current[2]), Integer.parseInt(current[3]),
Integer.parseInt(current[4]), Integer.parseInt(current[5]),
Integer.parseInt(current[6]), true, superAttacks, ultimateAttacks);
strongFoes.add(temp);
}
else{
temp = new NonPlayableFighter(current[0], Integer.parseInt(current[1]),
Integer.parseInt(current[2]), Integer.parseInt(current[3]),
Integer.parseInt(current[4]), Integer.parseInt(current[5]),
Integer.parseInt(current[6]), false, superAttacks, ultimateAttacks);
weakFoes.add(temp);
}
}
}
首先我拿到前三的String [] ArrayList中从loadCSV(String filePath
返回并取得2个循环检查,如果攻击是以前加载攻击中CSV然后我检查了属性,确定它是强还是弱,并相应地创建一个新的NonPlayableFighter
并将其添加到适当的列表中。
运行这个赋值的jUnit4测试,它给了我一个编译错误:未处理的异常类型IOException。一般来说,代码有什么显着的问题?
你是否在Main Class或main()中处理异常(使用try/catch或throws)? – Mahendra
进入loadCSV()方法,加入currentLine = br.readLine();进入while循环。 –