如何在按下时按钮转到数组中的最后一个位置而不会出现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;
}
答案 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