Java - 从另一个类的ArrayList读取

时间:2012-03-07 18:28:07

标签: java class arraylist

我们还没有涵盖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);
    }
}

如果有人能指出我正确的方向,那将是非常有价值的。我试过调试但是我可以得到任何帮助。

提前致谢。

3 个答案:

答案 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数组,是吗?不,你有一个intInteger的数组。

此外,还有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;
    }
}