Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组IndexOutOfBoundsException_Java_Android - Fatal编程技术网

Java 数组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:

我有两个数组列表,一个叫做矩形,另一个叫做矩形

我遇到了以下异常,很难找到哪里出了问题

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: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