Faire correspondre une variable d'une méthode à l'autre ?

Résolu
gamarts99 Messages postés 3 Statut Membre -  
greg6614 Messages postés 629 Statut Membre -
Bonjour,

je suis entrain de faire une battle ship intelligent mais mon problème est que je ne sais pas comment faire pour faire correspondre une variable d'une méthode à l'autre ?

EXEMPLE:

public static void main(String[] args) throws IOException {
int x = 45;
testx(args);
}

static void testx(String[] args){
System.out.println(x);
}

Voila mon problème, je n'arrive pas a afficher "x".
Je précise que cela est un exemple !

merci de vos réponse a mon message de détresse ;) !

2 réponses

  1. greg6614 Messages postés 629 Statut Membre 107
     
    Salut, deux solutions :

    Premièrement en reprenant ton exemple :

     
    public static void main(String[] args) throws IOException {
         int x = 45;
         testx(args, x);
    }
    
    static void testx(String[] args, int x){
         System.out.println(x);
    }


    On rajoute la variable dans l'entête de la méthode pour la passer en paramètre.

    Ou bien second choix :

     
    private int x;
    
    public static void main(String[] args) throws IOException {
         x = 45;
         testx(args, x);
    }
    
    static void testx(String[] args){
         System.out.println(x);
    }


    Ici x sera visible dans toute ta classe mais uniquement dans cette classe. C'est l'encapsulation. Je rappel quand même que dans une methode
    static
    tu ne peux pas utiliser le mot clés
    this
    . Par contre si ta méthode n'est pas
    static
    par convention l'appel aux attributs se font précédés par
    this
    .

    Exemple :

    public class Animal{
    
         private int pattes;
    
         public Animal(int nbrPattes){
              this.pattes = nbrPattes;
         }
    
         public int getNbrPattes(){
              return this.pattes;
         }
    }


    Tu as différents mots-clés pour la visibilité des tes attributs au seins d'une classe :
    private
    public
    static
    protected


    Un exmple qui devrait t'aider :

    public class Mere {
     private int a;
     protected int b;
     public int c;
     static int d;
    }
    
    public class Fille extends Mere {
    
     public void afficher() {
      System.out.println(a); /*ne marche pas car  une variable private n'est pas visible depuis une classe fille*/
      System.out.println(b); /*marche car une variable protected est visible depuis une classe fille*/
      System.out.println(c): /*fonctionne tout le temps car c est public*/
      System.out.println(Mere.d): /*fonctionne tout le temps car d est static, cependant il faut l'appeler via la classe*/
     }
    
    }
    
    public class Externe { //On suppose que la classe Externe est dans un autre package que Mere et Fille
     
    public void afficher() {
      Mere m = new Mere();
      System.out.println(m.a); // ne marche pas
      System.out.println(m.b); // ne marche pas
      System.out.println(m.c): //fonctionne tout le temps car c est public
      System.out.println(Mere.d): /*fonctionne tout le temps car d est static, cependant il faut l'appeler via la classe*/
     }
    
    }


    Enfin si tu ne précise pas de visibilité, ton attribut est "package friendly" c'est à dire qu'il sera visible dans toutes les classes de ton package.

    Un attribut static ne nécessité pas l''instanciation de sa classe pour être visible et est défini dans un contexte statique et non objet, c'est à dire que cette variable n'existe qu'en un seul exemplaire.

    Rq : La visibilité s'applique aussi au méthodes.
    En espérant t'avoir aider 
    Greg
    0
  2. gamarts99 Messages postés 3 Statut Membre
     
    salut,

    merci pour ta réponse rapide et pour ton conseille qui ma beaucoup aidé, en revanche chez moi ta 2eme solution ne marche pas il me crache une erreur ! voici ce que NetBeens me dit :



    si tu peut m'aider car ta 2eme solution m’intéresse aussi pour mon projet.
    0
    1. greg6614 Messages postés 629 Statut Membre 107
       
      Autant pour moi je suis allé trop vite. Dans une méthode
      static
      tu ne peux manipuler que des variables
      static
      ou local (donc déclarées dans ta méthode). Le soucis avec ces variables c'est qu'elles n'existent qu'une seul fois pour ta classe et non une fois par objet.

      Donc ici si tu met x en
      static
      sa valeur sera unique et donc chaque modification de celle-ci sera valable pour toutes tes autres instances. D'où l’intérêt de créer des classes annexes.

      Surtout qu'il ne faut généralement jamais écrire trop de code dans un main car JAVA t'exécute ta méthode main comme point d'entré dans ton programmes puis "jette" le main et ne s'en sert plus jusqu’à la fin de l'exécution.
      0
    2. gamarts99 Messages postés 3 Statut Membre > greg6614 Messages postés 629 Statut Membre
       
      merci infiniment pour ton aide, je pourrais enfin finir mon projet ;-) !
      0
    3. greg6614 Messages postés 629 Statut Membre 107
       
      Avec plaisir, n'oublie pas de mettre ton sujet en résolu :)
      0
    4. poisson86 Messages postés 133 Statut Membre 2
       
      Rebonjour je voulais savoir ce que vous pensiez de ce code qui correspond au menu de mon jeu, et mon problème avec le code que je vous ai déjà donner c'était de faire un sous menu et donc de replacer mon panneau, j'ai compris grâce à votre exemple sauf que lorsque que j'essaye de faire cela avec du graphisme tout ne marche pas et je tourne en rond :/




      import java.awt.Color;
      import java.awt.Font;
      import java.awt.Graphics;
      import java.awt.Toolkit;
      import java.awt.event.*;
      import javax.swing.JButton;
      import javax.swing.JFrame;
      import javax.swing.JPanel;

      public class Main {

      public static void main(String[] args) {

      Fenetre Fen = new Fenetre();
      }

      }

      public class Fenetre extends JFrame implements ActionListener{
      JButton b_jouer = new JButton("Jouer");
      JButton b_options = new JButton("Options");
      JButton b_boutique = new JButton("Boutique");
      JButton b_succes = new JButton("Succès");
      Pan_Menu pan_menu = new Pan_Menu();

      public Fenetre(){

      /////super("Kash: CW"); ->>>> je ne comprends pas à quoi sert Super() ici ça nomme la fenetre

      this.setSize(1000, 600);
      this.setLocationRelativeTo(null);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setResizable(false);

      this.setContentPane(pan_menu);
      pan_menu.setLayout(null);

      //Bouton Jouer
      b_jouer.addActionListener(new Fen_Jouer());
      pan_menu.add(b_jouer);
      b_jouer.setBounds(350, 250, 300, 100);

      //Bouton Options
      b_options.addActionListener(new Options());
      pan_menu.add(b_options);
      b_options.setBounds(850, 430, 100, 100);

      //Bouton Boutique
      b_boutique.addActionListener(new Fen_Boutique());
      pan_menu.add(b_boutique);
      b_boutique.setBounds(400, 430, 200, 100);

      //Bouton Succès
      b_succes.addActionListener(new Fen_Succes());
      pan_menu.add(b_succes);
      b_succes.setBounds(50, 430, 100, 100);

      this.setVisible(true);

      }


      public class Pan_Menu extends JPanel {
      JButton bouton = new JButton("Mon bouton");

      public void paintComponent(Graphics g){

      Font font = new Font("Courier", Font.BOLD, 40);
      g.setFont(font);
      g.setColor(Color.RED);
      g.drawString("Kash : Celestial Wonder", 225,130);

      /* try { Image img = ImageIO.read(new File("menu.png"));
      g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
      //Pour une image de fond
      //g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
      } catch (IOException e) {
      e.printStackTrace();
      } */
      }
      }
      }

      }
      0
    5. poisson86 Messages postés 133 Statut Membre 2
       
      Voici le code qui essaie de faire ce sous menu ^^

      import java.awt.event.*;
      import java.io.IOException;
      import javax.imageio.ImageIO;
      import javax.swing.*;


      import java.awt.*;


      public class Options implements ActionListener {
      Pan_Options pan_menu = new Pan_Options();


      public void actionPerformed(ActionEvent e){
      JPanel pan_options = new JPanel();

      pan_options.setContentPane(pan_options);

      }


      public class Pan_Options extends JPanel {
      JButton bouton = new JButton("Mon bouton");

      public void paintComponent(Graphics g){

      Font font = new Font("Courier", Font.BOLD, 40);
      g.setFont(font);
      g.setColor(Color.BLUE);
      g.drawString("test fenetre option", 225,130);
      }
      }
      }
      0