2013-04-27 65 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

相关问题