一旦定义了另一个类的ArrayList,如何从其中获取值?

时间:2016-04-11 19:04:08

标签: java android arraylist

我无法理解我在另一个代码中写入ArrayList的信息。 我一直试图从人们已经得到的其他答案中找出答案,但我似乎从来没有做对。

我似乎总是得到相同的回复java.lang.IndexOutOfBoundsException:索引:0,大小:0。它不起作用,我非常确定这是一件简单的事情,这让事情变得更加令人生气。

所以在我的测试项目中,我有一个getter和setter类

import java.util.ArrayList;    
class Values {    
    ArrayList<Double> values = new ArrayList<>();

    public ArrayList<Double> getValueList() {
        return values;
    }

    public void addValue(double price) {
        values.add(price);
    }

    public double getValue(int location) {
        return values.get(location);
    }    
}

然后我有另一个使用这些方法写入ArrayList

的类
import java.util.ArrayList;

public class ValuesTesting {
    Values v = new Values();
    public static void main(String[] args) {
        ValuesTesting vT = new ValuesTesting();
        vT.addValue1();
        vT.addValue2();
        ValueTesting2 vT2 = new ValueTesting2();
        vT2.main();
    }

    private void addValue1() {
        double price = 1502.0;
        v.addValue(price);
    }

    private void addValue2() {
        double price = 1204.0;
        v.addValue(price);
    }
}

然后我想从我的第三个类中读取具有以下代码的值:

import java.util.ArrayList;
public class ValueTesting2 {
    Values v = new Values();
    public void main() {
        getList();
    }
    private void getList() {
        System.out.println(Double.toString(v.getValueList().get(0)));
    }
}

我知道命名是完全错误的,但我只是打算将它作为一个我能最终解决这个问题的类,但我只是不能。

任何帮助都会很棒,谢谢:)

3 个答案:

答案 0 :(得分:1)

您在两个类中都创建了一个新的Values对象。由于它们是值类的不同实例,因此它们不会共享数据。如果要共享同一个实例,则需要将引用从一个引用传递给另一个。

索引超出范围异常的原因是,在您的主要部分中,您尝试获取索引0,但您从未向其添加任何值,因此其大小为0.

答案 1 :(得分:0)

当您执行ValueTesting2 vT2 = new ValueTesting2();时,它会创建一个对象&#39; v&#39; Values级的。{现在,vT2.main()将尝试获取此新创建的对象的Arraylist的第0个元素,该元素无效。

它们都是不同的对象。这就是你得到这个错误的原因。

您可以将具有值的Arraylist传递给ValueTesting2的构造函数,然后尝试。

答案 2 :(得分:0)

您没有传递引用,因此将值引用传递给ValueTesting2。 就这样做 将Values v = new Values();更改为static Values v = new Values();和 将vT2.main();更改为vT2.main(v);我们在此处作为参考传递v。

因此您的完整 ValuesTesting 代码将

import java.util.ArrayList;

    public class ValuesTesting {
    static Values v = new Values();
    public static void main(String[] args) {
        ValuesTesting vT = new ValuesTesting();
        vT.addValue1();
        vT.addValue2();
        ValueTesting2 vT2 = new ValueTesting2();
        vT2.main(v);
    }
    private void addValue1() {
        double price = 1502.0;
        v.addValue(price);
    }
    private void addValue2() {
        double price = 1204.0;
        v.addValue(price);
    }

}