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

avec Java Discussion :

problème de passage de paramètres : la chaine de caractère passée en paramètre ne s'affiche pas


Sujet :

avec Java

  1. #1
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut problème de passage de paramètres : la chaine de caractère passée en paramètre ne s'affiche pas
    Bonjour à tous, je développe un programme en java.
    J'utilise 2 fonctions. La fonction combat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public String combat(Fighter f1, Fighter f2)
    est appelée par la fonction combatRoom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public String combatRoom (){
    .

    La fonction combat est censée rendre une chaine de caractère à la fonction combatRoom. Je peux afficher sur le terminal, la chaine rendue par la fonction combat. En revanche, dans la fonction combatRoom qui appelle combat, la chaine de caractère rendue par combat est vide...

    Je ne comprends pas mon erreur....
    voici les codes des 2 fonctions :
    -fonction combat :
    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
        public String combat(Fighter f1, Fighter f2){
        	String txt=new String("");
        	Random rdm = new Random ();
        	int puissance=0;
        	//int score=0;
        	Float percent;
        	Attack at = new Attack();
     
     
        	while(f1.getHp()>0 && f2.getHp()>0)
        	{
        		at=f1.attack();
        		txt+=f1.getName() + "  attacks : \n";
        		txt+=at.getName() +" "+at.getDescription() +" "+at.getForce()  ;
        		puissance= (f1.getEp()/10) * random.Hazard.aleat_borne(at.getMin(),at.getMax(),rdm)* at.getForce() ;
     
        		percent=(float)puissance / ((f1.getEp()/10) *at.getMax()*at.getForce())  ;
        		percent*=100;
        		txt+="Force attack : " + puissance + " (efficency : " + percent+"%) \n";
     
            	//score=f1.attack();
            	f2.setHp(f2.getHp()-puissance);
            	f2.showPoints();
            	if (f2.isDie()) {
            		//System.out.println(f1.getName() + " wins");System.out.println("");
            		txt+=f1.getName() + " wins";
            	}
     
            	if (f2.getHp()>0){
            		txt+=f2.getName() + "  attacks : \n";
            		txt+=at.getName() +" "+at.getDescription() +" "+at.getForce()  ;
            		puissance= (f2.getEp()/10) * random.Hazard.aleat_borne(at.getMin(),at.getMax(),rdm)* at.getForce() ;
            		f1.setHp(f1.getHp()- puissance);
            		f1.showPoints(); 
                	if (f1.isDie()) {
                		//System.out.println(f2.getName() + " wins");System.out.println("");
                		txt+=f2.getName() + " wins";
                	}
            	}
        	}
    		//f1.showPoints();
    		//f2.showPoints();
        	System.out.println(txt);
    		return (txt);
        }

    combatRoom :
    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
        /**
         * Gere le combat general dans une piece
         *
         */
        public String combatRoom (){
            int i=0;// indice hero
            int j=0;//indice guard
            int k=0;//indice boss
            String chaine = new String ();
            /*
             * the following variables are token. The fighter list which has the token starts the fight
             */
            boolean token_h=true;boolean token_g=false; boolean token_b=false;
     
            int exp=0; //if you win, your exp point increase of 33 and 10% of your opponent
            Random rdm = new Random (); 
     
            //System.out.println("The fight starts.");
            chaine+="The fight starts.\n";
     
            while(!getHero_col().isEmpty()&&!getGuard_col().isEmpty() &&
            		i<=getHero_col().size()-1 && j <=getGuard_col().size()-1 ) { //combat avec les guards
     
            	//System.out.println("--------------------------");
            	//System.out.println("let's fight with the guard !");System.out.println(i+"  "+j+"  "+k+"   ");
            	//System.out.println("--------------------------");
     
            	chaine+="--------------------------\n";
            	chaine+="let's fight with the guard !\n";
            	chaine+="--------------------------\n";
     
     
            	if(token_h && !token_g && !token_b) //hero has the token
            		{//hero starts
            		chaine+=combat(getHero_col().get(i), getGuard_col().get(j));
            		System.out.println(combat(getHero_col().get(i), getGuard_col().get(j)));
            		} 
     
            	if(!(token_h) &&!(token_b) && token_g) //guard has the token 
            		{chaine+=combat(getGuard_col().get(j), getHero_col().get(i));} //guard starts
     
        	    if(getHero_col().get(i).getHp()<=0) { //the hero is die
        	    	i++;
        	    	token_h=true;
        	    	token_b=false;
        	    	token_g=false;
     
        	    }
        	    if(getGuard_col().get(j).getHp()<=0) { //the gaurd is die
        	    	exp=getGuard_col().get(j).getEp()/random.Hazard.aleat_borne(3,10,rdm);//calculate the exp
        	    	getHero_col().get(i).setEp( getHero_col().get(i).getEp()+exp );//set the hero exp points
        	    	//System.out.println(getHero_col().get(i).getName() +" experience points increase : + "+ exp );
        	    	chaine+=getHero_col().get(i).getName() +" experience points increase : + "+ exp +"\n";
        	    	j++;
        	    	token_g=true;
        	    	token_h=false; 
        	    	token_b=false; 
     
        	    	if(j==getGuard_col().size()){ //if the last guard has been killed, go to the boss
            	    	token_h=false;
            	    	token_b=true;
            	    	token_g=false;
        	    	}
     
        	    }
            }
     
     
            while(!getBoss_col().isEmpty() &&!getHero_col().isEmpty() 
            		&& i<=getHero_col().size()-1 && k <=getBoss_col().size()-1 ) {    //combat boss
            	//System.out.println("--------------------------");
            	//System.out.println("let's fight with the boss !");
            	//System.out.println("--------------------------");
     
            	chaine+="--------------------------\n";
            	chaine+="let's fight with the boss !\n";
            	chaine+="--------------------------\n";
     
     
            	if(token_h && !token_b && !token_g) //hero has the token
            		{chaine+=combat(getHero_col().get(i), getBoss_col().get(k));}
            	if(token_b) //boss has the token
            		{chaine+=combat(getBoss_col().get(k), getHero_col().get(i));}
     
        	    if(getHero_col().get(i).getHp()<=0) {//hero died
        	    	i++;
        	    	token_h=true;
        	    	token_b=false;
        	    	token_g=false;
     
        	    }
        	    if(getBoss_col().get(k).getHp()<=0) {//boss died
        	    	exp=getBoss_col().get(k).getEp()/random.Hazard.aleat_borne(3,10,rdm);	;//calculate the exp
        	    	getHero_col().get(i).setEp( getHero_col().get(i).getEp()+exp );//set the hero exp points
        	    	chaine+=getHero_col().get(i).getName() +" experience points increase : + "+ exp +"\n";
     
        	    	//System.out.println(getHero_col().get(i).getName() +" experience points increase : + "+ exp );
        	    	k++;
        	    	token_h=false;
        	    	token_b=true;
        	    	token_g=false;
        	    }
            }
            //System.out.println("The fight is over.");
            chaine+="The fight is over.";
            return(chaine);
        }
    merci d'avance.
    cordialement
    Benilto

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 54
    Points : 52
    Points
    52
    Par défaut
    Hello

    De manière générale, si tu veux comprendre exactement pourquoi ton programme ne renvoie pas des valeurs "normales", tu peux passer en mode debug (avec Eclipse ça se fait assez facilement).

    A vue de nez, on dirait que ta fonction "combat" ne rentre pas dans le while(), ce qui expliquerait pourquoi la valeur retournée est vide. Tu devrais pouvoir confirmer ça avec le System.out.println qui est juste avant la fin de ta fonction. Tu devrais peut être le modifier pour localiser plus facilement le problème, par exemple comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public String combat(Fighter f1, Fighter f2){
        	String txt = "";
    	// [...]
     
    	while(f1.getHp()>0 && f2.getHp()>0)
        	{
    		// [...]
    	}
     
    	System.out.println("combat() - END -> " + txt);
    	return txt;
    }
    De cette manière, si la valeur affichée est vide, c'est qu'effectivement ton code ne rentre pas dans la boucle et txt reste vide.

    Une petite astuce pour améliorer la lisibilité de ton code, surtout dans la fonction combatRoom(). Les valeurs token_h, token_g et token_b indiquent le joueur disposant du token.
    Tu dois pouvoir améliorer les if(token_h && !token_g && !token_b) avec une énumération et un switch :

    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
     
    // Les différents personnages
    enum FighterToken {
    	HERO, GUARD, BOSS
    }
     
    // [...]
     
    public String combatRoom (){
     
    	// [..]
     
    	FighterToken token = FighterToken.HERO; // Le héros commence
     
    	// [..]
     
    	switch(token) {
    		case HERO :
    			// Le héros a le token
    			break;
     
    		case GUARD :
    			// Le garde a le token
    			break;
     
    		case BOSS :
    			// Le boss a le token
    			break;
    	}
    }
    Note : les types énumérés peuvent également s'utiliser avec des if, si tu préfères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(token == FighterToken.HERO) {
    	// Le héros a le token
    }

  3. #3
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    merci pour ta réponse, le soucis est réglé.
    bien vu pour le TE et le switch
    @+
    benilto

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/06/2010, 16h10
  2. coder une calculatrice qui prend en paramètre une chaine de caractère
    Par AnozerOne dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/05/2010, 17h34
  3. [WD14] Taille maximum d'une chaine de caractère passée en paramètre
    Par kuranes dans le forum WinDev
    Réponses: 6
    Dernier message: 23/07/2009, 11h42
  4. Réponses: 4
    Dernier message: 28/05/2008, 18h43
  5. Problème dans des "IF" avec des chaines de caractères
    Par lanysteph dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2006, 11h37

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