【发布时间】:2016-01-27 22:34:36
【问题描述】:
我有以下代码:
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 循环的问题,但我无法确定。
【问题讨论】:
-
假设
arr[0]是一个操作码,arr[1]到arr[3]是它的参数。你期望i从 0 直接跳到 4 吗?您每次只将其增加 1。 -
没有代码在switch语句中来实际增加
i。 -
switch 语句中所有大括号的意义何在?
-
为什么要创建数组 arr ?为什么不只是
switch(replaceAll.charAt(i))? -
上帝帮助任何不得不维护此代码的可怜人。
标签: java for-loop switch-statement