Accés à un attribut de tableau

Accés à un attribut de tableau - Java - Programmation

Marsh Posté le 18-05-2008 à 01:16:37    

Bonjour.
 
Je ne maitrise pas bien java (je suis nul) et voilà mon problème :
 
déjà voilà mes classes :  
http://jeremy.degraeve.fr/tp_notée/Arene.doc       ==> classe
http://jeremy.degraeve.fr/tp_notée/Case.doc        ==> Interface
http://jeremy.degraeve.fr/tp_notée/CaseVide.doc   ==> classe implements Case
http://jeremy.degraeve.fr/tp_notée/Test.doc        ==> classe test
 
 
je voudrai en faite avec ce que j'ai écrit réussir à afficher mon tableau remplis de CaseVide, mais je n'y arrive pas.
J'ai crée dans mon arène un constructeur qui construit une arene avec un tableau de type Case (qui est une interface).
J'ai ensuite crée un objet :  Case uneCaseVide = new CaseVide();
j'ai affecter à chaque case de mon tableau l'objet uneCaseVide mais pour ensuite y accéder je fais : this (l'arene).tab [i][j].c (attribut de CaseVide) et ca ne marche pas.
Aidé moi s'il vous plaie, je suis pret à réexpliquer mon probleme si ce n'est pas bien fais, merci d'avance.

Reply

Marsh Posté le 18-05-2008 à 01:16:37   

Reply

Marsh Posté le 18-05-2008 à 02:34:00    

Déja foutre son code source dans des .doc c'est totalement con :/
Rien que ça, j'ai meme pas envi d'aider

Reply

Marsh Posté le 18-05-2008 à 02:39:50    

public class Arene {
 int W;
 int H;
 Case [][] tab;
 public Arene (int W,int H){
  tab = new Case [this.W][this.H];
 }
 
 public String afficher (Arene a){
  String affiche="";
  for (int i=0;i<a.W;i++){
   for (int j=0;j<a.H;j++){
    affiche = affiche+a.tab[i][j]+" ";
   }
  affiche = "\n";
  }
  return affiche;
 }
 
 void ajouteCase(Case c, int x, int y){
  this.tab[x][y] = c;
 }
 
 public void remplir(){
  Case uneCaseVide = new CaseVide();
   
  for(int i=0;i<this.W;i++){
   for(int j=0;j<this.H;j++){
    this.ajouteCase(uneCaseVide,i,j);
   }
  }
 }
}
 
 
public interface Case {
 boolean estPossible(Robot r);
 void deplace(Robot r); //throws MouvementExeption;
 boolean bloqueTir();
}
 
 
public class CaseVide implements Case{
 String k = " ";
 
 public boolean bloqueTir() {
   
  return false;
 }
 
 
 public void deplace(Robot r) {
   
   
 }
 
 
 public boolean estPossible(Robot r) {
 
  return false;
 }
 
}
 
 
public class Test {
 public static void main(String[] args) {
  Arene arene1 = new Arene(50,50);
  arene1.remplir();
  System.out.println(arene1.toString());
 }
 
}
 
soit un peu plus poli stp .... Voilà le code

Reply

Marsh Posté le 18-05-2008 à 02:47:55    

public Arene (int W,int H){  
  tab = new Case [this.W][this.H];  
 }  
 
Ouai déja c pas bon ça !
c'est quoi ce "this", il a rien a faire la !
c'est les parametres du constructeur que tu veux récuperer, alors vire le this.

Reply

Marsh Posté le 18-05-2008 à 02:49:01    

Bah le reste c'est bourré de faute.

 

Prend un livre de Java et apprend le Java, surtout le passage qui parle du mot clef "this".


Message édité par Profil supprimé le 18-05-2008 à 02:50:24
Reply

Marsh Posté le 18-05-2008 à 02:49:09    

Ville_ a écrit :

Bonjour.
this (l'arene).tab [i][j].c (attribut de CaseVide) et ca ne marche pas.


Une CaseVide est une Case
mais une Case n'est pas forcement une CaseVide
 
 
voilà pourquoi ce n'est pas possible


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 18-05-2008 à 10:58:35    

ok, je comprend zapan, mais ca me dit toujours pas comment, je vais réduire le problème au maximum.
 
public class Test {
 public static void main(String[] args) {
  Arene arene1 = new Arene(50,50);
  CaseVide m = new CaseVide();
  arene1.ajouteCase(m,1,1);
  System.out.println(arene1.tab[1][1].k);
 }
}
 
Voilà en admettant que ma methode d'ajout de case marche, même en ajoutant directement une case vide dans mon tableau le compilateur bloque à cette ligne : System.out.println(arene1.tab[1][1].k);  sur le ".k" et me dit que mon interface case n'a pas d'attribut "k" mais à ce moment la comment utiliser ma class CaseVide.
 
Pour cantor : je sais que je suis nul en java, merci pour ta franchise ^^

Reply

Marsh Posté le 18-05-2008 à 11:39:35    

zapan666 a écrit :


Une CaseVide est une Case
mais une Case n'est pas forcement une CaseVide

 


voilà pourquoi ce n'est pas possible

 

Il a pas fait un héritage simple, mais une interface avec implémentation .
Une CaseVide n'est pas une case, elle implémente juste la classe Case

 


Si j'ai le temps je te referai tout ca proprement

Message cité 1 fois
Message édité par Profil supprimé le 18-05-2008 à 11:44:54
Reply

Marsh Posté le 18-05-2008 à 12:28:56    

Ville_ a écrit :

System.out.println(arene1.tab[1][1].k);  sur le ".k" et me dit que mon interface case n'a pas d'attribut "k" mais à ce moment la comment utiliser ma class CaseVide.


Vu ton nouveau code, tu travail maintenant sur CaseVide et non Case. L'attribut k est en default (c'est a dire visibilite package) donc pour y avoir accès il faut que ta class qui y accède soit dans le même package que ta class CaseVide. Bref, tu semble ne pas avoir le droit d'accéder à ton attribut car il n'est pas visible (cf mot clé public/private/default/protected)

 


 [:tartragnan]

 



Message édité par zapan666 le 18-05-2008 à 12:32:34

---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 18-05-2008 à 17:29:06    

même quand je modifie la visibilité de l'attribut, ca ne marche pas, essaye tu verras, bon sinon tant pis je demanderai à un pote comment résoudre mon problème. merci bcp

Reply

Marsh Posté le 18-05-2008 à 17:29:06   

Reply

Marsh Posté le 18-05-2008 à 18:46:35    

Ville_ a écrit :

même quand je modifie la visibilité de l'attribut, ca ne marche pas, essaye tu verras, bon sinon tant pis je demanderai à un pote comment résoudre mon problème. merci bcp


uhm, j'ai mal lu, mais le tableau dans Arene est toujours de type Case


---------------
my flick r - Just Tab it !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed