2016-02-22 92 views
0

我有一个包含get_key()和get_angle()方法的方法。 Section类型的项目被添加到Hashtable类中实现的散列表中。 根据我的任务,我应该从哈希表中删除具有比given_value更大的函数get_angle()值的元素。从哈希表中删除项目(java)

class Hashtable{ 
private Section[] hash_array; //array of cells of the hashtable 
public int size; 

public void remove_given(double given_value) 
{ 
    for(int i = 0; i < size; i++) 
    { 
     if (hash_array[i] != null) 
     { 
      double value = hash_array[i].get_angle(); //value of needed function to compare 
      if (value > given_value) 
      { 
       int key_ = hash_array[i].get_key(); //get key for the item in order to delete it  
       Delete(key_); //delete item  
      } 
     }   
    } 
} 

} 

但该方法不删除任何元素。我单独检查了方法Delete(),它的工作方式以及其他在此方法上调用的方法都很好。我真的需要弄明白。所以我会很感激你的帮助。

+0

可能必须先看到您的Section类。 –

+0

我没有看到你在初始化大小的位置?它应该基于哈希的大小。 – Dave

+0

我在类Hashtable的构造函数中初始化。如果需要,我可以添加这部分代码。 –

回答

0

调试你的代码,它是否进入for-loop。你如何初始化size变量的值?如果您忘记初始化它,它将为零。最好从hash_array.length获得大小。

+0

它确实进入循环。我想这个问题在里面。 –

+0

我通过类的构造函数初始化大小Hashtable –

0

对于您使用未初始化的全局变量size的一件事,for循环中使用的大小需要是Hash集合的大小。哈希如何初始化?它是否包含你的想法?我会按照前面提到的建议,使用调试程序遍历代码,也许这些键不是您认为的那些...

+0

即使我编写hash_array.length而不是可变大小,它也不能解决我的问题。无论如何感谢您的帮助。 –

+0

答复已更改,请参阅上文。 – Dave

+0

好的,我会试试。感谢帮助。 –