[英]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.