2012-09-06 57 views
0

我有一个名为A的类。在这个类中,我有一个String名称以及一个setter和getter。 我也有正在初始化列表如下:当索引大小为139时,索引6上的IndexOutOfBoundsException异常

List<A>myList = ArrayList<A>(SomeOtherList); 

现在,当我检查我的ArrayList的大小,我可以看到列表的大小是139,但是当我试图让索引值6,我得到

java.lang.IndexOutOfBoundsException: Index: 6, Size: 6.

但是,如果我尝试从0打印值 - 138在for循环中我不会例外,

String name = myList.get(6).getName(); // Exception 

for(int i = 0 ; i < 139 ; i++){ 
    System.out.println(myList.get(i).getName()); 
}//will work 

有没有人遇到过这个问题?

for循环打印所有139名到控制台 但是当代码到达get函数我得到的流量异常的线路:

Caused by: java.lang.IndexOutOfBoundsException: Index: 6, Size: 6 
    at java.util.ArrayList.RangeCheck(ArrayList.java:547) 
at java.util.ArrayList.get(ArrayList.java:322) 
at com.icap.dashboard.DashboardPage.getSelectionFromCookie(DashboardPage.java:337) 
at com.icap.dashboard.DashboardPage.addCCYPanelAndChannels(DashboardPage.java:149) 
at com.icap.dashboard.DashboardPage.<init>(DashboardPage.java:107) 
... 52 more 

我编译使用maven我的项目中初始化的的ArrayList是一个集合Nanes

+2

'java.lang.IndexOutOfBoundsException:Index:6,Size:6' => myList的大小是6.您可以在行之前包含一个'System.out.println(myList.size());'你在哪里得到例外? – assylias

+2

你应该使用调试器。 – UmNyobe

+4

在达到for循环之前,正在抛出异常并终止执行,因此您错误地认为您没有收到异常。 – Vulcan

回答

1

这工作:

import java.util.*; 

public class StackOverflow { 

    public static void main(String[] args) { 
     List<A> SomeOtherList = new ArrayList<A>(); 
     for(int i = 0; i < 139; i++) { 
      SomeOtherList.add(new A().setName(String.valueOf(i))); 
     } 
     List<A> myList = new ArrayList<A>(SomeOtherList); 

     System.out.println("random access: " + myList.get(6).getName()); 

     for(int i = 0 ; i < myList.size() ; i++){ 
      System.out.println(myList.get(i).getName()); 
     } 

    } 

    public static class A { 
     String name; 

     public A setName(String theName) { this.name = theName; return(this); } 
     public String getName() { return(this.name); } 
    } 
} 

尝试使用与您的数据该工作示例。

+0

感谢这是java测试,感谢所有的问题 –

0

错误消息说明了自己:您试图获取仅包含6个元素的数组的元素6。而且,由于数组索引从0开始,最高可能的索引,你可以要求没有得到一个异常5.

你的代码和说明:

String name = myList.get(6).getName(); // Exception 

for(int i = 0 ; i < 139 ; i++){ 
    System.out.println(myList.get(i).getName()); 
}//will work 

是根本不可能的,因为调用

myList.get(6).getName(); 

将在for循环内进行。对于您所描述的可能的情况,myList在这两种情况下必须不同。

相关问题