私は単純なゲームを作成しており、武器の統計を含む XML ファイルをゲームで使用する武器の配列にロードしています。「try」ステートメントが終了するまで、統計と武器オブジェクトはすべて正しく読み取られて入力されます。その後、武器の配列全体が最後に読み取られた武器要素の値で再書き込みされます。なぜ突然すべてを書き直すことにしたのか、私の人生では理解できません。初心者の間違いだと感じているので、助けていただければ幸いです。
private void populateWeaponArray(NodeList listOfWeapons){
String weaponName;
int[] stats = new int[10];
int weaponClass;
boolean twoHanded;
try{
for(int i=0;i<listOfWeapons.getLength();i++){
//Get individual weaponNode
Node weaponNode = listOfWeapons.item(i);
//Convert to element to provide more methods and access node information
//Element is just an interface that inherits from node
Element weaponElement = (Element) weaponNode;
//Retrieve Attribute Values level, class
stats[9] = Integer.valueOf(weaponElement.getAttribute("level"));
weaponClass = Integer.valueOf(weaponElement.getAttribute("class"));
//Get a list of all stats of weapon
NodeList statList = weaponElement.getChildNodes();
//populate the stat[] with all numbers
for(int s=0;s<9;s++){
stats[s] = Integer.valueOf(statList.item(s).getFirstChild().getNodeValue());
}
//Retrieve name and twohanded from xml
weaponName = statList.item(9).getFirstChild().getNodeValue();
twoHanded = Boolean.valueOf(statList.item(10).getFirstChild().getNodeValue());
//Construct weapon object from values
weapons[i] = new Weapon(weaponName, weaponClass, twoHanded, stats);
System.out.println(weapons[i]); //Weapon objects here all display correctly
}
}catch(Exception e){
System.out.println("weaponHandler " + e.getMessage());
}
for(int i = 0;i<weapons.length;i++){
System.out.println(weapons[i]); //Suddenly Weapon objects here all have the same stats?
}
try{} all が終了する前に各武器の上書きされた toString メソッドを呼び出すと、それらが XML からの正しい統計を持っていることが明らかになりますが、ブロックが終了した瞬間には、それらはすべて同じ統計を持っています。他に何か知っておく必要がある場合は、大声で言ってください。どんな助けでも大歓迎です:)