Problème variable int ( duplication )

Zeptron -  
Zeptron Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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