2011-01-06 153 views
0

我在Java上工作。 我尝试下面的代码如何在Arraylist耗尽时将值设置为null。

public Proxy getNextElement() { 

    Iterator<Element> itr = elementsToUse.iterator(); 
    if (proxiesToUse != null){ 

     while (itr.hasNext()) { 
     elementToReturn = itr.next(); 
     if(usedElements.contains(elementToReturn)==false){ 
      usedElements.add(elementToReturn); 
      break; 
     } 
     } 
    return elementToReturn; 
    }else{ 
    Proxy nextElementToReturn = getNextProxy(); 
    return nextElementToReturn; 
    } 
} 

现在我想抛出异常时itr.hasNext()将是错误的,但问题即时得到是因为while循环,当itr.hasNext()变得虚假,设置为elementToReturn最后的值保持为它是,它是返回,因为它是,但我想返回null时elementsToUse的列表中有没有更多的元素..

回答

0

如果在将elementToReturn设置为null之前没有检查条件,则可以在while循环后直接将elementToReturn设置为false。

public Proxy getNextElement() {  
    Iterator<Element> itr = elementsToUse.iterator(); 
    if (proxiesToUse != null){   
     while (itr.hasNext()) {   
      elementToReturn = itr.next();   
      if(usedElements.contains(elementToReturn)==false){    
       usedElements.add(elementToReturn);    
       break;   
      }  
     } 
    elementToReturn = null; 
    return elementToReturn;  
    }else{  
     Proxy nextElementToReturn = getNextProxy();  
     return nextElementToReturn;  
    } 
} 
1

只是返回你的价值观不同

public Proxy getNextElement() { 
     Iterator itr = elementsToUse.iterator(); 
     if (proxiesToUse != null) { 
      while (itr.hasNext()) { 
       elementToReturn = itr.next(); 
       if (usedElements.contains(elementToReturn) == false) { 
        usedElements.add(elementToReturn); 
        return elementToReturn; 
       } 
      } 
      return null; 
     } else { 
      Proxy nextElementToReturn = getNextProxy(); 
      return nextElementToReturn; 
     } 
    } 
0

修改代码,就像下面

 boolean condition = true; 
     while (condition) { 
     elementToReturn = itr.next(); 
     condition = itr.hasNext(); //condition to check next element present 
     if(usedElements.contains(elementToReturn)==false){ 
      usedElements.add(elementToReturn); 
      break; 
     } 
     } 
0

这里是你的代码的一个较短的版本,做同样的事情。我假设usedElements是一个Set,因为不允许重复。

public Proxy getNextElement() { 
    if (proxiesToUse == null) return getNextProxy(); 
    for (Element element : elementToUse) 
     if (usedElements.add(element)) return element; 
    return null; 
}