在尝试调试代码一段时间后,我无法弄清楚为什么会发生此错误。
我的主要Activity
有一个对话框,允许选择项目。这是它的代码。mSelectedItems 是ArrayList
Main 类中的一个静态变量。
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
if (isChecked) {
// If the user checked the item, add it to the selected items
mSelectedItems.add(which);
}
else if (mSelectedItems.contains(which)) {
// Else, if the item is already in the array, remove it
mSelectedItems.remove(Integer.valueOf(which));
}
}
})
// Set the action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Data d = new Data();
d.setSelectedPlayers(mSelectedItems);
d.run();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//CODE TO JUST CLOSE DIALOGBOX
}
});
return builder.create();
}
现在在这个对话框中,对于“确定按钮”——我尝试从另一个类中调用一个方法,该方法对对话框中选择的项目进行一些计算。为此,我将主要活动中的 mSelectedItems arrayList 设置为另一个类中的 arrayList 字段(现在称为 Data 类)。这是一大块相关代码:
private ArrayList<String> playerNames = new ArrayList<String>(Arrays.asList("Messi", "Ronaldo", "Turan", "Drogba","Kuyt"));
private int[] playerRatings = {87, 78, 66, 69, 86};
private ArrayList selectedPlayers;
public void setSelectedPlayers(ArrayList mSelectedItems) {
this.selectedPlayers = mSelectedItems;
}
public int run() {
int totalScore = 0;
for(Object player: selectedPlayers) {
int index = playerNames.indexOf(player);
int rating = playerRatings[index];
int[] playersActionSet = actionMatrix[index];
调试告诉我越界错误是 int 索引行。此代码块需要遍历 selectedPlayers(将从另一个类的对话框中分配给 mSelectedPlayers)并找到每个用户选择的项目的索引,然后进行计算(此处不包含计算代码)。
有人可以解释为什么会发生这个错误吗?似乎每次都为 index 分配-1,但这仅在列表为空并且您尝试在其中查找项目的 indexOf 时发生。