【问题标题】:Delete items from hashtable (java)从哈希表中删除项目(java)
【发布时间】:2016-02-22 17:38:47
【问题描述】:

我有一个类Section,其中包含几个方法,包括get_key() 和get_angle()。 Section 类型的项目被添加到在类 Hashtable 中实现的哈希表中。 根据我的任务,我应该从哈希表中删除函数 get_angle() 的值大于给定值的元素。

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() 方法,它以及在此方法上调用的其他方法都可以正常工作。我真的需要弄清楚。所以我会很感激你的帮助。

【问题讨论】:

  • 可能必须先查看您的 Section 课程。
  • 我没有看到你在哪里初始化大小?它应该基于Hash的大小。
  • 我在类Hashtable的构造函数中初始化。如果需要,我可以添加这部分代码。
  • 这里有几点注意事项: 1) 如果您担心精度(大多数情况下,您可能是这样),则不应使用 double... 改用 BigDecimal。此外,使用普通的 Java 约定来命名变量和方法(例如,代替 hash_array,使用 hashArray,removeGiven 代替 remove_given 等)。

标签: java data-structures hashtable


【解决方案1】:

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

【讨论】:

  • 它确实进入了循环。我猜问题出在它里面。
  • 我通过类Hashtable的构造函数初始化size
【解决方案2】:

一方面,您使用的是未初始化的全局变量sizefor 循环中使用的大小必须是哈希集合的大小。哈希是如何初始化的?它包含你的想法吗?我会按照上述建议使用调试器逐步执行代码,也许键不是您认为的那样......

【讨论】:

  • 即使我写 hash_array.length 而不是可变大小,它也不能解决我的问题。不管怎样,谢谢你的帮助。
  • 答案已更改,见上文。
  • 好的,我会试试的。感谢您的帮助。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2021-06-01
  • 2021-04-06
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多