我们还没有涵盖ArrayLists只有Arrays和2D数组。我需要做的是能够从另一个类的ArrayList中读取。主要目的是在for循环中读取它们并使用存储在其中的值来显示项目。但是,我已经制作了这个快速程序来测试它并不断收到此错误
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at Main.Main(Main.java:14)
这是我的代码
import java.util.ArrayList;
public class Main
{
public static void Main()
{
System.out.println("Test");
ArrayList <Objects> xcoords = new ArrayList<Objects>();
for( int x = 1 ; x < xcoords.size() ; x++ )
{
System.out.println(xcoords.get(x));
}
}
}
然后是ArrayList
的类import java.util.ArrayList;
public class Objects
{
public void xco()
{
ArrayList xcoords = new ArrayList();
//X coords
//Destroyable
xcoords.add(5);
xcoords.add(25);
xcoords.add(5);
xcoords.add(5);
xcoords.add(25);
xcoords.add(5);
//Static Walls
xcoords.add(600);
xcoords.add(400);
xcoords.add(600);
}
}
如果有人能指出我正确的方向,那将是非常有价值的。我试过调试但是我可以得到任何帮助。
提前致谢。
答案 0 :(得分:6)
严格来说,异常是由于ArrayList
的位置1索引为0个元素。注意你从哪里开始循环索引变量x
。但请考虑这一行:
ArrayList <Objects> xcoords = new ArrayList<Objects>();
xcoords
指向一个新的空ArrayList
,而不是您在类对象中创建的那个。要获取 ArrayList
,请更改方法xco
,如
public ArrayList<Integer> xco() { // make sure to parameterize the ArrayList
ArrayList<Integer> xcoords = new ArrayList<Integer>();
// .. add all the elements ..
return xcoords;
}
然后,在您的main
方法
public static void main(String [] args) { // add correct arguments
//..
ArrayList <Integer> xcoords = (new Objects()).xco();
for( int x = 0 ; x < xcoords.size() ; x++ ) { // start from index 0
System.out.println(xcoords.get(x));
}
}
答案 1 :(得分:3)
在这里,您只需创建两个完全不相关的列表。要么数组列表是Objects
类的属性,要么通过实例方法检索它,要么从实例或静态方法返回,或者使属性为静态。 IMO前两个在大多数情况下都是可取的。
public class Objects {
public static List<Integer> getXcoords() {
List<Integer> xcoords = new ArrayList<Integer>();
// Your same code, but adding:
return xoords;
}
}
然后使用它:
import java.util.ArrayList;
public class Main {
// Note the lower-case "main" here. You want that.
public static void main() {
List<Integer> xcoords = Objects.getXcoords();
// etc.
此外,您的List
应该是Integer
,而不是Objects
,这会创建一个包含Objects
实例的集合。您可能希望退后一步,以更好的方式将列表与数组相关联 - 您不会创建Objects
数组,是吗?不,你有一个int
或Integer
的数组。
此外,还有Arrays.asList
。
答案 2 :(得分:1)
您有一个IndexOutOfBoundsException
,这意味着您正在尝试访问不存在的数组中的元素。
但是在这里发布的代码中你根本没有访问数组(你的for循环不会执行一次,因为列表是空的),这意味着你的异常会被抛出其他地方。
但你的代码也没有任何意义。我在尽可能接近您的代码的同时为您重构了它,因此您可以看到它是如何工作的:
public static void main(String[] args){
Objects myObjects = new Objects();
ArrayList<Integer> listFromMyObjects = myObjects.getList();
for( int x = 0 ; x < listFromMyObjects.size() ; x++ )
{
System.out.println(listFromMyObjects.get(x));
}
}
public class Objects
{
private ArrayList<Integer> myList;
public Objects(){
myList = new ArrayList<Integer>();
myList.add(5);
myList.add(25);
myList.add(5);
myList.add(5);
myList.add(25);
myList.add(5);
myList.add(600);
myList.add(400);
myList.add(600);
}
public ArrayList<Integer> getList(){
return myList;
}
}