Communication entre classes

Résolu/Fermé
Zinconnu Messages postés 11 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 11 février 2014 - 9 févr. 2014 à 12:09
Zinconnu Messages postés 11 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 11 février 2014 - 9 févr. 2014 à 13:52
Bonjour,
Je me suis mis à la programmation JAVA (et la programmation en général) il y a trois jours, et j'ai commencé un début de petit jeu. J'ai rencontré un problème: en effet je n'arrive pas à faire partager une variable "T" entre deux classes :

public class classe1
		{
			public static int T;
		 
			public static void main(String[]args) throws InterruptedException
		    {
		        int O = 1;
		        int K = 0;	
				{
				while(T > 0)
					   {K=K+(1*O);
					   System.out.print(K);
					   System.out.println("pièces d'or"); 
					   Thread.sleep(4578);}			
		    
		
				}}}


import java.util.Scanner;


public class classe2
{
	public static int T=1;

	public static void main(String[]args) 
    {	 
		
		Scanner keyb=new Scanner(System.in);
		System.out.println("Pour mettre le jeu en pause, tapez P");
		int X = 12550;
		while(X > 1)
		{String W = keyb.nextLine();
		if(W.equals("P"))
		{ if(T == -1)
		{ T = 1;}
		else
		{ T = -1;}}
		}
		
    }}

Merci pour votre aide

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 févr. 2014 à 12:49
Pour utiliser une variable static il faut la préfixer du nom de sa classe, dans ton cas c'est donc
classe1.T
et
classe2.T
.

Attention cependant à ce que tu fais, là tu as deux main, ce qui signifie normalement deux programmes. Or tu ne pourras pas communiquer les variables entre deux programmes différents, en tout cas pas comme ça.

PS. il y a des règles d'écriture à respecter, autant prendre de bonnes habitudes maintenant : les noms de classe commencent par une majuscule, les noms de variables par une minuscule, tu as fait tout l'inverse...
1
Zinconnu Messages postés 11 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 11 février 2014
Modifié par Zinconnu le 9/02/2014 à 12:55
En fait je ne voulais qu'un seul programme... je dois retirer la méthode avec main ?
0
Zinconnu Messages postés 11 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 11 février 2014
9 févr. 2014 à 13:02
Et puis ça me met "Type name must not be qualified" quand je mes T à la fin...
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 févr. 2014 à 13:14
"je ne voulais qu'un seul programme... je dois retirer la méthode avec main ?"
Il faudrait renommer l'une des deux méthodes pour n'avoir de méthode main que dans ta classe principale, celle qui servira à démarrer le programme.

Remarque : du coup est-ce vraiment nécessaire d'avoir deux classes ?

"Type name must not be qualified" quand je mes T à la fin...
Tu mets T à la fin de quoi ?

Il faudrait voir à quoi ressemble ton code maintenant, mais il suffisait juste de remplacer T par classe1.T ou classe2.T selon ce que tu voulais faire.
0
Zinconnu Messages postés 11 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 11 février 2014
9 févr. 2014 à 13:26
Remarque : du coup est-ce vraiment nécessaire d'avoir deux classes ?
J'ai pas réussi à lancer les deux actions en simultané dans une et même classe, alors j'ai dédoublé les deux...
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 févr. 2014 à 13:49
Avoir deux classes ne change rien à la simultanéité des actions, ce qu'il te faut c'est des Thread.

public class Game extends Thread
{
    @Override
    public void run()
    {
        for (int nb = 0, inc = 1; !isInterrupted(); nb += inc)
        {
            System.out.println(nb + " pièces d'or");
            
            try
            {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
                interrupt();
            }
        }
    }
}

import java.util.Scanner;

public class Start
{
    public static void main(String[] args)
    {
        @SuppressWarnings("resource")
        Scanner keyb = new Scanner(System.in);
        
        String stop = "P";
        
        System.out.println("Pour mettre le jeu en pause, tapez "+stop);
        
        Thread game = new Game();
        game.start();
        
        while (!game.isInterrupted())
        {
            String line = keyb.nextLine();
            
            if (line.equals(stop))
                game.interrupt();
        }
    }
}
0