Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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 2D ArrayList索引超出范围_Java_Android_Multidimensional Array_Indexoutofboundsexception - Fatal编程技术网

Java 2D ArrayList索引超出范围

Java 2D ArrayList索引超出范围,java,android,multidimensional-array,indexoutofboundsexception,Java,Android,Multidimensional Array,Indexoutofboundsexception,我正在为我的应用程序实现2D阵列。 但不幸的是我犯了这个错误 FATAL EXCEPTION: main Process: com.application.recast, PID: 18534 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.application.recast/com.application.recast.SplashScreen}: java.lang.IndexOutO

我正在为我的应用程序实现2D阵列。 但不幸的是我犯了这个错误

FATAL EXCEPTION: main
   Process: com.application.recast, PID: 18534
   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.application.recast/com.application.recast.SplashScreen}: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
       at android.app.ActivityThread.-wrap12(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6077)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
    Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
       at java.util.ArrayList.get(ArrayList.java:411)
       at com.application.recast.SplashScreen.onCreate(SplashScreen.java:60)
       at android.app.Activity.performCreate(Activity.java:6664)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
       at android.app.ActivityThread.-wrap12(ActivityThread.java) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:154) 
       at android.app.ActivityThread.main(ActivityThread.java:6077) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
我要做的是,我想将特定项存储到2D数组的特定索引中。 2D arraylist非常新。 这是我的密码

ArrayList<String> mStrings = new ArrayList<>();
ArrayList<ArrayList<String>> list = new ArrayList<>();

mStrings.add("HI");
mStrings.add("HI2");
mStrings.add("HI3");
mStrings.add("HI4");
list.add(0,mStrings);

for(int x=0;x<list.size();x++){
    for(int y=0;y<mStrings.size();y++){
        Log.d("VALUE",String.valueOf(list.get(y)));
    }
}

这可能有助于画出一张列表的假想图。以下是一个可能的外部列表及其内容:

0: []
1: [a, b, c]
2: [d, e]
3: []
等等

因此,它不同于二维数组,因为没有统一的列大小

可以看到,索引0处的外部列表为空,索引1处有一个包含3项的列表,以此类推

有鉴于此,要迭代列表,每次还必须检查内部列表的大小:

其中list.getx本身返回一个列表,list.getx.gety在子列表中返回一个值

更新:或者正如@cricket\u 007所指出的,您可以使用for-each样式循环,以获得更可读的代码。

Issue java.lang.IndexOutOfBoundsException:Index:1,Size:1 at

list只有1个元素mean list.get0,但forint y=0;y您正在使用列表ArrayList迭代mString ArrayList大小

条件

如果您有mString ArrayList,则其大小大于list ArrayList 然后将出现IndexOutOfBoundsException

试试这个


你需要索引吗

如果没有,您可以使用增强的for循环

for(List<String> innerList : mStrings){
    for(String s : innerList){
        Log.d("VALUE", s);
    }
}

您的错误是该列表。大小!=由于您使用的是2D数组列表,所以在实现部分,您需要做的是

ArrayList<T> A = new ArrayList();
ArrayList<ArrayList<T>> B = new ArrayList();
这意味着Arraylist B将Arraylist A存储在每个索引中。 所以为了得到B中存储的元素,你需要这样做

ArrayList<T> A = B.get(i); // this will return the list stored at index i or you can say ith row.

//now
T a = A.get(j); //this will return the item stored index jth.

//in one line
T a = (B.get(i)).get(j); // this will return the value stored at ith row and jth column. 
这是你的密码

ArrayList<String> mStrings = new ArrayList<>();
ArrayList<ArrayList<String>> list = new ArrayList<>();

mStrings.add("HI");
mStrings.add("HI2");
mStrings.add("HI3");
mStrings.add("HI4");
list.add(0,mStrings);

for(int x=0;x<list.size();x++){
    for(int y=0;y<mStrings.size();y++){
        Log.d("VALUE",String.valueOf(list.get(y)));
    }
}

您需要使用String.valueOfmStrings.getyTry我的答案…是的,我需要索引。因为我在不同的索引中输入了一些值。好的,然后其他的答案提供了解决方案注意:Log方法抛出带有null消息的异常,因此String.valueOf有助于解决这个问题
ArrayList<T> A = new ArrayList();
ArrayList<ArrayList<T>> B = new ArrayList();
ArrayList<T> A = B.get(i); // this will return the list stored at index i or you can say ith row.

//now
T a = A.get(j); //this will return the item stored index jth.

//in one line
T a = (B.get(i)).get(j); // this will return the value stored at ith row and jth column. 
ArrayList<String> mStrings = new ArrayList<>();
ArrayList<ArrayList<String>> list = new ArrayList<>();

mStrings.add("HI");
mStrings.add("HI2");
mStrings.add("HI3");
mStrings.add("HI4");
list.add(0,mStrings);

for(int x=0;x<list.size();x++){
    for(int y=0;y<mStrings.size();y++){
        Log.d("VALUE",String.valueOf(list.get(y)));
    }
}
ArrayList<String> mStrings = new ArrayList<>();
ArrayList<ArrayList<String>> list = new ArrayList<>();

mStrings.add("HI");
mStrings.add("HI2");
mStrings.add("HI3");
mStrings.add("HI4");
list.add(0,mStrings);

for(int x=0;x<list.size();x++){
    for(int y=0;y<list.get(x).size();y++){
        Log.d("VALUE",String.valueOf(list.get(x).get(y)));
    }
}