2017-09-11 2 views
-3

J'ai créé une méthode simple dans ma classe CardGames qui réplique un jeu de cartes pour jouer avec des instructions conditionnelles. J'appelle la méthode d'une classe de joueur séparée parce que le joueur gagne/perd des points basés sur la carte. Je veux que la méthode puisse changer la variable des points des objets joueurs. Ce que je veux faire, c'est que lorsque playSimpleCardGame est appelé par l'objet Player, la méthode change les points de l'objet Player.Variables d'objets changées par méthode dans une autre classe

Mais quand je l'exécute les points ne changent pas. J'ai essayé d'étendre/mettre en œuvre les deux classes (c'est-à-dire tirer dans l'obscurité). J'ai également créé une variable d'instance points dans la classe CardGames, mais l'objet Player n'a pas de points en tant que variable. Qu'est-ce que je rate?

public class Player 
{ 
    private int points; 

    public static void main(String[] args) 
    { 
     CardGames steve = new CardGames(); 
     System.out.println(steve.playSimpleCardGame("red")); 
     System.out.println(steve.playSimpleCardGame("red")); 
     System.out.println(steve.playSimpleCardGame("black")); 
     System.out.println(steve.playSimpleCardGame("black")); 
     System.out.println(steve.points); 
    } 

} 

public class CardGames 
{ 

    /* 
    * Rules of this game: 
    * If you draw a red card, you get a point. 
    * If you draw a black card, you lose two points. 
    */ 
    public int playSimpleCardGame(String color) 
    { 
     if (color.equalsIgnoreCase("red")) 
      return points = points + 1; 
     else 
      return points = points - 2; 
    } 
} 

public class Player 
{ 
    private int points; 

    public Player(){ 
     points=0; 
    } 

    public static void main(String[] args) 
    { 
     CardGames game = new CardGames(); 
     Player steve = new Player(); 
     System.out.println(game.playSimpleCardGame("red", steve)); 
     System.out.println(game.playSimpleCardGame("red", steve)); 
     System.out.println(game.playSimpleCardGame("black", steve)); 
     System.out.println(game.playSimpleCardGame("black", steve)); 
     System.out.println(steve.points); 
    } 

    public int getPoints() { 
     return points; 
    } 

    public void addPoints(int p) { 
     this.points = points + p; 
    } 

} 

public class CardGames 
{ 
    /* 
    * Rules of this game: 
    * If you draw a red card, you get a point. 
    * If you draw a black card, you lose two points. 
    */ 
    public int playSimpleCardGame(String color, Player player) 
    { 
     if (color.equalsIgnoreCase("red")) 
     { 
      player.addPoints(1); 
      return player.getPoints(); 
     } 
     else 
     { 
      player.addPoints(-2); 
      return player.getPoints(); 
     } 
    } 
} 
+0

Vous avez peut-être nommé deux variables 'points', même sur le même objet, mais ce n'est pas la même variable. – user2357112

+0

Votre code ne serait pas compilé, car il n'y a pas de 'points' dans' CardGames' ... Essayez de déplacer les 'points' de' Player' à 'CardGames' ... –

+0

Cela fait fonctionner la méthode, mais ça ne donne pas les points de l'objet Player, les points sont toujours dans CardGames. Je voudrais être en mesure d'appeler quelque chose de la ligne steve.points. – gunsnfloyd

Répondre

-1

Tout d'abord, il n'y a pas besoin d'étendre la classe cardgames par la classe du joueur. Deuxièmement, même si vous souhaitez le faire, ce sera un mauvais design. Je ne vais pas aller dans la partie design. Le code suivant doit répondre à votre problème:

public class Player 
{ 
    public Integer points; 

    public Player(){ 
     points=0; 
    } 

    public static void main(String[] args) 
    { 
     CardGames game = new CardGames(); 
     Player steve = new Player(); 
     System.out.println(game.playSimpleCardGame("red", steve)); 
     System.out.println(game.playSimpleCardGame("red", steve)); 
     System.out.println(game.playSimpleCardGame("black", steve)); 
     System.out.println(game.playSimpleCardGame("black", steve)); 
     System.out.println(steve.points); 
    } 
} 

public class CardGames 
{ 
    /* 
    * Rules of this game: 
    * If you draw a red card, you get a point. 
    * If you draw a black card, you lose two points. 
    */ 
    public int playSimpleCardGame(String color, Player player) 
    { 
     if (color.equalsIgnoreCase("red")) 
      return player.points = player.points + 1; 
     else 
      return player.points = player.points - 2; 
    } 
} 
+0

Merci pour le code. Quand je l'exécute, je reçois le message "Impossible de faire une référence statique aux points de champ non statiques". Rien n'est déclaré comme statique. Le playSimpleCardGame fait-il une référence statique dans son paramètre? – gunsnfloyd

+0

Sur quelle ligne vous obtenez cette erreur @gunsnfloyd? –

+0

Je l'obtiens aux lignes System.out dans Player. – gunsnfloyd