2013-04-27 63 views
0

我忙於製作Java遊戲,對於敵人,我將它們存儲在ArrayList中。但是當我嘗試使用get(int)方法時,它一直給我The type of get(int) is erroneous where E is a type-variable:這是爲什麼?它不應該只是返回元素?我搜索了一段時間,一直沒能找到解決辦法。不斷收到一個ArrayList的get()錯誤。爲什麼?

這裏是我的代碼的一部分:

for(int i=0;i<holes.size();i++){ 
    hole temp = holes.get(i); 
    if((p1.playerRec.x/48)==(temp.holeRec.x/48) && (p1.playerRec.y/48)==(temp.holeRec.y/48)){ 
     gameOver=true; 
    } 
} 

public void findHoles(){ 
    for(int i=0;i<map1.height;i++){ 
     for(int j=0;j<map1.width;j++){ 
      if(map1.tileMap[i][j]==5){ 
       addHole(new hole(i,j)); 
      } 
     } 
    } 
} 

public void addHole(hole h){ 
    holes.add(h); 
} 
+0

也許有些代碼會讓我們開心! – DGomez 2013-04-27 01:24:16

+1

您可能應該閱讀[generic types](http://docs.oracle.com/javase/tutorial/java/generics/why.html)。 – Pshemo 2013-04-27 01:24:33

+0

我猜是因爲你把它分配給不同類型的變量:p – cakil 2013-04-27 01:27:27

回答

2

這不是讓總部設在信息,你有涓涓細流給我們吃了很大的意義...

但有一個線索在碼。

您似乎忽略了Java標識符的命名規則,並命名了其中一個類的'hole'而不是'Hole'。這是不好的風格。但其後果可能比風格警察對手腕的打耳光還要糟糕。

問題是,當您遵守樣式規則時,Java的名稱解析規則設計爲最佳。如果你聲明一個變量/字段'洞',並且你還有一個叫'洞'的類,那麼JLS就會說在某些情況下變量/字段名稱優先。這可能會導致一些非常令人困惑的編譯錯誤消息,如果你確實意味着「漏洞」意味着一個類。

所以......

通過重命名類「孔」是「洞」修復的風格衝突。這也可能會讓奇怪的編譯錯誤消失。但是你應該這樣做!

+3

**爲了大家的理智(包括它出現的編譯器),請遵循命名約定!我不明白爲什麼教授不會在風格指導方面做出更大的貢獻... – jahroy 2013-04-27 02:18:46

+0

如果是初學者課程,它看起來像是這樣,這不是教授的職責,而是教師的職責。助教們一般會強制執行編碼風格,但不同的風格對此更爲寬鬆或更嚴格。 – theGreenCabbage 2014-03-28 16:22:14

4

嘿通用user2305801,

,就像我在使用語法約定強調的是,斯蒂芬C的堅持,我敢肯定,你的代碼是不是造成這一特定問題,當你聲明講座名字小寫。

我剛剛在膝蓋上射了一根箭頭,據說和你一樣犯了同樣的錯誤。雖然您在此期間確實解決了這個問題,但我會在此處提及可能的解決方案:

也許您在文件頂部缺少包含聲明的外部類文件中的包聲明-類。如果類文件已經包含一個包聲明,那麼使它與您引用該類的文件名稱空間相同。

所以在引用文件的寫:

package whackamole; 

public static void main(String[] args) 
{ 
    ... 
    for(int i=0;i<holes.size();i++){ 
     Hole temp = holes.get(i); 
    } 
    ... 
} 

而且在類文件:

package whackamole; 

public class Hole 
{ 
    ... 
} 

我知道代碼的例子是有點多餘,但我只是想嘗試一下出。

+0

謝謝基於匿名。 – Shiki 2015-12-11 16:59:11

相關問題