2014-01-02 3 views
-1

Вот мой основной класс:Почему «java.lang.IndexOutOfBoundsException» выбрасывается при доступе к заполненному arraylist?

package main; 

public class Main_Class { 
    public static void main(String[] args) { 
     Game_Map_Handler GMH = new Game_Map_Handler(); 
     GMH.AddData("adad"); 
     System.out.println(GMH.RetrieveData()); 
    } 
} 

Вот еще один класс у меня есть (Game_Map_Handler):

package main; 
import java.util.*; 

public class Game_Map_Handler { 
public List<String> Map_Data = new ArrayList<String>(); 

public void AddData(String InData) { 
    List<String> Map_Data = new ArrayList<String>();  
    Map_Data.add(InData); 
} 

public String RetrieveData() { 
    String To_Return = Map_Data.get(0); 
    return To_Return; 
} 

Это ошибка:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
at java.util.ArrayList.rangeCheck(Unknown Source) 
at java.util.ArrayList.get(Unknown Source) 
at main.Game_Map_Handler.RetrieveData(Game_Map_Handler.java:13) 
at main.Main_Class.main(Main_Class.java:7) 

Почему эта ошибка возникает? Кажется, что в «Map_Data» ничего не заполнено, однако Я сделал.

ответ

15

Вы shadowing Ваш Map_Data переменная, в вашем методе AddData.

public void AddData(String InData) { 
    List<String> Map_Data = new ArrayList<String>(); //<-- remove this line 
    Map_Data.add(InData); 
} 
+3

+1, тень - это точный термин. –

5
public void AddData(String InData) { 
    List<String> Map_Data = new ArrayList<String>(); <---- 
    Map_Data.add(InData); 
};  

Здесь вы создаете новый список и не добавляете его. И, возвращаясь, вы получаете от члена экземпляра.

Просто измените этот метод для

public void AddData(String InData) { 

    Map_Data.add(InData); 
} 

В качестве примечания, пожалуйста, следуйте соглашению об именах Java, что имя переменной должно быть, начинается с прописной буквы, то есть она должна быть map_Data.

4

Вы должны использовать this оператор

this.Map_Data.add(InData); 

В функции вы используете ваш местный объявленный список, а не один из класса.

Смежные вопросы