Petite énigme Java

Luciole25 -  
 Luciole25 -
Bonjour tous le monde , débutant en Java je programme un Portemonnaie électronique , j'ai terminé ma classe, lors de la compilation tous ce passe bien mais lorsque je creer une nouvelle instance de l'objet ,et que j'affiche le code secret j'obtiens "null", je suppose que le problème provient du constructeur ou des accesseurs , ce serait gentil de me prévenir si vous trouvez l'erreurs car je m'arrache les cheveux dessus depuis un bon petit bout de temps,
merci d'avance.



Ma classe:

public class Purse {



//ATTRIBUTS

private int NB_NUM = 4;

private int NB_TRANS = 100;
private int NB_ESSAIS = 3;
private int revele = 1;

private String code_secret;

private boolean transaction_en_cours = false;

private float somme = 50;



//CONSTRUCTEUR

public Purse (String code_secret){
this.code_secret=code_secret;

setCodeSecret(" ");

setTransactionEnCours(false);
donne_code(0);
reveler_code();
}


//ACCESSEURS



public String getCodeSecret (String code_secret){

return this.code_secret=code_secret;

}

private String setCodeSecret (String code){

return code_secret = code;

}

public boolean isTransactionEnCours ( ){

return this.transaction_en_cours;

}
public boolean setTransactionEnCours ( boolean valeur ){

return this.transaction_en_cours = valeur;

}

public float setSomme( float s ){

return somme = s;

}

public float getSomme ( ){

while (somme <= 100);

return this.somme;

}
public int getNB_ESSAIS(int NB_ESSAIS){
return this.NB_ESSAIS=NB_ESSAIS;
}


//METHODES DE LA CLASSE


public String donne_code(int code_num){
for (int i = 0; i < NB_NUM; i++ )
code_num=(Hasard.entier(10));
code_secret=" "+code_num;

return setCodeSecret(code2);

}



public float debiter ( float debit ){

NB_TRANS = NB_TRANS-1;

if(NB_TRANS> 0 && 0<somme && somme<100)

return somme = somme - debit ;
else
return somme;

}



public float crediter ( float credit ){

NB_TRANS = NB_TRANS-1;

if(NB_TRANS> 0 && somme<100 )

return somme = somme + credit ;
else
return somme;

}



public boolean verifierCode (String codeFourni){



if (codeFourni==code_secret)

return true;

else

return false;

}

public String reveler_code (){

if (revele>0){

revele=0;

return "Votre code confidentiel est le suivant : "+getCodeSecret(code_secret)+" ";}

else

return "XXXX";

}
}
A voir également:

8 réponses

mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
c'est parce qu'on ne compare pas des String avec == ça ça va comparer les reference seulement
il faudrait que tu code la methode equals pour comparer les String
1
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
en effet ton getCodeSecret ne doit prendre aucun parametre il doit juste retourner le code_secret
public String getCodeSecret (){ 

return this.code_secret; 

}
0
Hector Valdes
 
Alors déja d'où sort le code2 situé dans la méthode donne_code??
0
Luciole25
 
Oups j'avais ajouté un attribut pour tester la méthode et j'ai oublier de le supprimer ^^

Sinon pour le getCode_secret j'avais déjà essayer et toujours le même résultat la méthode renvoie toujours 'null' dans mon programme principal
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phortitou Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   27
 
return setCodeSecret(code2); d'ou il sort ton code2? Tu crées un code juste avant, mais tu passe en paramètre un truc qui n'existe pas... Peut etre que c'est là que ton code secret devient null

return this.code_secret=code_secret; <- ça c'est faux!

On peut avoir le main aussi?

for (int i = 0; i < NB_NUM; i++ )
code_num=(Hasard.entier(10));
code_secret=" "+code_num;

Tu devrais pas mettre des crochets pour ta boucle?
0
Luciole25
 
Alors merci pour vos petis conseils j'ai réussi à corriger 2-3 erreus , j'arrive à avoir le code désormais mais cette fois si le problème viens de mon main, Lorsque je rentre le code fourni le programme ne rentre pas dans la condition et me dis "Au revoir". -_-

Voici mon main:
//VARIABLES

public static int compteur;
public static String code_secret;

public static void main (String[]args){

//INSTANCIATION
Purse Portm = new Purse();
System.out.println(Portm.reveler_code());

//TRANSACTION

while ( Portm.isTransactionEnCours()==true )
System.out.println ("Une autre transaction est déjà en cours avec votre carte veuillez patientez");

String codeFourni = Lire.jString("Veuillez entrer les 4 chiffres de votre code confidentiel (Q pour annuler): ");
System.out.println(Portm.getCodeSecret());
if(Portm.verifierCode(codeFourni)==true){
compteur=0;
Portm.setTransactionEnCours(true);
int demande = Lire.jint ("Tapez 1 pour créditer votre compte ou 2 pour le débiter");
if (demande==1) {
float credit= Lire.jfloat("Saisissez le montant que vous voulez créditer");
Portm.crediter(credit);
}
else if (demande==2){
float debit= Lire.jfloat("Saisissez le montant que vous voulez débiter");
if ( debit > Portm.getSomme() )

System.out.println ("Vous ne pouvez pas dépasser votre montant actuel de '" +Portm.getSomme()+ "'");
Portm.debiter(debit);
}
else
compteur=0;
while (Portm.verifierCode(codeFourni)==false){
if ( compteur > Portm.getNB_ESSAIS())
System.out.println("Nombre d'essai dépassé ! Votre carte va être avalée...");

else if (codeFourni=="Q")
System.out.println("Transaction annulée, votre carte devrait vous être restituée...");
else
System.out.println("Code éronné");
compteur=compteur+1;
}
}



Portm.setTransactionEnCours(false);

System.out.println ("Au revoir...");
}
}

Et ma class Purse corrigé:

public class Purse {



//ATTRIBUTS

private int NB_NUM = 3;

private int NB_TRANS = 100;
private int NB_ESSAIS = 3;
private int revele = 2;

private String code_secret ="";

private boolean transaction_en_cours = false;

private float somme = 50;





//CONSTRUCTEUR

public Purse (){

setTransactionEnCours(false);
donne_code();
getCodeSecret ();
}




//ACCESSEURS



public String getCodeSecret (){
return this.code_secret;

}

private String setCodeSecret (String code){

return code_secret = code;

}

public boolean isTransactionEnCours ( ){

return this.transaction_en_cours;

}
public boolean setTransactionEnCours ( boolean valeur ){

return this.transaction_en_cours = valeur;

}

private float setSomme( float s ){

return somme = s;

}

public float getSomme ( ){

while (somme <= 100);

return this.somme;

}
public int getNB_ESSAIS (){
return this.NB_ESSAIS;
}



//METHODES DE LA CLASSE


public String donne_code(){
for (int i = 0; i <= NB_NUM; i++ )
code_secret=code_secret+(Hasard.entier(10));

return setCodeSecret(code_secret);

}



public float debiter ( float debit ){

NB_TRANS = NB_TRANS-1;

if(NB_TRANS> 0 && 0<somme && somme<100)

return somme = somme - debit ;
else
return somme;

}



public float crediter ( float credit ){

NB_TRANS = NB_TRANS-1;

if(NB_TRANS> 0 && somme<100 )

return somme = somme + credit ;
else
return somme;

}



public boolean verifierCode (String codeFourni){



if (codeFourni==getCodeSecret())

return true;

else

return false;

}

public String reveler_code (){

if (revele>=0){

revele=-1;

return "Votre code confidentiel est le suivant : "+getCodeSecret()+" ";
}

else

return "XXXX";

}
}
0
hector valdes
 
Soit :

if (codeFourni.equals(getCodeSecret()))

return true;

else

return false;

}
0
Luciole25
 
Merci c'était bien sa le problème! Sa marche! Bravo!
0