我知道这一定是一个基本的设计问题,因为我显然不能这样做。我想根据分配给OwnedSpirits(int)的整数值从另一个类调用ownGrokk,ownTyce等方法。这又将填充数组。这是做什么的正确方法?
问题是,我多次执行此操作,并且从另一个类中执行此操作,似乎每次都必须创建一个新对象来传递新的int参数,并重置spiritInstance的值。而且,由于重置为零,阵列不能正确填充。我稍后尝试打印出我的数组值,并得到一个“ArrayIndexOutOfBoundsException”。
public class OwnedSpirits {
private int spiritTypeInt = 0;
public static int spiritInstance=0;
public static int[] spiritarray = new int[9];
public static String[] spiritName = new String[9];
public static int[] party = new int[3];
public OwnedSpirits(int spiritcall){
if(spiritcall == 1){
ownGrokk();
}
if(spiritcall == 2){
ownRisp();
}
if(spiritcall == 3){
ownTyce();
}
if(spiritcall == 4){
ownDaem();
}
if(spiritcall == 5){
ownCeleste();
}
}
private void ownGrokk(){
spiritName[spiritInstance] = "Grokk";
spiritInstance++;
}
private void ownRisp(){
spiritName[spiritInstance] = "Risp";
spiritInstance++;
}
private void ownDaem(){
spiritName[spiritInstance] = "Daem";
spiritInstance++;
}
private void ownCeleste(){
spiritName[spiritInstance] = "Celeste";
spiritInstance++;
}
private void ownTyce(){
spiritName[spiritInstance] = "Tyce";
spiritInstance++;
}
这个代码是在另一个类,它试图调用的方法来填充数组
buttonConfirm.addListener(new ClickListener(){
@Override
public void clicked(InputEvent event, float x, float y) {
if(xcounter==3){
for(x=0; x<3; x++){
if(setdaemtrue == true){
new OwnedSpirits(4);
}
if(setrisptrue == true){
new OwnedSpirits(2);
}
if(setcelestetrue == true){
new OwnedSpirits(5);
}
if(settycetrue == true){
new OwnedSpirits(3);
}
if(setgrokktrue == true){
new OwnedSpirits(1);
}
}
}
}
});
终于在另一个类:
System.arraycopy(OwnedSpirits.spiritName, 0, partylist, 0, 3);
@Override
public void show() {
System.out.println(partylist[0]);
System.out.println(partylist[1]);
System.out.println(partylist[2]);
spiritlist.setItems(partylist);
table.add(spiritlist);
table.setFillParent(true);
stage.addActor(table);
}
如果最后部分是令人困惑的,这是因为我正在使用libgdx。打印声明只是为了弄清楚为什么我的清单有错误
你可以做的一件事就是去除复制粘贴代码,使你的整体设计更好。 – emlai 2015-02-07 05:52:50
如果我理解正确,我认为你可以通过使spiritInstance成为一个静态属性来解决你的问题。你的静态数组似乎被设计为追踪所有已构建的“OwnedSpirits”类的所有实例的数据,因此为了正确索引这些数组,需要一个静态计数器,每次构建时都会增加一次。你为什么把'spiritInstance'作为实例属性? – bgoldst 2015-02-07 05:54:07
zenith我不知道你的意思 – 2015-02-07 05:56:57