Java 如果没有throw异常,则删除一个键,但使用它不会';T
我目前正在为我的哈希表开发这个方法,目前看起来也是这样Java 如果没有throw异常,则删除一个键,但使用它不会';T,java,hashtable,Java,Hashtable,我目前正在为我的哈希表开发这个方法,目前看起来也是这样 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
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);
}
}
}
public void remove(字符串键)引发MapException{
//TODO自动生成的方法存根
对于(int i=0;ii),我怀疑列表[i]总是为空,并且从不执行“if”块。在这种情况下:
- 保留MapException将引发异常
- 删除MapException在该迭代中将不会执行任何操作,列表[i]将保留空值,这会导致您认为已经执行了“if”块
您的循环将抛出第一个找到的条目,该条目为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" );
}
}
public void remove(字符串键)引发异常
{
布尔删除=假;
for(int i=0;i
BTW1:异常构造函数中的第二个参数用于提供嵌入式异常(例如,在catch块中,您希望将捕获的异常嵌入到新异常中)。提供null是没有意义的
BTW2:在编写代码时一定程度的谨慎可以避免很多令人头痛的情况(“为什么这不起作用…”)。在粘贴的代码中,有几种东西是“气味”:
删除未使用的代码(“//TODO自动生成的方法存根”)
遵守完美的格式(缩进)
遵循命名的常见用法:变量和方法以小写字母开头,类以大写字母开头。名称“List”在java中已经作为类(接口)的名称存在。“List”没有太多含义。在这里,最好将其命名为“keys”
BTW3:您似乎只将delete键设置为null。关联值(您指的是“map”)是什么?逐步检查您的代码。如果i=0
,会发生什么情况?如果是真的吗?我打赌不是。提示:处理代码的格式…仅处理您的其他代码“存在”这一事实左边太远会使您的代码更难理解。。。