Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JAVA] getters et tableau

Sujet résolu
    21 octobre 2016 à 22:50:36

    Bonjour a tous, 

    Je fait appel à votre aide car je n'ai pas compris comment on utilise les getters avec des tableaux ...

    Quelqu'un pourrait m'expliquer ?

    j'ai ce code par exemple :

    public class Envir extends JPanel {
    // classe ou est crée le tableau  
    //en réalité il y plein d'autres trucs dedans mais c'est pas le problème 
    
    public int tablPosNouriture[][]= new int[3][200];
    //le tableau en question 
    
    public Envir(){
    super();
    public int[][] getTablPosNouriture() {return tablPosNouriture;}
    
    	public void setTablPosNouriture(int[][] tablPosNouriture) {this.tablPosNouriture = tablPosNouriture;}}

     comment faire pour me resservir de ce tableau dans d'autres classes ?

    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2016 à 3:29:40

      salut,

      j'ai pas compris ce que tu veux faire, mais je veux te dire une chose, si tu veux utiliser un getter et un setter pour manipuler ton tableau depuis l’extérieur (un autre objet) alors tu le mets privé (private), en plus tu as oublié de fermer le constructeur de ta classe (Envir(){ .....).

      • Partager sur Facebook
      • Partager sur Twitter
        22 octobre 2016 à 10:15:13

        Ah oui désolé mais c’était juste pour l'exemple mais j'en prends note, surtout pour le private , je ne savais pas merci.

        Enfaîte j'aimerais juste que vous m'expliquiez comment utiliser  .get (le getter que j'ai mis a la fin) sur un tableau

        pour pouvoir  l'utiliser dans une autre variable (par exemple en le stockent dans un autre tableau) car la si dans une autre classe    

        j'utilise "tablPosNouriture[3][5]= 1" ; (par exemple) et bien éclipse me dit qu'"il n'existe pas de tableau nommé tablPosNouriture" 

        donc voila la question en résumé : comment utilisé un tableau en dehors de la classe ou je l'ai créer (dans une autre classe quoi) ?  

        • Partager sur Facebook
        • Partager sur Twitter
          22 octobre 2016 à 17:01:08

          salut,

          pour le set, si tu as besoin de créer le tableau tu peux créer une méthode pour ça comme ça :

          public void initialiseTablPosNouriture(int nbrL, int nbrC){ // nbrL: nombre des lignes, nbrC: nombre des colonnes
              this.tablPosNouriture = new int [nbrL][nbrC];
          }


          mais si tu veux remplacer le tableau alors tu fais comme ça :

          public void setTablPosNouriture(int[][] newTab){
              this.tablPosNouriture = newTab;
          }

          et pour le get, il y'a plusieurs méthode pour le faire :

          1- créer une méthode qui retourne le tableau lui même afin de pouvoir y accéder directement pour accéder à l'élément désiré (en lecture et écriture) :

          public int[][] getTablPosNouriture() {
              return tablPosNouriture;
          }
          // exemple : getTablPosNouriture[0][0] = 12; int x = getTablPosNouriture[1][0];

          2- créer une méthode avec les paramètres qui permettent d'accéder à l'élément désiré :

          public int getElementAt(int posL, int posC) { // posL: position ligne, posC: position colonne
              return tablPosNouriture[posL, posC];
          }

          et si tu veux modifier un élément directement tu fais comme ça :

          public void setElementAt(int posL, int posC, int valeur) {
              tablPosNouriture[posL, posC] = valeur;
          }



          -
          Edité par manoranx 22 octobre 2016 à 17:07:44

          • Partager sur Facebook
          • Partager sur Twitter
            22 octobre 2016 à 17:47:18

            manoranx  merci de ton aide mais j'ai essayer d'utiliser ton exemple 1 

            tout va bien a la déclaration mais à

             int x = getTablPosNouriture[1][0];

            il me met  "getTablPosNouriture cannot be resolved to a variable"

             et avec la deuxième j'ai 

            "The method getElement(int, int) is undefined for the type Poisson" 

            mais la ca doit venir d'un probleme de mon code que voici :

            premiere classe ou se trouve le tableau

            import java.awt.Graphics;
            import java.awt.Graphics2D;
            import java.awt.Image;
            import java.util.ArrayList;
            import java.util.Random;
            
            import javax.swing.ImageIcon;
            import javax.swing.JPanel;
            
            import objets.Nouriture;
            import objets.Objets;
            
            @SuppressWarnings("serial")
            public class Envir extends JPanel {
            		// classe qui va tout gerer en gros 
            	//penser a changer 200 par une variable qu'on va pouvoir changer
            	private Nouriture[]nouriture = new Nouriture[200];// on creer un tableau d'objets
            	private ImageIcon icoFond;
            	private Image imgFond;
            	private int Xfond1;
            	public int[][] tablPosNouriture= new int[3][200]; //on créer un grand tableau vide avec tte les positions + les noms genre {"x","y","nom"}
                private ArrayList<Nouriture> tabNour; // tableau d'objet qui contien tout les nouriture
            	
            	//constructeur
            	public Envir(){
            		super();
            		//ici on déclare tt nos merdes
            		
            		this.Xfond1 = 0;
            		icoFond = new ImageIcon(getClass().getResource("/images/Fond.png"));
            		this.imgFond = this.icoFond.getImage();
            		
            		
            		
            		// peut etre metre ca dans main
            		for(int i=0; i<200 ; i++){
            			Random rand = new Random();
            			int nombX = rand.nextInt(1450); //création d'un nombre aléatoire 
            			int nomby = rand.nextInt(950); //création d'un nombre aléatoire 
            		nouriture[i] = new Nouriture(nombX,nomby,i);//création de 200 nouritures aléatoire
            		tablPosNouriture[0][i] = i;// 1er ligne = nom (utile plus tard pour colisions (quand la bete et la nouriture seront au meme endroite on utilisera le nom pour changer sa position pour pas que la bte sois statique
            		tablPosNouriture[1][i] = nombX;//2eme = X
            		tablPosNouriture[2][i] = nomby;// 3 eme = Y
            		}
            		
            		
            		//test ci la tableau marche bien 
            		System.out.println(tablPosNouriture[0][130]);
            
            		System.out.println(tablPosNouriture[1][130]);
            
            		System.out.println(tablPosNouriture[2][130]);
            //ca marche bien okok 
            		
            		
            		
            	tabNour = new ArrayList<Nouriture>();
            	
            	
            	for(int c=0; c<200 ; c++){
            		this.tabNour.add(nouriture[c]);	//on remplis tabnour}
            	
            	}
            		
            		
            		
            		
            		
            		
            		
            		
            		Thread chronoEcran = new Thread(new Chrono());// petit programe qui tourne en fond qui repeind oklm
            	chronoEcran.start();
            	}
            	
            	
            	
            	
            	
            	public void paintComponent(Graphics g){
            	super.paintComponent(g);
            	Graphics g2 = (Graphics2D)g;
            	g2.drawImage(imgFond, Xfond1, 0, null);
            	
            	
            	for(int b=0 ;b<tabNour.size();b++){
            		g2.drawImage(this.tabNour.get(b).getImgNouriture(), this.tabNour.get(b).getX(), this.tabNour.get(b).getY(), null);
            	}}
            	
            
            
            
            ///////////////////////////ici ce que tu m'as dit //////////////////////////
            	public int getElement(int PosL, int PosC) {
            		return tablPosNouriture[PosL][PosC];
            	}
            
            	public void setTablPosNouriture(int[][] tablPosNouriture) {
            		this.tablPosNouriture = tablPosNouriture;
            	}
            	
            	
            	///////////////////
            //////////////ne pas prendre en conte la suite//
            	
            	
            	public  int[] Scaner (int Xp,int Yp){		
            	int varX=0 ;
            	int nomX =0 ;
            	int varY=0 ;
            	int nomY= 0  ;
            	int Xproche=0;
            	int Yproche=0;
                int comparaison ;
            	//foncion qui va scaner le tableau tablPosNouriture pour rendre la position de la nouriture la plus proche 
            	//enfin si jarrive a faire marcher les getters putin de merde
            	for(int u= 0; u<200; u++){
            		if(Xp-Math.abs(varX) > tablPosNouriture[1][u]){//varX prends la coordoné du X le plus proche de ceului qu'on lui a doner 
            			varX= tablPosNouriture[1][u] ;
            			nomX = u ;}
            		if(Yp-Math.abs(varY) > tablPosNouriture[1][u]){//varY prends la coordoné du Y le plus proche de ceului qu'on lui a doner 
            			varY= tablPosNouriture[1][u] ;
            			nomY = u ;}	
            		}
            	//a la fin de la boucle on regarde lequel des deux est le plus pret :
            	comparaison = varX-varY ;
            	//si varX est plus proche 
            	if (comparaison>0){
            		System.out.println("nouriture la plus proche");
            
            		//on renvoi les coordonées finalles de nomX
            		System.out.println(tablPosNouriture[1][nomX]);
            		System.out.println(tablPosNouriture[2][nomX]);
            		 Xproche = tablPosNouriture[1][nomX];
            		 Yproche = tablPosNouriture[2][nomX];
            	}
            	if (comparaison<=0){
            		System.out.println("nouriture la plus proche");
            
            		//on renvoi les coordonées finalles de nomX
            		System.out.println(tablPosNouriture[1][nomY]);
            		System.out.println(tablPosNouriture[2][nomY]);
            		 Xproche = tablPosNouriture[1][nomY];
            		 Yproche = tablPosNouriture[2][nomY];
            	}
            	
            return new int[] {Xproche, Yproche};
            // pour récup ca 
            //  int result[] = Scaner();
            //  System.out.println(Xproche[0] + Yproche[1]);
            		}
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            	
            }
            //metre un setters plus tard 
            	
            	
            	
            	

             classe ou je voudrais m'en servir :

            package personages;
            
            import java.awt.Image;
            
            import java.util.Objects;
            
            import javax.swing.ImageIcon;
            
            import objets.Objets;
            
            
            
            public class Poisson extends Objets implements Runnable{
            
            	private int PAUSE = 8 ;
            	private Image imgPoisson;
            	private ImageIcon icoPoisson;
            	
            	
            	public Poisson(int xi, int yi) {
            		super(xi, yi);
            	    
            		this.icoPoisson = new ImageIcon(getClass().getResource("/images/Poisson.png"));
            		this.imgPoisson = this.icoPoisson.getImage();
            		
            		
            	Thread chronoPoiss = new Thread(this);
            	chronoPoiss.start();
            	
            	
            	}
            
            	@Override
            	public void run() {
            		// TODO Auto-generated method stub
            		
            	
            		
            	}
            
            	public Image imgPoisson() {return imgPoisson;}
            	
            	
            	
            	
            	
            	
            	int varibletabl;
            		
            	
            	private void scan(){
            	int Nom ;
            	int X ;
            	int Y;
            
            		//foncion qui va scaner le tableau tablPosNouriture pour rendre la position de la nouriture la plus proche 
            	
            	 
            	int result[] = Scaner(2,3);
            	
            
            
            //////////////ici comme tu as fait mais j'ai l'ereur 
            
            	int S = getElement(2,5);
            	
            	
            	
            	
            	
            	
            	
            }}
            



            -
            Edité par UgoRoux 22 octobre 2016 à 17:57:23

            • Partager sur Facebook
            • Partager sur Twitter
              22 octobre 2016 à 17:57:40

              Re,

              tu peux pas appeler la méthode en dehors la classe directement, il faut l'appeler avec l'instance de l'objet, par exemple :

              Envir env = new Envir();
              env.initialiseTablPosNouriture(5, 5);
              env.setElementAt(1, 0, 45);
              int x = env.getTablPosNouriture[1, 0];



              • Partager sur Facebook
              • Partager sur Twitter
                22 octobre 2016 à 18:00:01

                Oui mais j'ai encore une erreur la (c'est pas la première fois celle la en plus )

                avec Envir env = new Envir();

                "Multiple markers at this line

                - Envir cannot be resolved 

                to a type

                - Envir cannot be resolved 

                to a type"

                (je suis vraiment vraiment désolé mais je persiste )

                -
                Edité par UgoRoux 22 octobre 2016 à 18:03:02

                • Partager sur Facebook
                • Partager sur Twitter
                  22 octobre 2016 à 18:18:45

                  salut,

                  apparemment tu as crée ces deux classes (Envir, Poisson) sur deux emplacements différents, assure que la classe Envir est accessible depuis l'emplacement où elle est déclarée la classe Poisson

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 octobre 2016 à 18:35:11

                    elles sont pas dans le même Package effectivement, comment faire pour les rendre accessible , j'ai juste a faire "import nomdepacktage " ou c'est différent ici ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 octobre 2016 à 18:46:41

                      tu travaille sur quel IDE ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 octobre 2016 à 18:54:55

                        si tu as crée les deux fichiers dans le même projet alors Eclipse va gérer ça, moi j'ai longtemps que j'ai pas travaillé avec Eclipse
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 octobre 2016 à 18:56:12

                          Oui c'est le cas , c'est quoi qui cloche alors a ton avis ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 octobre 2016 à 19:03:16

                            je ne me rappelle pas comment le faire avec Eclipse, avec la commande javac on fait javac f1.java f2.java ....., tu peux le trouver sur internet ;)

                            -
                            Edité par manoranx 22 octobre 2016 à 19:05:26

                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 octobre 2016 à 19:15:22

                              ok j'ai merci beaucoup j'ai regler le probleme

                              maintenant j'ai un nouveau probleme ligne du dessous 

                               env.initialiseTablPosNouriture(5, 5);"The method initialiseTablPosNouriture(int, int) is undefined for the type Envir" 

                              int x = env.getTablPosNouriture[1][0];

                              "getTablPosNouriture cannot be resolved or is not a field"

                              ce qui bloque tout ce que tu m'as montrer du coup 

                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 octobre 2016 à 19:23:22

                                dans le code que tu m'as envoyé tu n'as pas déclaré ces deux méthodes.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  22 octobre 2016 à 19:35:20

                                  oh mince le con ahah merci beaucoup beaucoup  beaucoup  pour ton aide ;)

                                  -
                                  Edité par UgoRoux 22 octobre 2016 à 19:41:04

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  [JAVA] getters et tableau

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown