我在java中有这个代码用于排序的向量,但我有一个问题,不知何故它没有正确添加,你可以得到像" 异常:java.lang.ArrayIndexOutOfBoundsException:10" 。 也许需要稍加修改,但我没有看到它。 有人可以帮我做这个工作吗?
谢谢
package ads2;
public class SortedVector {
private int length;
private int maximum;
private int growby;
private int temp;
private int x = 0;
private int high;
private int middle;
private int low;
private String[] data;
public SortedVector()
{
length = 0;
maximum = 10;
data = new String[maximum];
}
public void SetSorted() {
}
public void SetGrowBy(int growby)
{
maximum += growby;
}
public int GetCapacity()
{
return maximum;
}
public int GetNoOfItems()
{
return length;
}
public String GetItemByIndex(int index)
{
return data[index];
}
public int FindItem(String search)
{
for (x=0;x<=length; )
{
middle =((low + high)/2);
if (data[middle].compareTo(search)==0)
{
return middle;
}
else if (data[middle].compareTo(search)<0)
{
low = middle;
x++;
return FindItem(search);
}
else
{
high = middle;
x++;
return FindItem(search);
}
}
return -1;
}
public boolean Exists(String search)
{
boolean output;
int y;
y = 0;
while (data[y] != search && (length - 1) > y)
{
++y;
}
if (data[y] == search)
{
output = true;
} else
{
output = false;
}
y = 0;
return output;
}
public void AddItem(String value)
{
if (length == maximum)
{
maximum += 10;
}
data[length] = value;
length++;
}
public void InsertItem(int index, String value)
{
if (length == maximum)
{
maximum += 10;
}
for(int i = length - 1; i >= index; --i)
{
data[i + 1] = data[i];
}
data[index] = value;
length++;
}
public void DeleteItem(int index)
{
for(int x = index; x < length - 2; ++x)
{
data[x] = data[x + 1];
}
length--;
}
public String toString()
{
String res = "";
for (int i=0; i<length; i++)
res+=data[i] + "; ";
return res;
}
}
答案 0 :(得分:0)
将maximum
设置为新数字不会神奇地增长数组。在Java中,使用给定大小创建数组,并且的大小不会更改。
如果你遇到必须增加数组的情况,因为你必须在其中添加更多元素,你必须创建一个新数组,使用新的最大值,将所有现有元素复制到其中,然后分配这个新数组到字段data
。
我也相信你的setGrowBy()
可能没有做到应有的事情。如果你想让它增长阵列,那么它应该按我上面所说的做。但是,如果您打算设置growby
变量,则应该这样做,而不是更改maximum
。
最后注意:Java中的约定是方法和变量名称始终以小写字母开头。只有类型名称应以大写字母开头(并且常量都是大写的)。所以你应该改变方法的名称。