Selection du type avec implémentation

jbaymoh Messages postés 3 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 27 janvier 2008 - 26 janv. 2008 à 18:11
jbaymoh Messages postés 3 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 27 janvier 2008 - 27 janv. 2008 à 15:58
Bonjour,
J'ai un projet a rendre cette semaine en java et je bloque sur la selection du type grace a l'implementation.

class Robot{
int nrj=1500;
Cerveau c;
public Robot(){
c=new CerveauAleatoire();       // Cerveau est une interface et CerveauAleatoire l'implemente
}

public interface Cerveau
{
  public Mouvement getMouvement();
}

public class CerveauAleatoire implements Cerveau
{
  public Mouvement getMouvement()
  {
      return new MouvementHaut();

    }
}

class MouvementHaut implements Mouvement()   
{}

j'ai finalement une classe arene ou evolue les robots
import java.util.*;

public class Arene {
Case arene[][];
int ligne;
int colone;
ArrayList <Robot> listeRobot=new ArrayList();

    public Arene(int w, int h){
        ligne=w;
        colone=h;
        arene=new Case[w][h];
      }
 
   

    public void action(MouvementHaut a,Robot r){
        if(arene[r.x-1][r.y].estPossible(r)){
            arene[r.x][r.y]=new CaseVide();
            r.nrj=r.nrj-5;
            r.x=r.x-1;
            arene[r.x][r.y]=r;
        }
    }
   
       public static void main(String []args){
   
       Arene a=new Arene(25,85);
       a.action(a.listeRobot.get(0).c.getMouvement(),a.listeRobot.get(0));
       //Le probleme se produit ici : cannot find symbol methode action (Mouvement m,Robot r)
    }     

}

Je suis vraiment bloqué je pensais que en fonction du type retourné par getMouvement on pouvait selectionner la méthode automatiquement

Merci d'avance pour vos futures reponses

4 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
26 janv. 2008 à 23:53
tu ne peux pas acceder directement a "c" quand tu fait a.listeRobot.get(0).c.getMouvement()
c est un membre privé de la classe robot.
Il faut soit le déclarer en public
soit (je pense que c'est le mieux) faire une méthode getCerveau() { return c; } et a.listeRobot.get(0).getCerveau().getMouvement()

Cdt
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
27 janv. 2008 à 00:18
+1 laurent1024
acceder au variable directement est considerer et est crade ... deplus hors convention (non les mecs ont pas fait ca pour faire chier le monde) ... de plus pour une futur implementation multiThreade ca peut empecher pas mal de truc (genre synchronization)

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
jbaymoh Messages postés 3 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 27 janvier 2008
27 janv. 2008 à 15:56
Salut laurent1024 et sheorogath,


Merci pour vos reponses,j'ai essayé la methode getMouvement mais il y a toujour la meme erreur


je ne comprends pas pour quoi la surcharge de methode ne fonctionne pas


en effet lorsque je fais un getClass() ici : a.listeRobot.get(0).getCerveau().getMouvement().getClass()

Il me retourne bien MouvementHaut et non Mouvement

je ne comprends pas pourquoi le compilateur ne trouve pas la methode action(MouvemenatHaut a,Robot r) ??
0
jbaymoh Messages postés 3 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 27 janvier 2008
27 janv. 2008 à 15:58
euh désolé je voulais ecrire : j'ai essayé la methode getCerveau()
0
Rejoignez-nous