【问题标题】:Without the throw exception deletes a key but with it doesn't?没有 throw 异常会删除一个键,但不会?
【发布时间】:2016-10-23 11:54:35
【问题描述】:

我目前正在为我的哈希表研究这种方法,目前看起来是这样。

  public void remove(String key) throws MapException {
    // TODO Auto-generated method stub
        for(int i = 0; i <List.length;i++){
            if(List[i] !=null && List[i].equals(key)){
            List[i] = null;
            numberOfElements--;
        }else{
             throw new MapException("Nothing here", null);
        }
    }

}

我的问题是,当我删除 throw new MapException 时,它可以从哈希表中删除实际条目,但是当它在那里时,它会抛出异常但不会删除实际条目?

【问题讨论】:

  • 单步调试您的代码。如果i = 0 会发生什么? if 是真的吗?我打赌不会。
  • 提示:处理代码的格式...仅凭您的 else“位于”左侧太远这一事实就很难理解您的代码...

标签: java hashtable


【解决方案1】:

我怀疑 List[i] 已经为 null 并且 'if' 块永远不会执行。在这种情况下:

  • 保持 MapException 会抛出异常

  • 删除 MapException 在该迭代中不会执行任何操作,并且 List[i] 将保留空值,这会导致您认为“如果”块已被执行。

【讨论】:

    【解决方案2】:

    您的循环在找到的第一个为 null 或其键不等于给定键的条目上抛出。因此,如果您想要删除的键在列表中之后,它将永远无法到达。

    您应该更改 if 语句中的逻辑以检查它是否不是搜索的键,以便继续下一个列表条目。如果您找到了一个密钥并将其删除,那么您必须记住它才能在循环之后抛出:

    public void remove( String key ) throws Exception
    {
        boolean deleted = false;
        for ( int i = 0; i < list.length; i++ )
        {
            if ( List[i] == null || !List[i].equals( key ) )
            {
                continue;
            }
            ist[i] = null;
            numberOfElements--;
            deleted = true;
        }
    
        if ( !deleted )
        {
            throw new Exception( "Nothing here" );
        }
    }
    

    BTW1:异常构造函数中的第二个参数用于提供嵌入式异常(例如,在 catch 块中,您希望将捕获的异常嵌入到新异常中)。提供 null 是没有意义的。

    顺便说一句:在编写代码时一定程度的谨慎可以防止很多令人头疼的情况(“为什么这不工作......”)。在您粘贴的代码中,有几件事“闻起来”:

    1. 删除未使用的代码(“// TODO 自动生成的方法存根”)
    2. 遵守完美的格式(缩进)
    3. 遵循命名的常用用法:变量和方法以小写字母开头,类以大写字母开头。名称“List”已经作为类(接口)的名称存在于 java 中。 AND:“列表”并没有说太多。这里最好命名为“keys”。

    BTW3:您似乎只将要删除的键设置为空。关联值是什么(您说的是“地图”)?

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2010-10-14
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2020-10-30
      相关资源
      最近更新 更多