2013-04-27 2 views
0

Я занят созданием Java-игры, и для врагов я храню их в ArrayList. Но когда я пытаюсь использовать метод get(int), он продолжает давать мне The type of get(int) is erroneous where E is a type-variable: Почему это? Не следует ли просто вернуть элемент? Я искал какое-то время и не смог найти решение этого.Продолжайте получать ошибку для get() arraylist. Зачем?

Вот часть моего кода:

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

+1

Вы, вероятно, должны прочитать о [generic types] (http://docs.oracle.com/javase/tutorial/java/generics/why.html). – Pshemo

+0

Я думаю, потому что вы назначаете его переменной переменной: p – cakil

ответ

2

Это не делает много смысла, основываясь на информации, которую вы должны струйка кормила ...

Но есть ключ в код.

Возможно, вы проигнорировали правила именования Java-идентификаторов и назвали одно из отверстий ваших классов вместо «Отверстие». Это плохой стиль. Но последствия могут быть хуже, чем пощечина на запястье от полиции стиля.

Проблема в том, что правила разрешения имен Java разработаны, чтобы работать лучше всего, когда вы подчиняетесь правилам стиля. Если вы объявляете переменную/поле «дыра», и у вас также есть класс «дыра», JLS говорит, что имя переменной/поля имеет приоритет ... в некоторых контекстах. Это может привести к некоторым довольно запутанным сообщениям об ошибках компиляции, если вы на самом деле означали «дыра», чтобы обозначить класс.

Итак ...

Зафиксировать нарушение стиля путем переименования класса 'дыру', чтобы быть 'Hole'. Это также может привести к тому, что исчезнут странные ошибки компиляции. Но ты все равно должен это сделать!

+3

** ПОЖАЛУЙСТА ** следуйте соглашениям об именах ради здравого смысла каждого (включая компилятор)! Я не понимаю, почему профессора не делают большую сделку из-за стиля ... – jahroy

+0

Если это курс для начинающих, и это похоже на то, что это не до профессора, это зависит от ТП. TA обычно применяют стили кодирования, но разные из них более мягкие или более строгие. – theGreenCabbage

4

Эй родовое user2305801,

столько, сколько я должен подчеркнуть, используя условные синтаксических, так как Стивен C настаивает, я уверен, что вы код не вызывает эту конкретную проблему, когда вы объявляете class- имена строчные.

Я только что застрелил себе стрелу в колене, предположительно совершив ту же ошибку, что и вы. Хотя вы, безусловно, решили проблему в то же время, я упомянул о возможном решении для записей здесь:

Возможно, вам не хватает инструкции пакета в верхней части файла во внешнем файле класса, содержащем объявление для отверстия -класс. Если в файле классов уже содержится объявление пакета, сделайте его тем же пространством имен, что и файл, на который вы ссылаетесь.

Таким образом, в ссылающейся записи файла:

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

спасибо, основанный anon. – Shiki

Смежные вопросы