Problème variable int ( duplication )

Fermé
Zeptron - Modifié par KX le 20/11/2014 à 22:33
Zeptron Messages postés 4 Date d'inscription vendredi 21 novembre 2014 Statut Membre Dernière intervention 22 novembre 2014 - 22 nov. 2014 à 12:55
Bonsoir. Alors voilà là où ça coince :

int vir = 30;
   int qmr = 101;
   int h = d.nextInt(qmr-vir) + vir;
  int zcm = crf + h;
   
   
   
    System.out.println("Tour du sbire");
    System.out.println();
   if (sza == r)
   {
    System.out.println("COUP CRITIQUE");
    System.out.println("Vous vous prenez deux fois les dégâts que vous deviez vous prendre");
    System.out.println("Le sbire attaque et vous enlève de la vie : " + ez);
    System.out.println();
    System.out.println("Votre vie passe à : " + spm);
    int crf = spm;
    
   }
   else if (sza < r)
   {
    System.out.println("Le sbire attaque et vous enlève de la vie : " + p);
    System.out.println();
    System.out.println("Votre vie passe à : " + xsz);
    int crf = xsz;
   }
   System.out.println();
   System.out.println("Votre tour");
   System.out.println("Attaque, soin ou fuite");
   System.out.println("Appuyez sur 1 pour attaque, 2 pour soin ou 3 pour fuite");
   System.out.println();
   int v = sl.nextInt();
   switch (v)
   {
   case 1:
    System.out.println("Vous avez choisi : attaque");
    System.out.println("Le sbire se reçoit des dégâts de : " + b);
    System.out.println("Le sbire a maintenant une vie de : " + erf);
   break;
   case 2:
    System.out.println("Vous avez choisi : soin");
    System.out.println("Votre soin vous récupère une vie de : " + h);
    System.out.println("Votre vie passe maintenant à : " + zcm);
    
   break;
   case 3:
    System.out.println("Vous ne pouvez pas fuir");
    System.out.println("Merci pour le tour gratuit à l'adversaire :)");
   break;

Le problème vient de la variable crf ( c'est un int ), il m'annonce que j'ai fait une duplication de la variable. Je comprend tout à fait cela, mais du coup je ne peux pas faire ce que je veux ( je veux pouvoir avoir une variable qui varie selon si le programme est passé par le if ou selon si le programme est passé par le else if ).

Si vous pourriez m'aider, ce serait sympa ( j'espère avoir été clair à propos de mon problème )

Merci d'avance.

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
20 nov. 2014 à 22:35
Bonjour,

Très simple : tu déclares crf avant le premier if. De toute façon tu en as besoin ligne 4 dans zcm = crf + h;
0
Zeptron Messages postés 4 Date d'inscription vendredi 21 novembre 2014 Statut Membre Dernière intervention 22 novembre 2014
21 nov. 2014 à 23:12
Justement, en faisant cette manip, ils me mettent : "Duplicate local variable crf ", du coup je ne peux pas lancer le programme et je ne sais pas comment faire pour résoudre ce problème :(
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
21 nov. 2014 à 23:31
Il faudrait voir ton code complet, avec quelques explications de ce que tu cherches à faire, mais dans tout les cas tu ne peux pas déclarer plusieurs fois le même nom de variable dans le même scope...
0
Zeptron Messages postés 4 Date d'inscription vendredi 21 novembre 2014 Statut Membre Dernière intervention 22 novembre 2014
21 nov. 2014 à 23:39
Ce que je voudrais faire, c'est mettre le soin à la personne et calculer le nombre de points de vie qu'il a à la fin du tour. Cependant sa vie peut varier selon s'il a pris un coup critique ou pas. Et c'est cette partie que je n'arrive pas à résoudre.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
21 nov. 2014 à 23:47
"mettre le soin à la personne et calculer le nombre de points de vie qu'il a à la fin du tour"
Pour l'instant moi j'ai des vir, qmr, zcm, crf... ça ne me parle pas du tout !
Un conseil, donnes des noms très explicites à tes variables, en Java tu n'as (quasiment) pas de limitation en taille, alors il faut en profiter.

Si je prends ne serait-ce que les 4 premières lignes (mais je doute que ce soit vraiment les premières), que vaut crf ligne 4 ? Où est-il déclaré ? S'il est déjà déclaré, pourquoi le déclarer à nouveau plus loin dans ton code ?

int vir = 30;
int qmr = 101;
int h = d.nextInt(qmr-vir) + vir;
int zcm = crf + h;
0
Zeptron Messages postés 4 Date d'inscription vendredi 21 novembre 2014 Statut Membre Dernière intervention 22 novembre 2014
Modifié par KX le 22/11/2014 à 12:05
J'ai remis à jour mon programme :

int attaquesbiremin = 30;
int attaquesbiremax = 65;
int attaquesbire = d.nextInt(attaquesbiremax - attaquesbiremin) + attaquesbiremin;

int g = 2;
int dmgcoupcritique = g * attaquesbire;
int coupcritique = 1;
int lowc = 1;
int highc = 11;
int proba = d.nextInt(highc - lowc) + lowc;

int attaquemin = 1;
int attaquemax = 4;
int tonattaque = d.nextInt(attaquemax - attaquemin) + attaquemin;

int viesanscc = t - attaquesbire;
int vieaveccc = t - dmgcoupcritique;
// t est la variable qui indique ta vie au début du combat
// viedebut est la variable qui indique la vie du sbire au début

int viesbire = viedebut - tonattaque;

int soinmin = 30;
int soinmax = 101;
int soin = d.nextInt(soinmax - soinmin) + soinmin;
int crf;
int vieaprèssoin = crf + soin;

System.out.println("Tour du sbire");
System.out.println();

if (coupcritique == proba)
{
    System.out.println("COUP CRITIQUE");
    System.out.println("Vous vous prenez deux fois les dégâts que vous deviez vous prendre");
    System.out.println("Le sbire attaque et vous enlève de la vie : " + dmgcoupcritique);
    System.out.println();
    System.out.println("Votre vie passe à : " + vieaveccc);
    int crf = vieaveccc;
}
else if (coupcritique < proba)
{
    System.out.println("Le sbire attaque et vous enlève de la vie : " + attaquesbire);
    System.out.println();
    System.out.println("Votre vie passe à : " + viesanscc);
    int crf = viesanscc;
}

System.out.println();
System.out.println("Votre tour");
System.out.println("Attaque, soin ou fuite");
System.out.println("Appuyez sur 1 pour attaque, 2 pour soin ou 3 pour fuite");
System.out.println();

int choixtontour = sl.nextInt();

switch (choixtontour)
{
    case 1 :
        System.out.println("Vous avez choisi : attaque");
        System.out.println("Le sbire se reçoit des dégâts de : " + tonattaque);
        System.out.println("Le sbire a maintenant une vie de : " + viesbire);
        break;
    case 2 :
        System.out.println("Vous avez choisi : soin");
        System.out.println("Votre soin vous récupère une vie de : " + soin);
        System.out.println("Votre vie passe maintenant à : " + vieaprèssoin);
        
        break;
    case 3 :
        System.out.println("Vous ne pouvez pas fuir");
        System.out.println("Merci pour le tour gratuit à l'adversaire :)");
        break;
}

Ce que je veux c'est faire varier crf selon si le personnage que je joue s'est pris un coup critique ou pas ( crf aurait soit la valeur de la vie du personnage qui s'est pris des dmg normaux, ou soit la vie du personnage qui s'est pris un coup critique )
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
22 nov. 2014 à 12:08
Dans la mesure où tu as déjà
int crf
ligne 26, tu ne dois pas déclarer à nouveau
int crf
lignes 39 et 46, il faut juste que tu mettes
crf = vieaveccc
ou
crf = viesanscc;
.
Attention : tu ne peux pas faire
vieaprèssoin = crf + soin
ligne 27 alors que crf n'a pas encore de valeur.
0