我正在尝试将Spherocylinder对象添加到数组中。之后,我想在junit中对其进行测试,以验证该对象是否已成功添加到数组中。我遇到的问题是,每当我尝试运行junit测试时,我都会遇到异常异常错误。这是我方法中的代码。
public class SpherocylinderList {
//instance variables.
private String listName;
private Spherocylinder[] sList;
private int numberOfSpherocylinders;
/**
*Constructor for SpherocylinderList.
* @param listNameIn - incoming objects.
* @param sListIn - name of list.
* @param numberOfSpherocylindersIn - number of objects.
*/
public SpherocylinderList(String listNameIn, Spherocylinder[] sListIn,
int numberOfSpherocylindersIn) {
listName = listNameIn;
sList = sListIn;
numberOfSpherocylinders = numberOfSpherocylindersIn;
}
/**
* Method to return total number of Spherocylinders.
* @return numberOfSpherocylinders - total number of ojbects.
*/
public int numberOfSpherocylinders() {
return numberOfSpherocylinders;
}
public void addSpherocylinder(String labelIn, double radiusIn,
double cylinderHeightIn) {
Spherocylinder s = new Spherocylinder(labelIn, radiusIn,
cylinderHeightIn);
sList[numberOfSpherocylinders] = s;
numberOfSpherocylinders++;
}
这是我的Junit测试方法。
@Test public void addSpherocylinderTest() {
Spherocylinder s1 = new Spherocylinder("Small Example", 0.5, 0.25);
Spherocylinder s2 = new Spherocylinder("Medium Example", 10.8, 10.1);
Spherocylinder s3 = new Spherocylinder("Large Example", 98.32, 99.0);
Spherocylinder[] sList = {s1, s2, s3};
SpherocylinderList s = new SpherocylinderList("test", sList, sList.length);
s.addSpherocylinder("test2", 10.9, 10.2);
Assert.assertEquals(4, s.numberOfSpherocylinders());
}
我遇到错误
java.lang.ArrayIndexOutofBoundsException: 3
运行测试时。如何正确测试添加对象?我还想补充一点,我不能使用ArrayList。
答案 0 :(得分:0)
您的“ sList”是一个具有固定维度(3个元素)的数组。分配数组后就无法增加数组。您必须分配一个新的。我建议您使用ArrayList代替数组。
答案 1 :(得分:0)
创建SpherocylinderList对象时,其sList数组将初始化为仅具有空间,该空间可用于提供给它的3个元素。
在addSpherocylinder(string,double,double)方法中添加另一个元素时,它尝试访问sList [3],但是由于sList初始化为只有三个点(索引分别为0、1、2),这会引发异常。
一种方法可能是使用arrayList而不是sList的数组,因为在达到某个项目的容量后插入该项目时,容量会自动增加。
private ArrayList<Spherocylinder> sList;
如果您选择执行此操作,则在构造函数中此行
sList = sListIn;
可以替换为sList = new ArrayList(sListIn);
addSpheroCylinder方法sList[numberOfSpherocylinders] = s;
中的这一行可以替换为sList.add(numberOfSpherocylinders, s)