2011-01-06 92 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; 
}