Petite énigme Java

Fermé
Luciole25 - 11 déc. 2008 à 15:09
 Luciole25 - 13 déc. 2008 à 14:59
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 jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
12 déc. 2008 à 14:58
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 jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
11 déc. 2008 à 15:26
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
11 déc. 2008 à 15:30
Alors déja d'où sort le code2 situé dans la méthode donne_code??
0
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 jeudi 6 novembre 2008 Statut Membre Dernière intervention 4 décembre 2011 27
12 déc. 2008 à 09:15
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
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
12 déc. 2008 à 15:19
Soit :

if (codeFourni.equals(getCodeSecret()))

return true;

else

return false;

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