Communication entre classes

Résolu
Zinconnu Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
Zinconnu Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
Et puis ça me met "Type name must not be qualified" quand je mes T à la fin...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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