for循环中的switch语句不会正确递增“i”

时间:2016-01-27 22:34:36

标签: java for-loop switch-statement

我有以下代码:

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循环的问题,但我无法分辨。

2 个答案:

答案 0 :(得分:1)

检查您的指数。在您的代码中,您可以通过arri + 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;