排序的矢量添加字符串

时间:2015-01-22 20:06:27

标签: java

我在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;

  }

}

1 个答案:

答案 0 :(得分:0)

maximum设置为新数字不会神奇地增长数组。在Java中,使用给定大小创建数组,并且的大小不会更改

如果你遇到必须增加数组的情况,因为你必须在其中添加更多元素,你必须创建一个新数组,使用新的最大值,将所有现有元素复制到其中,然后分配这个新数组到字段data


我也相信你的setGrowBy()可能没有做到应有的事情。如果你想让它增长阵列,那么它应该按我上面所说的做。但是,如果您打算设置growby变量,则应该这样做,而不是更改maximum


最后注意:Java中的约定是方法和变量名称始终以小写字母开头。只有类型名称应以大写字母开头(并且常量都是大写的)。所以你应该改变方法的名称。