2016-11-16 7 views
1
import java.util.*; 

public class GameMain{ 

    public static void main(String [] args){ 
     Scanner scan = new Scanner(System.in); 
     Random rand = new Random(); 
     Enemy e1 = new Knight(); 
     Enemy e2 = new Skeleton(); 
     Enemy e3 = new Demon(); 
     ArrayList<Enemy> enemyArray = new ArrayList<Enemy>(); 
     enemyArray.add(e1); 
     enemyArray.add(e2); 
     enemyArray.add(e3); 
    } 



    public static void enterCastle(ArrayList enemyArray, Random rand){ 

     int enemy = rand.nextInt(2); 
     String name = enemyArray.get(enemy).getName(); 
     System.out.println(); 
     System.out.println("You enter the castle"); 
     System.out.println("Darkness are closing on you!"); 
     System.out.println("You hear something from behind you"); 
     System.out.println("you look behind you and see a "+enemyArray.get(enemy).getName()); 


     } 

Fehler finden:Arraylist kann nicht Symbol

GameMain.java:51: error: cannot find symbol 
    String name = enemyArray.get(enemy).getName(); 
            ^
    symbol: method getName() 
    location: class Object 
GameMain.java:56: error: cannot find symbol 
    System.out.println("you look behind you and see a "+enemyArray.get(enemy).getName()); 
                      ^
    symbol: method getName() 
    location: class Object 
2 errors 

ich eine Methode zu machen versuchen, die einen zufälligen Gegner aus Super-Klasse wählen, die in einem Arraylist namens enemyArray.

Wenn ich versuche, die getName-Methode von der Superklasse aufzurufen, bekomme ich den Fehler unten.

kann mir jeder von euch sagen, was ich mache worrng?

+1

Versuchen Sie 'öffentliche statische void enterCastle (ArrayList enemyArray, Random Rand) {... ' – bradimus

Antwort

3
public static void enterCastle(ArrayList enemyArray, Random rand) 

Dies erklärt enemyArray als eine Liste von Object s. Der generische Parameter fehlt. Wenn Sie enemyArray.get(enemy) aufrufen, ist das Ergebnis eine Object, und Object hat keine getName() Methode, daher der Fehler.

public static void enterCastle(ArrayList<Enemy> enemyArray, Random rand) 
2

Nun Ihr Code so etwas wie dies lässt vermuten ist:

public static void enterCastle(ArrayList<Enemy> enemyArray, Random rand) 

Grund für den Fehler: Als Ihre Methodensignatur von enterCastle Methode als

class Enemy{ 
    public String getName(){ 
    // bla bla 
    return "hey"; 
    } 
} 
class Knight extends Enemy{ 

} 
class Skeleton extends Enemy{ 

} 
class Demon extends Enemy{ 

} 

einfach ändern Sie erwähnen nicht die Generische Art, Java übernimmt t o nimm es als Objekt und finde daher die Methode nicht.

+0

Das ganze *" Nun lass uns annehmen "* Teil mit dem ersten Codeblock ist nicht wirklich wichtig für Ihre Antwort und die Lösung für OPs Problem. Sie können darüber nachdenken, das zu entfernen. – Tom

+0

@Tom, ich habe es nur benutzt, weil wenn ein Anfänger auf diese Frage kommt, er/sie sich über die Klassen, die verwendet wurden, und die Beziehung zwischen ihnen sorgen könnte. Vielleicht kann es jemandem helfen ... –