0

I'm busy making a Java game, and for enemies, I store them in an ArrayList. But when I try to use the get(int) method, it keeps giving me The type of get(int) is erroneous where E is a type-variable: Why is this? Shouldn't it just return the element? I've searched a while and haven't been able to find a solution to this.

Here's the part of my code:

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);
}
4

2 に答える 2

4

ジェネリック user2305801 さん、

Stephen Cが主張しているように、構文規則の使用を強調しなければならないのと同じくらい、クラス名を小文字で宣言するときに、コードがこの特定の問題を引き起こしていないと確信しています。

おそらくあなたと同じ間違いを犯して、膝に矢を放ちました。それまでの間、あなたは確かに問題を解決しましたが、ここでレコードの可能な解決策について言及します。

おそらく、穴クラスの宣言を含む外部クラスファイルのファイルの先頭にある package ステートメントが欠落している可能性があります。クラスファイルに既にパッケージ宣言が含まれている場合は、クラスを参照しているファイルと同じ名前空間にします。

したがって、参照ファイルに次のように記述します。

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
{
    ...
}

コード例が少し余分であることはわかっていますが、試してみたかっただけです。

于 2014-03-28T16:17:45.173 に答える
2

これは、あなたが私たちに少しずつ供給した情報に基づいて、あまり意味がありません...

しかし、コードにヒントがあります。

Java 識別子の命名規則を無視し、クラスの 1 つに「Hole」ではなく「hole」という名前を付けたようです。これはスタイルが悪い。しかし、その結果は、スタイル ポリスから手首を平手打ちされるよりも悪いものになる可能性があります。

問題は、Java の名前解決規則が、スタイル規則に従ったときに最適に機能するように設計されていることです。変数/フィールド 'hole' を宣言し、'hole' というクラスもある場合、JLS は、変数/フィールド名が優先されることを示します ... 一部のコンテキストでは。これにより、実際に「穴」がクラスを意味することを意図していた場合、かなり混乱するコンパイル エラー メッセージが表示される可能性があります。

そう ...

クラス 'hole' の名前を 'Hole' に変更して、スタイル違反を修正します。これにより、奇妙なコンパイル エラーが解消される場合もあります。でもとにかくやるべき!

于 2013-04-27T02:11:57.437 に答える