【问题标题】:Sorted vector adding strings排序向量添加字符串
【发布时间】:2015-01-22 20:06:26
【问题描述】:

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

  }

}

【问题讨论】:

  • java中的数组从0开始索引,如果你创建一个长度为10的数组,即data = new String[10],那么你只能调用0-9来获取每个值。调用data[10] 会抛出一个索引超出范围

标签: java


【解决方案1】:

maximum 设置为新数字不会神奇地增加数组。在 Java 中,数组是以给定的大小创建的,并且该大小不会改变

如果遇到由于必须在其中放入更多元素而必须扩大数组的情况,则必须创建一个具有新最大​​值的新数组,将所有现有元素复制到其中,然后分配这个新数组到字段data


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


最后一点:Java 中的约定是方法和变量名称总是以小写字母开头。只有类型名称应该以大写字母开头(并且常量都是大写的)。因此,您应该更改方法的名称。

【讨论】:

  • 非常感谢所有的答案,但我还有一件事要知道,“int FindItem(String search)”会以递归方式而不是我正确的方式看起来现在 。谢谢
  • 这是一个单独的问题。但是您最好搜索之前提出的问题,例如this one,否则您的问题将作为重复项关闭。无论如何,请记住二进制搜索仅在数组排序后才有效!
猜你喜欢
  • 1970-01-01
  • 2011-10-30
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多