Java 数组IndexOutOfBoundsException
我有两个数组列表,一个叫做矩形,另一个叫做矩形 我遇到了以下异常,很难找到哪里出了问题 IndexOutOfBoundsException 以下是堆栈跟踪:Java 数组IndexOutOfBoundsException,java,android,Java,Android,我有两个数组列表,一个叫做矩形,另一个叫做矩形 我遇到了以下异常,很难找到哪里出了问题 IndexOutOfBoundsException 以下是堆栈跟踪: 01-30 13:39:26.214: E/AndroidRuntime(26302): FATAL EXCEPTION: Thread-2727 01-30 13:39:26.214: E/AndroidRuntime(26302): Process: com.ashmore.Brass, PID: 26302 01-30 13:
01-30 13:39:26.214: E/AndroidRuntime(26302): FATAL EXCEPTION: Thread-2727
01-30 13:39:26.214: E/AndroidRuntime(26302): Process: com.ashmore.Brass, PID: 26302
01-30 13:39:26.214: E/AndroidRuntime(26302): java.lang.IndexOutOfBoundsException: Invalid index 8, size is 8
01-30 13:39:26.214: E/AndroidRuntime(26302): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
01-30 13:39:26.214: E/AndroidRuntime(26302): at java.util.ArrayList.get(ArrayList.java:308)
01-30 13:39:26.214: E/AndroidRuntime(26302): at com.ashmore.Brass.MyGame.KeyButton.<init>(KeyButton.java:108)
01-30 13:39:26.214: E/AndroidRuntime(26302): at com.ashmore.Brass.MyGame.GameScreen.checkButtons(GameScreen.java:430)
01-30 13:39:26.214: E/AndroidRuntime(26302): at com.ashmore.Brass.MyGame.GameScreen.updateRunning(GameScreen.java:414)
01-30 13:39:26.214: E/AndroidRuntime(26302): at com.ashmore.Brass.MyGame.GameScreen.update(GameScreen.java:80)
01-30 13:39:26.214: E/AndroidRuntime(26302): at com.ashmore.Brass.framework.Implementation.AndroidFastRenderView.run(AndroidFastRenderView.java:47)
01-30 13:39:26.214: E/AndroidRuntime(26302): at java.lang.Thread.run(Thread.java:841)
GameScreen.checkButtons第430行:
GameScreen.updateRunning行414:
因此,基于stacktrace,我的问题必须在KeyButton类中。我就是不知道我的索引哪里出错了。如何修复异常
下面是相关的类警告:它们很长,因为我总共有大约200个矩形:
GameScreen.java:
如果有任何帮助,我们将不胜感激。仅仅因为您用100项初始化了数组
public static ArrayList<Rect> rectangles = new ArrayList<Rect>(100);
因此,获取第8项将失败 我想第8项应该是A刻度中的第一个矩形。但是,这是有道理的,因为没有添加这些矩形。所以为了解决这个问题,我是否应该像在游戏类中一样,在KeyButton类中的不同比例周围放置另一个if语句?对不起,没有仔细观察。您可以发布另一个堆栈溢出问题:
KeyButton keybutton = new KeyButton();
checkButtons();
public static ArrayList<Rect> rectangles = new ArrayList<Rect>(100);
public static ArrayList<Rect> rectangles2 = new ArrayList<Rect>(90);
if (ScalesScreen.scaleType.equals("C")) {
//C Scale
rectangles.add(new Rect(135,614,160,588));
rectangles.add(new Rect(124,541,147,512));
rectangles.add(new Rect(115,468,136,439));
rectangles.add(new Rect(105,395,127,366));
rectangles.add(new Rect(92,291,114,261));
rectangles.add(new Rect(83,217,105,188));
rectangles.add(new Rect(71,145,92,116));
rectangles.add(new Rect(63,74,81,41));
//C Scale 2
rectangles2.add(new Rect(73,767,94,737));
rectangles2.add(new Rect(84,695,103,665));
rectangles2.add(new Rect(116,621,95,592));
rectangles2.add(new Rect(127,551,102,519));
rectangles2.add(new Rect(137,445,115,415));
rectangles2.add(new Rect(148,371,126,343));
rectangles2.add(new Rect(159,299,137,269));
} if (ScalesScreen.scaleType.equals("A")) {
//A Scale 1
rectangles.add(new Rect(181,613,159,583));
rectangles.add(new Rect(173,542,149,511));
rectangles.add(new Rect(163,467,138,437));
rectangles.add(new Rect(151,395,127,363));
rectangles.add(new Rect(141,290,116,260));
rectangles.add(new Rect(133,218,107,186));
rectangles.add(new Rect(121,145,98,112));
rectangles.add(new Rect(111,72,84,42));
//A Scale 2
rectangles2.add(new Rect(120,765,96,736));
rectangles2.add(new Rect(132,693,106,662));
rectangles2.add(new Rect(142,620,119,589));
rectangles2.add(new Rect(151,549,125,515));
rectangles2.add(new Rect(161,438,137,406));
rectangles2.add(new Rect(172,366,146,333));
rectangles2.add(new Rect(184,291,158,261));
} if (ScalesScreen.scaleType.equals("Ab")) {
//Ab Scale 1
rectangles.add(new Rect(186,615,162,585));
rectangles.add(new Rect(176,543,153,511));
rectangles.add(new Rect(164,473,141,440));
rectangles.add(new Rect(155,398,130,365));
rectangles.add(new Rect(144,293,118,261));
rectangles.add(new Rect(135,217,111,188));
rectangles.add(new Rect(123,146,100,117));
rectangles.add(new Rect(112,73,87,44));
//Ab Scale 2
rectangles2.add(new Rect(122,767,100,738));
rectangles2.add(new Rect(134,696,108,665));
rectangles2.add(new Rect(144,623,119,591));
rectangles2.add(new Rect(154,550,128,518));
rectangles2.add(new Rect(166,447,139,416));
rectangles2.add(new Rect(177,373,150,340));
rectangles2.add(new Rect(186,299,162,268));
} if (ScalesScreen.scaleType.equals("B")) {
//B Scale 1
rectangles.add(new Rect(170,615,144,583));
rectangles.add(new Rect(158,541,137,510));
rectangles.add(new Rect(150,469,125,437));
rectangles.add(new Rect(139,394,113,366));
rectangles.add(new Rect(130,289,105,259));
rectangles.add(new Rect(119,218,91,184));
rectangles.add(new Rect(108,142,82,111));
rectangles.add(new Rect(96,72,73,41));
//B Scale 2
rectangles2.add(new Rect(116,767,92,738));
rectangles2.add(new Rect(124,693,101,664));
rectangles2.add(new Rect(139,621,109,593));
rectangles2.add(new Rect(148,549,123,519));
rectangles2.add(new Rect(155,442,134,412));
rectangles2.add(new Rect(169,370,144,336));
rectangles2.add(new Rect(179,298,154,265));
} if (ScalesScreen.scaleType.equals("Bb")) {
//Bb Scale 1
rectangles.add(new Rect(180,675,156,647));
rectangles.add(new Rect(169,598,146,564));
rectangles.add(new Rect(160,516,137,482));
rectangles.add(new Rect(149,433,123,400));
rectangles.add(new Rect(137,319,112,288));
rectangles.add(new Rect(128,240,104,208));
rectangles.add(new Rect(118,159,93,127));
rectangles.add(new Rect(106,77,81,46));
//Bb Scale 2
rectangles2.add(new Rect(119,766,91,736));
rectangles2.add(new Rect(128,688,102,655));
rectangles2.add(new Rect(139,604,114,576));
rectangles2.add(new Rect(149,526,123,494));
rectangles2.add(new Rect(159,413,136,380));
rectangles2.add(new Rect(169,333,147,299));
rectangles2.add(new Rect(182,251,154,218));
} ...
}
for (Rect rect : rectangles) {
Log.d("Bar", bar.toString());
Log.d("Rect", rect.toString());
if(bar.left <= rect.right && bar.right >= rect.left) {
Log.d("GameScreen", "intersected");
intersected = rect;
checkButtons();
}
}
public class KeyButton {
public boolean B1 = false;
public boolean B2 = false;
public boolean B3 = false;
{
//C major
//C
if (GameScreen.intersected == GameScreen.rectangles.get(0)) {
B1 = false;
B2 = false;
B3 = false;
}
//D
if (GameScreen.intersected == GameScreen.rectangles.get(1)) {
B1 = true;
B2 = false;
B3 = true;
}
//E
if (GameScreen.intersected == GameScreen.rectangles.get(2)) {
B1 = true;
B2 = true;
B3 = false;
}
//F
if (GameScreen.intersected == GameScreen.rectangles.get(3)) {
B1 = true;
B2 = false;
B3 = false;
}
//G
if (GameScreen.intersected == GameScreen.rectangles.get(4)) {
B1 = false;
B2 = false;
B3 = false;
}
//A
if (GameScreen.intersected == GameScreen.rectangles.get(5)) {
B1 = true;
B2 = true;
B3 = false;
}
//B
if (GameScreen.intersected == GameScreen.rectangles.get(6)) {
B1 = false;
B2 = true;
B3 = false;
}
//C
if (GameScreen.intersected == GameScreen.rectangles.get(7)) {
B1 = false;
B2 = false;
B3 = false;
}
//B
if (GameScreen.intersected == GameScreen.rectangles2.get(0)) {
B1 = false;
B2 = true;
B3 = false;
}
//A
if (GameScreen.intersected == GameScreen.rectangles2.get(1)) {
B1 = true;
B2 = true;
B3 = false;
}
//G
if (GameScreen.intersected == GameScreen.rectangles2.get(2)) {
B1 = false;
B2 = false;
B3 = false;
}
//F
if (GameScreen.intersected == GameScreen.rectangles2.get(3)) {
B1 = true;
B2 = false;
B3 = false;
}
//E
if (GameScreen.intersected == GameScreen.rectangles2.get(4)) {
B1 = true;
B2 = true;
B3 = false;
}
//D
if (GameScreen.intersected == GameScreen.rectangles2.get(5)) {
B1 = true;
B2 = false;
B3 = true;
}
//C
if (GameScreen.intersected == GameScreen.rectangles2.get(6)) {
B1 = false;
B2 = false;
B3 = false;
}
//A Major
//A
if (GameScreen.intersected == GameScreen.rectangles.get(8)) {
B1 = true;
B2 = true;
B3 = false;
}
//B
if (GameScreen.intersected == GameScreen.rectangles.get(9)) {
B1 = false;
B2 = true;
B3 = false;
}
//C_SHARP
if (GameScreen.intersected == GameScreen.rectangles.get(10)) {
B1 = true;
B2 = true;
B3 = true;
}
//D
if (GameScreen.intersected == GameScreen.rectangles.get(11)) {
B1 = true;
B2 = false;
B3 = true;
}
//E
if (GameScreen.intersected == GameScreen.rectangles.get(12)) {
B1 = true;
B2 = true;
B3 = false;
}
//F_SHARP
if (GameScreen.intersected == GameScreen.rectangles.get(13)) {
B1 = false;
B2 = true;
B3 = false;
}
//G_SHARP
if (GameScreen.intersected == GameScreen.rectangles.get(14)) {
B1 = false;
B2 = true;
B3 = true;
}
//A
if (GameScreen.intersected == GameScreen.rectangles.get(15)) {
B1 = true;
B2 = true;
B3 = false;
}
//G_SHARP
if (GameScreen.intersected == GameScreen.rectangles2.get(7)) {
B1 = false;
B2 = true;
B3 = true;
}
//F_SHARP
if (GameScreen.intersected == GameScreen.rectangles2.get(8)) {
B1 = false;
B2 = true;
B3 = false;
}
//E
if (GameScreen.intersected == GameScreen.rectangles2.get(9)) {
B1 = true;
B2 = true;
B3 = false;
}
//D
if (GameScreen.intersected == GameScreen.rectangles2.get(10)) {
B1 = true;
B2 = false;
B3 = true;
}
//C_SHARP
if (GameScreen.intersected == GameScreen.rectangles2.get(11)) {
B1 = true;
B2 = true;
B3 = true;
}
//B
if (GameScreen.intersected == GameScreen.rectangles2.get(12)) {
B1 = false;
B2 = true;
B3 = false;
}
//A
if (GameScreen.intersected == GameScreen.rectangles2.get(13)) {
B1 = true;
B2 = true;
B3 = false;
}
//Ab Major
//Ab
if (GameScreen.intersected == GameScreen.rectangles.get(16)) {
B1 = false;
B2 = true;
B3 = true;
}
//Bb
if (GameScreen.intersected == GameScreen.rectangles.get(17)) {
B1 = true;
B2 = false;
B3 = false;
}
//C
if (GameScreen.intersected == GameScreen.rectangles.get(18)) {
B1 = false;
B2 = false;
B3 = false;
}
//Db
if (GameScreen.intersected == GameScreen.rectangles.get(19)) {
B1 = true;
B2 = true;
B3 = true;
}
//Eb
if (GameScreen.intersected == GameScreen.rectangles.get(20)) {
B1 = false;
B2 = true;
B3 = true;
}
//F
if (GameScreen.intersected == GameScreen.rectangles.get(21)) {
B1 = true;
B2 = false;
B3 = false;
}
//G
if (GameScreen.intersected == GameScreen.rectangles.get(22)) {
B1 = false;
B2 = false;
B3 = false;
}
//Ab
if (GameScreen.intersected == GameScreen.rectangles.get(23)) {
B1 = false;
B2 = true;
B3 = true;
}
//G
if (GameScreen.intersected == GameScreen.rectangles2.get(14)) {
B1 = false;
B2 = false;
B3 = false;
}
//F
if (GameScreen.intersected == GameScreen.rectangles2.get(15)) {
B1 = true;
B2 = false;
B3 = false;
}
//Eb
if (GameScreen.intersected == GameScreen.rectangles2.get(16)) {
B1 = false;
B2 = true;
B3 = true;
}
//Db
if (GameScreen.intersected == GameScreen.rectangles2.get(17)) {
B1 = true;
B2 = true;
B3 = true;
}
//C
if (GameScreen.intersected == GameScreen.rectangles2.get(18)) {
B1 = false;
B2 = false;
B3 = false;
}
//Bb
if (GameScreen.intersected == GameScreen.rectangles2.get(19)) {
B1 = true;
B2 = false;
B3 = false;
}
//Ab
if (GameScreen.intersected == GameScreen.rectangles2.get(20)) {
B1 = false;
B2 = true;
B3 = true;
}
...
}
public boolean getB1() {
// TODO Auto-generated method stub
Log.d("Key", Boolean.toString(B1));
return B1;
}
public boolean getB2() {
// TODO Auto-generated method stub
Log.d("Key", Boolean.toString(B2));
return B2;
}
public boolean getB3() {
// TODO Auto-generated method stub
Log.d("Key", Boolean.toString(B3));
return B3;
}
}
public static ArrayList<Rect> rectangles = new ArrayList<Rect>(100);
//C Scale
rectangles.add(new Rect(135,614,160,588));// index 0
rectangles.add(new Rect(124,541,147,512));// index 1
rectangles.add(new Rect(115,468,136,439));// index 2
rectangles.add(new Rect(105,395,127,366));// index 3
rectangles.add(new Rect(92,291,114,261));
rectangles.add(new Rect(83,217,105,188));
rectangles.add(new Rect(71,145,92,116));
rectangles.add(new Rect(63,74,81,41)); // index 7