这是我的主要课程:
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”中没有填充任何内容,但是我做了填充它。
答案 0 :(得分:15)
您Map_Data
方法中的AddData
变量是shadowing。
public void AddData(String InData) {
List<String> Map_Data = new ArrayList<String>(); //<-- remove this line
Map_Data.add(InData);
}
答案 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
。
答案 2 :(得分:4)
您必须使用this
运算符
this.Map_Data.add(InData);
在您的函数中,您使用的是本地声明的列表,而不是类中的列表。