繁体   English   中英

访问已填充的数组列表时,为什么会引发“ java.lang.IndexOutOfBoundsException”?

[英]Why is “java.lang.IndexOutOfBoundsException” thrown when accessing a arraylist that is populated?

这是我的主要课程:

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”中没有填充任何内容,但是我确实填充了它。

您将在AddData方法中隐藏 Map_Data变量。

public void AddData(String InData) {
    List<String> Map_Data = new ArrayList<String>();   //<-- remove this line 
    Map_Data.add(InData);
}
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

您必须使用this运算符

this.Map_Data.add(InData);

在您的函数中,您使用的是本地声明的列表,而不是类中的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM