我做了一个名为NumList的ADT,并在类NumArrayList中实现了它
实现的方法中,有一个insert(int i,double value),其中value被插入到array [i]中。
int numItems是一个跟踪我的数组元素的计数器。
public void insert(int i, double value)
{
if (numItems >= items.length)
{
double[] tempItems = new double [items.length * 2];
for(int j =0 ; j < items.length; j++ )
{
tempItems[j] = items[j];
}
tempItems[items.length] = value;
items = tempItems;
}
else
{
if (i > numItems)
{
items[numItems] = value;
}
else
{
for (int k = i; k < numItems; k++)
{
items[k+1] = items[k];
}
items[i] = value;
}
}
numItems++;
}
是我的方法,看起来很简单。
public static void main (String[] args)
{
NumArrayList test;
test = new NumArrayList();
//System.out.println("this is how many initial items the initialized array has.");
//System.out.println(test.items);
test.insert(1, 0.1);
System.out.println("have tried to insert value 0.1 @ position 1, that is the second element in array.");
test.print();
是我的测试代码区域,内置于同一个类中。
我收到一个错误,编译器声称我在第47行或
处有一个ArrayIndexOutOfBoundsExceptiontempItems[items.length] = value;
我相信它试图告诉我项目的初始化是错误的,
private double[] items;
private int numItems;
public NumArrayList()
{
items = new double[0];
numItems = 0;
}
但是初始化已经被一个比我好得多的程序员批准了,这些错误让我无处可去。也许是关于我应该研究哪个方案部分的推动?
答案 0 :(得分:2)
您的初始化肯定是错误的。什么是合理的默认大小?对于ArrayList,答案是10.你可以随心所欲,但不能为零!如果将大小为0的数组的长度加倍,则新数组的长度仍为0。
int capacity; //stores the size of the array (items available)
int numItems; //stores how many items are actually stored in the array.
public NumArrayList() {
items = new double[10];
numItems = 0;
capacity = 10;
}
答案 1 :(得分:0)
你必须记住,数组总是从索引0而不是1开始。所以如果你的数组大小是10,那么最大索引是9而不是10.
tempItems[0] = first element;
tempItems[1] = second element;
等等
假设你有10个元素,你的第十个元素将在tempItems [9]中。试图访问tempItems [10]会抛出你看到的异常。基本上,如果您正在寻找最后一个索引,您希望这样做:
tempItems[items.length-1] = value;
编辑:忘了这个。您在初始化时将数组索引加倍。请参阅上面的Thorn帖子。
答案 2 :(得分:0)
更改此
tempItems[items.length] = value;
到
tempItems[items.length-1] = value;
数组索引从0开始,如果您的数组长度为5,则最后一个索引为4
答案 3 :(得分:0)
将地点分配给数组后,可以说items = new double[0];
,然后就无法更改数组的大小。如果数组初始化为0,则表示您有一个无用的数组。你添加的任何内容,都会使Array索引超出边界异常。
可行的方法是使用集合,特别是List接口。
List myList = new List(); //Create an empty list
myList.add(item); //adds item to List
List还有其他实现,例如ArrayList,LinkedList等......可以更好地满足您的需求。