[英]Index Error with a For-Loop and a LinkedList
我正在嘗試自己制作一個小游戲以適應Java,我只是遇到了LinkedList Index的問題。 我找到了解決問題的方法,但我仍然不明白為什么我的第一個解決方案無效。 這段代碼:
for (int i=0; i <= PlanetList.size(); i++)
{
g.drawImage(PlanetList.get(i).planetImage, PlanetList.get(i).xPos, PlanetList.get(i).yPos);
}
給了我一個java.lang.IndexOutOfBoundsException,但是這段代碼:
for (int i=1; i <= PlanetList.size(); i++)
{
g.drawImage(PlanetList.get(i-1).planetImage, PlanetList.get(i-1).xPos, PlanetList.get(i-1).yPos);
}
事情是......我的索引在兩種情況下從0開始。 為什么第一個給我一個錯誤?
第一個示例中的最后一個索引超出了允許的索引范圍。 例如,如果列表的大小是10,則允許的索引范圍是[0 9]。 在第一個循環中,它最多為10( i <= PlanetList.size()
)。 將終端條件更改為i < PlanetList.size()
以修復您的問題。
替代方法是不使用索引來訪問列表中的元素,如@GhostCat建議的那樣:
for (Planet planet : PlanetList) {
g.drawImage(planet.planetImage, planet.xPos, planet.yPos);
}
這稱為Java中的每個循環
另一種解決方案是簡單地使用無索引版本來迭代多年前引入的“集合”:
for (Planet planet : PlanetList) {
g.drawImage(planet.planetImage, planet.xPos, planet.yPos);
作為一個很好的副作用,這也消除了你的示例中的代碼重復。
雖然我們在這里:你在某種程度上違反了“告訴不要問”的原則。 含義:您要求您的星球物體提供繪制它所需的所有細節。 在良好的面向對象設計中,您可以避免這種情況。 相反,你告訴對象做某事。 換句話說:你可以改變你的星球類
public void drawWith(Graphics g) { ...
有了這個,上面的代碼可以重寫為:
for (Planet planet : ... ) {
planet.drawWith(g);
您正在獲得Out of bounds錯誤,因為我在for循環中聲明的變量運行的時間小於等於planetlist大小的條件,因為我從零開始它將一直到鏈表大小,但是因為你給出了小於等於它再循環進入循環因此超出范圍異常。將for循環條件更改為i小於鏈表大小它將工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.