我无法理解我在另一个代码中写入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)));
}
}
我知道命名是完全错误的,但我只是打算将它作为一个我能最终解决这个问题的类,但我只是不能。
任何帮助都会很棒,谢谢:)
答案 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);
}
}