Faire correspondre une variable d'une méthode à l'autre ?
Résolu
gamarts99
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
greg6614 Messages postés 592 Date d'inscription Statut Membre Dernière intervention -
greg6614 Messages postés 592 Date d'inscription Statut Membre Dernière intervention -
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 ;) !
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 ;) !
A voir également:
- Faire correspondre une variable d'une méthode à l'autre ?
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Variable d'environnement temp - Forum Word
- Vba excel sélectionner une plage de cellules variable ✓ - Forum Excel
- Dans son restaurant, igor utilise une application pour gérer les réservations. dans le schéma (structure) de la base de données de l’application représenté ci-dessous : de quoi « telephone » est-il le nom ? de quoi « reservations » est-il le nom ? associez chaque terme avec un attribut, une donnée, un enregistrement, une table, une valeur ou une variable. - Forum Webmastering
- Définir des variables par itération ✓ - Forum Python
2 réponses
Salut, deux solutions :
Premièrement en reprenant ton exemple :
On rajoute la variable dans l'entête de la méthode pour la passer en paramètre.
Ou bien second choix :
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
Exemple :
Tu as différents mots-clés pour la visibilité des tes attributs au seins d'une classe :
Un exmple qui devrait t'aider :
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
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
statictu ne peux pas utiliser le mot clés
this. Par contre si ta méthode n'est pas
staticpar 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
Autant pour moi je suis allé trop vite. Dans une méthode
Donc ici si tu met x en
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.
statictu ne peux manipuler que des variables
staticou 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
staticsa 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.
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();
} */
}
}
}
}
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);
}
}
}