我有以下代码:
String everything = sb.toString(); //stores all the data from the input file into a string
String replaceAll = everything.replaceAll("\\s", "");
int charCount = replaceAll.length(); //charCount is 147
char arr[] = replaceAll.toCharArray();
for (int i = 0; i < arr.length; i++) {
switch (arr[i]) {
case 'E': {
fridge[Character.getNumericValue(arr[(i + 1)])].is_empty();
}
break;
case 'F': {
fridge[Character.getNumericValue(arr[(i + 2)])].find_it(Character.getNumericValue(arr[(i + 1)]));
}
break;
case 'C': {
fridge[Character.getNumericValue(arr[(i + 3)])].combineFridge(fridge[Character.getNumericValue(arr[(i + 2)])], fridge[Character
.getNumericValue(arr[(i + 1)])]);
}
break;
case 'M': {
fridge[Character.getNumericValue(arr[(i + 3)])].commonItems(fridge[Character.getNumericValue(arr[(i + 2)])], fridge[Character
.getNumericValue(arr[(i + 1)])]);
}
break;
case 'I': {
fridge[Character.getNumericValue(arr[(i + 2)])].insertItem(Character.getNumericValue((i + 1)));
}
break;
case 'D': {
fridge[Character.getNumericValue(arr[(i + 2)])].delete_item(Character.getNumericValue((i + 1)));
}
break;
case 'O': {
fridge[Character.getNumericValue(arr[(i + 1)])].outputRefrigerator();
}
break;
}
}
char数组有147个元素,每个字母后面都有一个数字。 每个字母激活一个方法,然后是1-3个参数(数字)。 但是,在for循环中,我得到-1值,有时随机大数(我的所有数字都是正数且小于12)。
如果我手动调用for循环外的任何方法,例如:
fridge[Character.getNumericValue(arr[0].insertItem(Character.getNumericValue(arr[1]);
,一切正常,arr[1]
(即1)的值存储在this.fridgeItems
(int []数组)。
为什么会这样?我知道这是switch语句或for循环的问题,但我无法分辨。
答案 0 :(得分:1)
检查您的指数。在您的代码中,您可以通过arr
和i + 1
索引访问i + 2
中的元素。如果循环迭代次数超过n - 2
次,则会出现IndexOutOfBoundException。
顺便说一句,你需要在switch语句中增加i
以跳过&#34;使用&#34;输入数组中的字符。
答案 1 :(得分:1)
您的代码&#34;未正确递增i
&#34; ,因为switch语句中没有代码实际递增i
。
你应该这样做:
case 'C':
fridge[Character.getNumericValue(arr[i + 3])]
.combineFridge(fridge[Character.getNumericValue(arr[i + 2])],
fridge[Character.getNumericValue(arr[i + 1])]);
i += 3;
break;