2
votes

Comment appeler une méthode d'une autre classe?

Je suis donc un débutant en POO et j'ai actuellement des difficultés à utiliser une fonction d'une autre méthode. La classe ci-dessous est la classe principale pour un jeu de cartes. Ici, il crée un jeu de cartes en créant un objet de la classe Game. Il démarre alors le jeu avec le deck créé et doit imprimer la taille du deck.

public class Card {
private int rank;
private int suit;
public Card(int s, int r)
{
    suit=s;
    rank=r;
}
public int getSuit()
{
    return suit;
}
public int getRank()
{
    return rank;
}

La classe ci-dessous est la classe Game. Lorsque le jeu démarre, il doit afficher la taille du deck créé.

public class Deck {

private ArrayList<Card> cards;

public Deck(int range) {
    cards = new ArrayList<Card>();
    for (int i=1; i<=range; i++)
    {
        Card card = new Card(1, i);
        Card card2 = new Card(2, i);
        Card card3 = new Card(3, i);
        Card card4 = new Card(4, i);
        cards.add(card);
        cards.add(card2);
        cards.add(card3);
        cards.add(card4);
    }
}
public int size() 
{
    int num=cards.size();
    return num;
}

La classe ci-dessous est la classe Deck où il crée réellement le deck et a une méthode qui renvoie la taille de ce deck.

public class Game {
public Game(int ranks)
{
    Deck Main = new Deck(ranks);
}
public static void play()
{
    System.out.println(Main.size()); //Where the error occurs
}

La classe finale est la classe Card.

public class Run {

public static void main(String[] args) {

    Game game;
    System.out.println("Welcome!");
    play = true;
    while (play) {
        game = new Game(3); //Create deck of card based on number of ranks given
        game.play(); //Starts the game with deck of card
    }

}

Il doit s'agir d'une erreur évidente due à mon manque de compréhension, alors quelqu'un peut-il montrer comment y remédier?


6 commentaires

Vous mentionnez une erreur, mais ne dites pas quelle est l'erreur ... Bien que nous puissions la comprendre en lisant votre code, vous devez inclure tous ces détails dans votre question.


Sans rapport: Main est une variable, elle doit donc commencer en minuscules. Et votre véritable méthode principale bouclera pour toujours, alors que vous continuez d'appeler la méthode play, mais vous ne changez jamais la variable locale qui contrôle la boucle englobante.


Double possible de Comment appeler une méthode dans une autre classe dans Java?


@GhostCat Ya c'était parce que le jeu n'était pas encore terminé, donc il était censé fonctionner pour toujours. J'aurais probablement dû éditer cette partie et ensuite la publier haha.


@Zephyr Je m'excuse, je vais m'assurer de le faire la prochaine fois.


J'apprécie le retour rapide!


4 Réponses :


3
votes

Vous avez déclaré "Main" comme une variable locale dans le constructeur de la classe Deck. Cela signifie qu'il n'est visible que dans le corps de ce constructeur.

Vous devez plutôt transformer la variable locale en un champ de votre classe. Ce n'est qu'alors qu'il devient "visible" dans d'autres endroits de votre classe! La même chose que vous avez faite correctement pour la suite et le classement dans votre classe de cartes!

Et bien sûr, la méthode de lecture ne doit pas être statique! Un jeu concerne un jeu, pas "tous"!


1 commentaires

Ah je vois me ridiculiser. Merci pour l'explication qui a beaucoup plus de sens.



2
votes

Main déclarée dans le constructeur qui a un impact sur sa visibilité pour une autre classe, vous pouvez l'écrire comme:

Game.play();

un autre pount est, pas besoin de créer un objet pour appeler une méthode statique, vous pouvez appelez-le directement avec le nom de la classe, comme:

Deck Main = null;
public Game(int ranks)
{
    Main = new Deck(ranks);
}


1 commentaires

Bon point sur statique ici, mais alors: cette méthode ne doit pas être statique en premier lieu.



0
votes

Changez de classe de jeu comme suit:

public class Game {
    Deck Main;
public Game(int ranks)
{
    Main = new Deck(ranks);
}
public   void play()
{
    System.out.println(Main.size()); //Where the error occurs
}
}

Ici, vous devez le rendre statique, si vous voulez l'obtenir en méthode statique.

Une autre façon est:

public class Game {
   private static Deck Main;
public Game(int ranks)
{
    Main = new Deck(ranks);
}
public  static void play()
{
    System.out.println(Main.size()); //Where the error occurs
}
}

De toute façon, vous pouvez le rendre sans erreur. Le problème était: vous voulez obtenir une variable qui se trouve à l'intérieur d'un constructeur, Comme dans le constructeur, sa variable locale.

N.B: le nom de la variable doit commencer par lowerCase. Utilisez le cas Pascal comme convention de dénomination pour JAVA.


0 commentaires

-1
votes

veuillez essayer ceci:

public class Game {

private Deck Main;

public Game(int ranks)
{
    Main = new Deck(ranks);
}
public static void play()
{
    System.out.println(Main.size()); //Where the error occurs
}


1 commentaires

Bonjour, bienvenue dans Stack Overflow. Bien que les réponses soient toujours les bienvenues, il est toujours préférable d'expliquer ce que fait votre code et comment il aide à résoudre le problème. Veuillez prendre un moment pour lire "Comment rédiger une bonne réponse?"