我试图检查数组的插槽是否等于null,以便遍历哈希表。 但是,我得到了NullPointerException。 有什么办法可以解决这个问题?

谢谢!

这是导致问题的next()方法(及其类)。

 public K next() throws NoSuchElementException{
      int tempStore = -1;
      MapHashCellList tempCells = null;
      System.out.println("Got here! 1");
      System.out.println(mapCells);
      if(mapCells.length==0) {throw new NoSuchElementException();}
      if (mapCells[arrayPointer]!=null && listCounter<=mapCells[arrayPointer].size()-2){
              System.out.println("Got here! 2");
        tempCells = mapCells[arrayPointer];
        tempStore = listCounter;
        listCounter++;
      }
      else{
        arrayPointer++;
              System.out.println("Got here! 3");
        while (mapCells[arrayPointer]==null){
          arrayPointer++;
          listCounter=0;
                System.out.println("Got here! 4");
          if(mapCells[arrayPointer]!=null){
            tempCells = mapCells[arrayPointer];
            tempStore = listCounter;
            listCounter++;
          }
          System.out.println("ListCounter: " + listCounter);
          System.out.println("Array: " + arrayPointer);
        }
      }
      return (K)tempCells.get(tempStore).getKey();
    }

根据用户的一个问题,这是整个班级的代码:

import java.util.*;

public class ProjectMap<K,V> implements MapInterface<K,V>{

  public MapHashCellList[] mapCells;
  public int size;

  public ProjectMap(){
    mapCells = new MapHashCellList[11];
    size = 0;
  }

  public boolean containsKey( K key ){
    if(key==null){return false;}
    if(isEmpty()){return false;}
    if(mapCells[hashValue(key)]!=null){
      MapHashCellList temp = (MapHashCellList)mapCells[hashValue(key)];
      for (int g =0; g<temp.size(); g++){
        if (temp.get(g).getKey().equals(key)){
          return true;
        }
      }
    }
    return false;
  }

  public boolean isEmpty(){
    if(size==0){return true;}
    else return false;
  }


  public int hashValue(K key){
    return (int)(Math.abs(key.hashCode()%10));
  }

  public MapHashCellList get(int index){
    return (MapHashCellList)mapCells[index];
  }

  public V get( K key ){
    if(mapCells[hashValue(key)]!=null){
      MapHashCellList temp = (MapHashCellList)mapCells[hashValue(key)];
      for (int q =0; q<temp.size(); q++){
        if (temp.get(q).getKey().equals(key)){
          return (V)temp.get(q).getValue();
        }
      }

    }
    return null;
  }

  //Key = docID, V = documentNumber
  public V put( K key, V value ){
    //If cell isn't empty and Key exists, replace existing Value since duplicate
    if(mapCells[hashValue(key)]!=null){
      MapHashCellList temp = (MapHashCellList)mapCells[hashValue(key)];
      for (int q =0; q<temp.size(); q++){
        if (temp.get(q).getKey().equals(key)){
          V temp1 = (V)temp.get(q).getValue();
          temp.get(q).setValue(value);
          return temp1;
        }
      }
    }

    //Otherwise add to end of linkedlist
    if(mapCells[hashValue(key)]!=null){
      MapHashCellList temp = (MapHashCellList)mapCells[hashValue(key)];
      MapHashCell newCell = new MapHashCell(key,value);
      temp.add(newCell);
      size++;
      return null;
    }


    //Index doesn't exist yet, so make new LinkedList and add to correct index position
    MapHashCellList newCell = new MapHashCellList(key,value);
    mapCells[hashValue(key)] = newCell;
    size++;
    return null;
  }


  public V remove( K key ){
    if(mapCells[hashValue(key)]!=null){
      MapHashCellList temp = (MapHashCellList)mapCells[hashValue(key)];
      for (int q =0; q<temp.size(); q++){
        if (temp.get(q).getKey().equals(key)){
          V temp1 = (V)temp.get(q).getValue();
          temp.remove(q);
          size--;
          return temp1;
        }
      }
    }
    return null;
  }

  public int size(){
    return size;
  }

  public Iterator<K> iterator(){
    Iterator<K> temp = new KIterator();
    return temp;
  }

  private class KIterator implements Iterator<K>{
    int arrayPointer=0;
    int listCounter=0;

    KIterator(){
    }


    public K next() throws NoSuchElementException{
      int tempStore = -1;
      MapHashCellList tempCells = null;
      System.out.println("Got here! 1");
      System.out.println(mapCells);
      if(mapCells.length==0) {throw new NoSuchElementException();}
      if (mapCells[arrayPointer]!=null && listCounter<=mapCells[arrayPointer].size()-2){
              System.out.println("Got here! 2");
        tempCells = mapCells[arrayPointer];
        tempStore = listCounter;
        listCounter++;
      }
      else{
        arrayPointer++;
              System.out.println("Got here! 3");
        while (mapCells[arrayPointer]==null){
          arrayPointer++;
          listCounter=0;
                System.out.println("Got here! 4");
          if(mapCells[arrayPointer]!=null){
            tempCells = mapCells[arrayPointer];
            tempStore = listCounter;
            listCounter++;
          }
          System.out.println("ListCounter: " + listCounter);
          System.out.println("Array: " + arrayPointer);
        }
      }
      return (K)tempCells.get(tempStore).getKey();
    }

    public boolean hasNext(){
      if(isEmpty()) {return false;}
      for(int d=arrayPointer; d<mapCells.length; d++){
        if (mapCells[d]!=null){
          try{
            if(mapCells[d].get(listCounter+1)!=null){
              return true;
            }
          }
          catch(IndexOutOfBoundsException e){
            for(int l=arrayPointer; l<mapCells.length; l++){
              if (mapCells[l]!=null){
                return true;
              }
              else{
                return false;
              }
            }
          }
        }
      }
      return false;
    }

    //Removes last element
    public void remove(){
      mapCells[arrayPointer].remove(listCounter-1);
    }
  }
}

===============>>#1 票数:1 已采纳

至少一个问题是您的public K next方法:

public K next() throws NoSuchElementException{
  int tempStore = -1;
  MapHashCellList tempCells = null;
  System.out.println("Got here! 1");
  System.out.println(mapCells);
  if(mapCells.length==0) {throw new NoSuchElementException();}
  if (mapCells[arrayPointer]!=null && listCounter<=mapCells[arrayPointer].size()-2){
          System.out.println("Got here! 2");
    tempCells = mapCells[arrayPointer];
    tempStore = listCounter;
    listCounter++;
  }
  else{
    arrayPointer++;
          System.out.println("Got here! 3");
    while (mapCells[arrayPointer]==null){
      arrayPointer++;
      listCounter=0;
            System.out.println("Got here! 4");
      if(mapCells[arrayPointer]!=null){
        tempCells = mapCells[arrayPointer];
        tempStore = listCounter;
        listCounter++;
      }
      System.out.println("ListCounter: " + listCounter);
      System.out.println("Array: " + arrayPointer);
    }
  }
  return (K)tempCells.get(tempStore).getKey();
}

在一开始的时候:

MapHashCellList tempCells = null;

然后看else部分。 您有以下循环:

while (mapCells[arrayPointer]==null){

在此循环中,您有以下内容:

if(mapCells[arrayPointer]!=null){
        tempCells = mapCells[arrayPointer];
        tempStore = listCounter;
        ..................

由于该方案将永远不会在这里面得到if (你的while条件保证了它), tempCells保持为空

然后,最后您将具有以下功能:

return (K)tempCells.get(tempStore).getKey();

它必须产生NullPointerException

  ask by MakMak translate from so

未解决问题?本站智能推荐:

3回复

对象数组未正确初始化

通过此代码,我试图将包含数据的文件加载到对象数组中。 我没有正确初始化对象中的字段,因为在运行此代码时会收到NullPointerException。 该数组在那里,甚至是正确的大小,但未初始化字段。 我该如何解决? 这是代码:
1回复

如何在遍历xls文件中的单元格时修复Null指针异常

我一直在尝试解决Null指针异常。 我已经尝试try并catch它,但是没有用。 调试显示了迭代器开始的那一行,它引用了一些null值,并抛出了null pointer exception但我找不到它。 我已经尝试了所有但无法解决。 错误是 ReadDataUsingI
1回复

无法在迭代器(java)中引用以前使用的元素

当我使用迭代器遍历条目集的元素时,我无法引用之前已被迭代的元素。 这是更具体的问题: 通过键(450,450)遍历元素后,该行 产生一个空指针异常。 任何人都可以帮助您了解如何解决此问题,甚至是真正的问题所在吗? 很抱歉,如果没有足够的信息,或者代码难以阅读。
3回复

迭代器-空指针异常错误

我遇到了一个非常令人沮丧的问题: 我正在尝试运行一个迭代器,但是在hasNext类中它会不断出现java.lang.NullPointerException。 我不太确定它在哪里尝试使用null值。 我认为这与当前有关。 我添加了一条if语句来检查current是否为null。
1回复

迭代器中的NullPointerException

我有一个静态方法,其中获取推文列表和城镇名称作为参数,并从列表中删除不是源自城镇的推文,也不是源自城镇的用户。 这是我的代码: 我的问题是我在第62行获得了NullPointerException ,它是与it.remove()所在的行。 迭代器怎么可能为空? 这对我来说没
2回复

代码错误:空对象引用上的NullPointerException,我该如何解决?

几个小时后,我day.setIcon()了问题与day.setIcon() 。 之所以得出这个结论,是因为尽管调用了该方法,但mIcon的值没有改变。 java.lang.NullPointerException:尝试在teamtreehouse.com.myapplication.
2回复

调用null对象的方法后,没有null指针异常

我是编程新手,并且大部分时间都在使用Java。 通常,如果我不小心尝试从null变量中调用方法,则会得到null指针异常。 但是,在一种情况下,我发现程序执行被卡住了(仍在运行,但不会再执行任何行)而没有产生异常。 什么原因导致对对象变量为null的方法调用不会产生空指针异常?
3回复

测试对象是否为空的通用代码?

有人可以帮助我提供通用的优化代码来测试空对象吗? 我基本上在寻找的是一种方法,该方法可以将任何对象作为输入,也可以作为路径,并返回一个布尔值,指定目标对象是否为null。 像这样: 路径类似于:A.getB()。getC()。 。 。 因此,将A作为对象传递,并且isN
2回复

arraycopy中的空指针异常

我目前正在学习Java,并且正在努力学习泛型。 我有Holder varargs的班级Holder 。 我试图将这些放入一个数组myArray以备将来使用。 但是我在arraycopy行上得到一个NullPointerException ,我似乎无法弄清楚原因。 这是我用来创建实例
1回复

如何在equals()中按比例考虑null?

为了避免equals()出现空指针异常,我必须考虑一个或多个空值的可能性。 有没有一种可扩展的方式来考虑空值? 如果添加更多类型参数,以下代码将变得非常难看。