2016-05-21 12 views
0

Ich habe die Klassen Player, PoliticCard und ModelPlayer. Sowohl Player als auch PoliticCard haben eine ArrayList, um Farbwerte von enum Color zu speichern. Ich möchte die Methode DrawCard() schreiben, die einen Color Wert von ArrayList von PoliticCard nimmt und es in der ArrayList von Player speichert.Java Eclipse schlägt vor, dass ich meine Methode statisch mache

Eklipse ließ mich die ArrayList von PoliticCard-static ändern, aber in jedem anderen Beitrag habe ich gesehen static nur für Konstanten verwendet wird, was hier nicht der Fall ist (die ArrayList in PoliticCard ist wird sich ändern ständig jedes Mal, jeder Spieler die verwendet Methode DrawCard()) so ist eine statische ArrayList in PoliticCard wird ein Problem hier sein?

PS: Alle Klassen sind in verschiedenen Paketen (natürlich habe ich sie alle bei Bedarf importiert), hat es etwas damit zu tun?

public enum Color { 
    RED, GREEN 
} 

public class PoliticCard { 
    private Color cardColor; 
    private static ArrayList<Color> politicCards; 

    public PoliticCard() { 
     int i = 0; 
     while (i < 13) { 
      politicCards.add(Color.RED); 
      i++; 
     } 
     while (i < 26) { 
      politicCards.add(Color.GREEN); 
      i++; 
     } 
    } 

    public static ArrayList<Color> getPoliticCards() { 
     return politicCards; 
    } 

} 

public class Player { 
    private int id; 
    private ArrayList<Color> politicCards; 

    public Player(int id) { 
     this.setId(id); 
    } 

    public ArrayList<Color> getPoliticCards() { 
     return politicCards; 
    } 
} 

public class ModelPlayer { 
    public void Player(Player player) { 
     int i = 0; 
     while (i < 10) { 
      new Player(i); 
     } 

    } 

    public void DrawCard(Player player) { 
     int i = 0; 
     if (PoliticCard.getPoliticCards().get(i) != null) { 
      player.getPoliticCards().add(PoliticCard.getPoliticCards().get(i)); 
      PoliticCard.getPoliticCards().remove(i); 
     } else { 
      i++; 
      player.getPoliticCards().add(PoliticCard.getPoliticCards().get(i)); 
      PoliticCard.getPoliticCards().remove(i); 
     } 

    } 
} 
+1

Sind Sie sicher, dass Sie nicht "final" statt "statisch" meinen? Außerdem * bitte * formatiere deinen Code vor dem Posten - im Moment ist es wirklich schwer zu lesen. –

+0

Wenn die Liste eine Instanzvariable (nicht statisch) sein soll, benötigen Sie eine 'PoliticCard' _instance_ für den Zugriff darauf. Momentan greifen Sie über statischen Kontext/Klassennamen auf die Liste zu. –

Antwort

3

Eklipse hat mich der Arraylist von PoliticCard zu ändern, um statische

Es war nicht das Eclipse, die gezwungen haben Sie es zu ändern statisch die Java-Compiler war. Und der Grund dafür ist, diese Zeile in Ihrer drawcard Methode:

PoliticCard.getPoliticCards().remove(i); 

Sie versuchen Klasse PoliticCard zugreifen Getter für Karten Politik anstelle von Instanz PoliticCard. Und deshalb müssen sowohl der Getter als auch das Feld statisch sein.