IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Création répétée d'une instance


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut Création répétée d'une instance
    Bonjour,

    Je voudrais simplement avoir une confirmation à ce propos

    Dans le code de la classe Partie , le fait de créer et recréer une instance Partie1 de la classe Partie à chaque fois qu'un utilisateur emet le souhait de rejouer n'a aucune importance, puisqu'à chaque fois c'est une nouvelle instance de la classe Partie qui est créée.
    Donc peu importe qu'on l'appelle Partie1 ou autrement, puisqu'à chaque fois qu'on reentre dans le programme c'est un nouvel espace mémoire qui est crée
    lorqu'on execute l'instruction Partie Partie1= new Partie(nombre_jouers,nom_joueur_principal);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
     
    import java.io.*;
    import java.util.*;
    import javax.swing.*;
    public class Partie {
     
    	int nbreJoueur;// déclaration de la variable nbreJoueur de type int
    	Joueur [] tabJoueur;// déclaration d’un tableau de nom tabJoueur qui contient des éléments de type Joueur
    	Joueur croupier ;// déclaration de la variable croupier de type Joueur
    	JFrame JF1 ;
     
    	JOptionPane jop1;
    	String texte_final="";
    	Partie(int nbre, String nomJPrincipal){
    		this.nbreJoueur = nbre;
    		this.tabJoueur= new Joueur[nbre];
    		this.croupier = new Joueur("croupier");
     
    		this.tabJoueur[0] = new Joueur(nomJPrincipal);
    		for(int i=1; i<= tabJoueur.length-1;i++){
     
    			tabJoueur[i]= new Joueur("Joueur" + i);
    		}// fin de boucle for
     
     
    	}// fin de constructeur de la classe Partie
     
    public void tirageInitial(){
     
    	//texte_final="";
    	for(int i =0; i<= tabJoueur.length-1;i++){
     
    		tabJoueur[i].tirageUnJoueur();
     
    		this.texte_final = this.texte_final + tabJoueur[i].texte_final_joueur +"\n";
     
    		System.out.println( tabJoueur[i].texte_final_joueur);
     
     
    	}// fin de for
     
     
    	croupier.tirageUnJoueur();
     
    	texte_final= texte_final+this.croupier.texte_final_joueur+"\n";
    	System.out.println(texte_final);
     
    	JOptionPane.showMessageDialog(null," "+ this.texte_final,"affichage des joueurs et des scores", JOptionPane.CLOSED_OPTION);	
     
     
     
    }// fin de méthode tirageInitial
     
     
    public void jouer(){
    	this.tirageInitial();
    }
     
    public void affichergagnant(){
     
    	int i ; 
    	int max_tabJoueur_points_obtenus= this.tabJoueur[0].totalPoint;
    	int index_maximum_total_points_1=0;
     
    	//on est obligé d'initialiser à 1 la valeur de cetre variable pour qu'elle puisse passer à 
    	//2 dès qu'il y aura deux joueurs qui obtiendront le même nombre de points
    	int nbre_joueurs_execaux=1;
     
    	// boucle for qui parcourt le tableau tabJoueur de la partie en cours pour déterminer 
    	//le joueur qui a obtenu le plus de points
    	for(i=1;i<this.tabJoueur.length;i++ ){
     
    		if(this.tabJoueur[i].totalPoint> max_tabJoueur_points_obtenus)
    		{
    			max_tabJoueur_points_obtenus=this.tabJoueur[i].totalPoint;
    			//on retient l'index de l'élément pour lequel on a obtenu le nombre maximum de points
    			index_maximum_total_points_1=i;
    			//Si auparavant il y eu des execaux , le fait qu'il existe un nombre de points supérieur
    			//à celui des joueurs execaux annule le fait qu'il y ait des execaux
    			//et la variable nbre_joueurs_execaux est réinitialisée à sa valeur première
    			nbre_joueurs_execaux=1;
    			System.out.println(nbre_joueurs_execaux);
     
     
    	}// fin de if this.tabJoueur[i].totalPoint> max_tabJoueur_points_obtenus
     
    	// si on est dans le cas où le joueur courant a un  nombre de points
    		//==max_tabJoueur_points_obtenus 
     
    	// 
    	else if (this.tabJoueur[i].totalPoint== max_tabJoueur_points_obtenus)
    	{
    		nbre_joueurs_execaux++;
    		System.out.println(nbre_joueurs_execaux);
     
     
     
    	}// fin de else if 
     
     
     
     
    	}//fin de boucle for
     
     
     
     
     
     
     
     
     
     
    	//1er cas : s'il n'y a pas de joueurs execaux(nbre_execaux==1) et si le nombre de points maximum du tableau est > nombre de points du croupier
    	//le gagnant est donc le joeur qui se trouve à l'index index_maximum_total_points_1 du tableau
     
     
    	if (nbre_joueurs_execaux==1 && max_tabJoueur_points_obtenus>this.croupier.totalPoint)
     
    	{JOptionPane.showMessageDialog(null,"le gagnant de la partie est "+this.tabJoueur[index_maximum_total_points_1].nom + " avec "+ this.tabJoueur[index_maximum_total_points_1].totalPoint+ " points","résultat de la partie", JOptionPane.CLOSED_OPTION);
    	}// fin de  if if (nbre_joueurs_execaux==1 && max_tabJoueur_points_obtenus>this.croupier.totalPoint)
     
    	//2eme cas :quelque soit le nombre de joueurs execaux (nbre_execaux==1) dans le tableau
    	//et si le nombre de points maximum du tableau est < nombre de points du croupier
    	else if ( max_tabJoueur_points_obtenus<this.croupier.totalPoint)
     
    		{JOptionPane.showMessageDialog(null,"le gagnant de la partie est le croupier avec "+this.croupier.totalPoint+ " points "," résultat de la partie", JOptionPane.CLOSED_OPTION);
    		}// fin de  if if ( max_tabJoueur_points_obtenus<this.croupier.totalPoint)
     
     
    	else if (nbre_joueurs_execaux==1 && max_tabJoueur_points_obtenus==this.croupier.totalPoint)
    	{
    		JOptionPane.showMessageDialog(null,"il n' y a pas de gagnant car le croupier et le joueur "+this.tabJoueur[index_maximum_total_points_1].nom + "  sont à égalité", "résultat de la partie", JOptionPane.CLOSED_OPTION);	
    	}
     
    	// si le nombre de joueurs execaux est > 2( nbre_joueurs_execaux>2)et max_tabJoueur_points_obtenus est > au nombre total de points du croupier(this.croupier.totalPoint)
    	//alors la partie n'a pas de gagnant
    	else if (nbre_joueurs_execaux>=2 && max_tabJoueur_points_obtenus>this.croupier.totalPoint)
     
    		{
    			//System.out.println("il ya trop de joueurs execaux, cette partie n' a pas de gagnant");
    			JOptionPane.showMessageDialog(null,"il y a " +nbre_joueurs_execaux+"  joueurs execaux, cette partie n' a pas de gagnant","résultat de la partie", JOptionPane.CLOSED_OPTION);
    		}// fin de if (nbre_joueurs_execaux>2  && max_tabJoueur_points_obtenus>this.croupier.totalPoint)
     
     
    		// si le nombre d'execaux est >= 2 et que le contenu de la variable
    		//max_tabJoueur_points_obtenus est < nombre total de points du croupier
     
     
    //		 dans le cas où nbre_joueurs_execaux>=2 et max_tabJoueur_points_obtenus=this.croupier.totalPoint)
     
    		else if  (nbre_joueurs_execaux>=2 && max_tabJoueur_points_obtenus==this.croupier.totalPoint)
     
     
    				{//System.out.println("il y a " +nbre_joueurs_execaux+"  joueurs execaux et la partie n'a pas de gagnant");
    				JOptionPane.showMessageDialog(null,"il y a " +nbre_joueurs_execaux + "  joueurs execaux et la partie n'a pas de gagnant","résultat de la partie", JOptionPane.CLOSED_OPTION);
     
    				}//fin de if (nbre_joueurs_execaux>=2 && max_tabJoueur_points_obtenus==this.croupier.totalPoint)
     
     
     
     
    }// fin de afficher gagnant
     
    	public static void main(String[] args) {
     
    		int temp=4;
    	do{
     
    		try{
     
    		String inputValue1 = JOptionPane.showInputDialog("Veuillez saisir un nombre de joueurs" );
    		//int temp1=0;//=JOptionPane.showInputDialog(null, "Veuillez saisir un nombre de joueurs", "saisie",JOptionPane.CLOSED_OPTION );
    		/*if (temp1 ==JOptionPane.CANCEL_OPTION){
    			System.exit(0);
    		}*/
     
     
    		int nombre_joueurs=Integer.parseInt(inputValue1);
     
    		String inputValue2 = JOptionPane.showInputDialog("Veuillez saisir un nom de joueur principal" );
     
    		String nom_joueur_principal=inputValue2;
     
    		Partie Partie1 =  new Partie(nombre_joueurs, nom_joueur_principal);
     
    		Partie1.jouer();
     
    		Partie1.affichergagnant();
     
    		 temp = JOptionPane.showConfirmDialog(null, "Voulez vous faire une autre partie?", "Rejouer ou pas", JOptionPane.YES_NO_OPTION);
     
    		}// fin de try
    		catch(Exception ex)
    		{
    			System.out.println(ex);
    			System.out.println(ex.toString());
    			System.out.println(ex.getMessage());
    		}// fin de catch
     
    	}// fin de do
     
    	while (temp ==JOptionPane.YES_OPTION );
     
     
    	}// fin de main
     
    	}// fin de classe Partie.java
    Ma seconde question est la suivante

    Dans la méthode afficherjoueur ci-dessous, il existe la variable locale texte_cartes_tirees.
    Si je suis dans une autre classe que la classe partie, puis je avoir accès à cette variable en ecrivant afficherjoueur().texte_cartes_tirees?
    Après un essai je me suis rendue compte que non mais je ne comprends pas pourquoi puisque la méthode afficherjoueur()est publique .
    N'est il pas possible d'accéder à sa variable texte_cartes_tirees?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
     
    public  void afficherjoueur(){
     
    		String texte_cartes_tirees="";	
    		System.out.println(this.nom);
     
    		for(int i =0;i<=nbreTirage-1;i++)
    		{
     
    		//this.texte_cartes_tirees=this.texte_cartes_tirees +" "+ tabCarte[i].afficherCarte()+ "et"; 
    		texte_cartes_tirees=texte_cartes_tirees +" "+ tabCarte[i].afficherCarte(); 
    		//
    		}// fin de for 
     
    		System.out.println(totalPoint);
     
    		texte_final_joueur = texte_final_joueur + "le joueur "+this.nom+ " a obtenu  "+ this.totalPoint + " points  avec les cartes  "+ texte_cartes_tirees;
    		 //this.texte_final_joueur = this.texte_final_joueur + "le joueur "+this.nom+ " a obtenu  "+ this.totalPoint + " points  avec les cartes  "+ this.texte_cartes_tirees;
     
     
     
    		}// fin de méthode afficherJoueur
    Pour finir, pouvez vous m'indiquer la(es) signature(s) exacte(s) de la méthode showinputdialog car toutes les signatures des méthodes de type showxxxdialog ne fonctionnent pas pour cette méthode.

    Que signifie l'option closed_option utilisée en argument de cette méthode.

    Je vous remercie encore beaucoup de votre aide et vous souhaite une très bonne année 2009 pleine de tout et de bonnes lignes de code!!

    Cordialement.

    Nathalie

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Pour ce qui est de la façon dont tu créé les parties ma parait correcte.

    Ensuite pour ce qui est de ta variable locale tu ne peux pas y avoir accès. Il est impossible d'accéder au variable locale d'une méthode depuis l'extérieur (même si la méthode est publique). Tu confond peut être avec les attributs d'une classe qui sont accessible depuis l'extérieur si ils sont public.

    Pour ce qui est des showInputDialog je te renvoi à la javadoc. Il y a plusieurs signature en fonction de ce que tu veux préciser : le message,le titre, le format,... La constante JOptionPane.CLOSED_OPTION est la valeur qui est reourné si au lieu de cliquer sur un bouton l'utilisateur a fermé la fenêtre (par contre je ne vois pas de cas où tu ai besoin de le passer en paramètre).

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut accès aux variables locales d'une méthode publique
    Bonsoir et merci beaucoup de ta réponse.
    S'il n'est pas possible d'accéder à une variable locale d'une méthode publique même depuis l'extérieur j'aimerais que tu confirmes, si c'est le cas, qu'il est possible d'accéder, à une méthode d'une méthode publique même depuis l'extérieur à la classe de cette méthode.

    Merci de ton aide.

    Cordialement.
    Nathalie

  4. #4
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    il est possible d'accéder, à une méthode d'une méthode publique
    Je suppose que tu veux dire à une méthode d'une classe publique. Tu peux en effet accéder depuis l'extérieur à une méthode d'une classe publique SI cette méthode est publique.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut accès à une méthode incluse dans une méthode publique
    Bonjour et merci de ta réponse.
    En fait ce n'est pas ce que je voulais dire.
    Si on suppose que dans une méthode publique d'une classe il existe une autre méthode, peut on accéder de l'extérieur ( depuis une autre classe)à cette méthode "incluse" dans la méthode publique.

    Merci encore de votre réponse.
    cordialement.
    Nathalie

  6. #6
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Je suis désolé je ne vois pas ce que tu veux dire par méthode include dans une autre méthode. Ce n'est pas possible (ou alors donne moi un exemple).

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/02/2007, 11h31
  2. [Débutant] création d'une instance de base
    Par petitpasdelune dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/12/2006, 08h38
  3. création d'une instance chypriote
    Par mryovo dans le forum Oracle
    Réponses: 9
    Dernier message: 29/04/2006, 09h13
  4. Création d'une instance
    Par kiki_dam27 dans le forum Oracle
    Réponses: 1
    Dernier message: 31/03/2006, 12h41
  5. Création d'une instance
    Par coco-sup dans le forum Oracle
    Réponses: 10
    Dernier message: 31/12/2005, 19h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo