Android Java Array indexoutofbound

时间:2014-03-02 17:56:28

标签: java android arrays arraylist

如何在按下时按钮转到数组中的最后一个位置而不会出现indexoutofbound错误?

    switch (v.getId()) {
    case R.id.back:
        mainButton.setText(alphabet[position--]);
        mainButton.setBackgroundColor(Color.rgb(randomColor, randomColor2, randomColor3));
        if (alphabet.equals("A")) {
            mainButton.setText(alphabet[25]);
        }

        break;
    case R.id.forward:
        mainButton.setText(alphabet[position++]);
        mainButton.setBackgroundColor(Color.rgb(randomColor, randomColor2, randomColor3));

        if (alphabet.equals("Z")) {
            mainButton.setText(alphabet[0]);
        }
        break;
    }

3 个答案:

答案 0 :(得分:0)

这应该有用,如果得到你想要做的。 首先计算数组的位置,使其位于边界内。然后访问数组位置。

switch (v.getId()) {
case R.id.back:
    position--;
    if(position<0) { position=25; }
    // mainButton.setText(alphabet[position]);
    // mainButton.setBackgroundColor(Color.rgb(randomColor, randomColor2, randomColor3));

    break;
case R.id.forward:
    position++;
    if(position>25) { position=0; }
    // mainButton.setText(alphabet[position]);
    // mainButton.setBackgroundColor(Color.rgb(randomColor, randomColor2, randomColor3));

    break;
}
// for better improvement this can be added once for both cases
mainButton.setText(alphabet[position]);
mainButton.setBackgroundColor(Color.rgb(randomColor, randomColor2, randomColor3));

此检查alphabet.equals("A"))没有实际意义,因为您尝试将数组与字符串值进行比较,这将始终返回false。

答案 1 :(得分:0)

要停止IndexOutOfBoundsException并从数组中的最后一个索引获取值,您可以使用此

alphabet[alphabet.length-1]);

即使您的数组已更改大小,使用arrayname.length-1而不是特定索引号也将始终返回最后一个索引。虽然我认为你的代码存在更多错误而不仅仅是索引越界。

答案 2 :(得分:0)

更短的解决方案,即使有人得到了绿色标记:(

{//your method...
    switch (v.getId()) {
        case R.id.back:
            position--;
            position = modulo(position, alphabet.length);
            mainButton.setText(alphabet[position]);
            mainButton.setBackgroundColor(Color.rgb(randomColor, randomColor2, randomColor3));

            break;
        case R.id.forward:
            position++;
            position = modulo(position, alphabet.length);
            mainButton.setText(alphabet[position]);
            mainButton.setBackgroundColor(Color.rgb(randomColor, randomColor2, randomColor3));

            break;
    }
}

private int modulo(int x, int y) {
    return (int) (x - (y * Math.floor((double) x / (double) y)));
}

因此,当您获得-1时,position将更改为alphabet.length-1 当您获得alphabet.length+1时,您的职位将更改为0