Aide avec mon programme

Fermé
new_potato Messages postés 3 Date d'inscription lundi 2 janvier 2017 Statut Membre Dernière intervention 26 février 2017 - Modifié par new_potato le 26/02/2017 à 01:28
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 26 févr. 2017 à 11:16
Bonjour a tous, présentement je rencontre un problème avec mon programme testCraps. Le but est de faire en sorte que les dés continue de relancer tant et aussi longtemps que leur somme ne soit ni 4, 5, 6, 8, 9 ou 10. Or quand je le compile, cela ne se compile pas comme prévu: soit ça s'arrête, soit ça n'affiche pas du tout et je n'arrive pas à cerner le problème. Si quelqu'un peut m'aider, ce serait fantastique. toutes les classes, ainsi que le main se trouve en-dessous ainsi que les résultats de la compilation. N'hésitez pas à me poser des questions.

public class De {
 private int NBFACE=6;
 private int face;
 
 Random generateur= new Random();
 
 public De() {
  lancer();
 }

 public int getFace() {
  return face;
 }
 
 public int lancer(){
  face= generateur.nextInt(NBFACE)+1;
  return face;
 }
}


public class JeuCraps {
 private De de1;
 private De de2;
 
 private int valeur;
 private static int nbEssai;
 
 public JeuCraps() {
  this.de1=new De();
  this.de2=new De();
 }
 
 public De getDe1() {
  return de1;
 }
 
 public void setDe1(De de1) {
  this.de1 = de1;
 }
 
 public De getDe2() {
  return de2;
 }
 
 public void setDe2(De de2) {
  this.de2 = de2;
 }

 public int getValeur() {
  return valeur;
 }


 public void setValeur(int valeur) {
  this.valeur = valeur;
 }
 
 public boolean relancer(){
  nbEssai++;
  boolean msg = false;

  lancerLesDes();
  
  if((de1.getFace()+de2.getFace())==4){
    msg=true;
  }else if((de1.getFace()+de2.getFace())==5){
    msg=true;
  }else if((de1.getFace()+de2.getFace())==6){
    msg=true;
  }else if((de1.getFace()+de2.getFace())==8){
    msg=true;
  }else if((de1.getFace()+de2.getFace())==9){
    msg=true;
  }else if((de1.getFace()+de2.getFace())==10){
    msg=true;
  }if((de1.getFace()+de2.getFace())==7||(de1.getFace()+de2.getFace())==11) {
   msg=false;
   gagne();
  }
  return msg;
 }
 
 public void lancerLesDes(){
  de1.lancer();
  de2.lancer();
 }

 public static int getNbEssai() {
  return nbEssai;
 }

 public static void setNbEssai(int nbEssai) {
  JeuCraps.nbEssai = nbEssai;
 }
 
 public boolean gagne(){
  lancerLesDes();
  boolean message=false;
  
  if((de1.getFace()+de2.getFace())==7||(de1.getFace()+de2.getFace())==11)
   message=true;
  
  return message;
 }
}


public class testCraps {
                public static void main(String[] args) {
  JeuCraps jeu= new JeuCraps();
  
  boolean rejouer;
  
  int de1= jeu.getDe1().getFace();
  int de2= jeu.getDe2().getFace();
  
  int craps= de1+de2;
  
  System.out.println("De1\tDe2\tEtat:");
  do{
   rejouer= jeu.relancer();
   
   //System.out.println(jeu.getDe1().getFace()+"\t"+jeu.getDe2().getFace());
   
   if(rejouer) 
    System.out.println(jeu.getDe1().getFace()+"\t"+jeu.getDe2().getFace()+"\t"+"relancer\n");
   else System.out.println(jeu.getDe1().getFace()+"\t"+jeu.getDe2().getFace()+"\t"+"vous avez gagné");
   
  }while(rejouer);
 }
}


les resultat que j'obtient

2 réponses

iDarkMaster Messages postés 97 Date d'inscription vendredi 19 août 2016 Statut Membre Dernière intervention 31 décembre 2018 2
Modifié par iDarkMaster le 26/02/2017 à 01:22
tu a penser a faire une boucle while?
tu pourrais déclarer une variable boolean et dès que tu obtient la ou les somme voulue(s) elle passe de true à false et ta boucle se déclarerais
while key == true do

par exemple

et si tu a moins de solution que d'échecs dans ton lancé de dés, tu devrais faire des if pour tes solutions, ça allègerait ton programme en sorte ;)
0
iDarkMaster Messages postés 97 Date d'inscription vendredi 19 août 2016 Statut Membre Dernière intervention 31 décembre 2018 2
26 févr. 2017 à 01:27
excuse moi je crois que je fait erreur avec du lua, je croyais pouvoir t'aider mais je crois que d'autres seront plus en mesure que moi mais si je ne fait pas erreur, une boucle while devrais se faire:
while key == true {
//tonCode

}
0
new_potato Messages postés 3 Date d'inscription lundi 2 janvier 2017 Statut Membre Dernière intervention 26 février 2017 > iDarkMaster Messages postés 97 Date d'inscription vendredi 19 août 2016 Statut Membre Dernière intervention 31 décembre 2018
26 févr. 2017 à 03:04
Ça fonctionne bien avec le while, mais par contre ç'a généré un autre problème: maintenant les dés ne sont plus lancés aléatoirement.
0
iDarkMaster Messages postés 97 Date d'inscription vendredi 19 août 2016 Statut Membre Dernière intervention 31 décembre 2018 2
26 févr. 2017 à 04:09
si tu fait une methode d'aléatoire d'une valeur de 1 à 6(inclus) tu la mets dans ta boucle while et si tu a une solution c'est elle qui va arrêter ta boucle
0
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
26 févr. 2017 à 11:16
Bonjour,

En copiant-collant ton code, je ne vois pas le problème.
Je l'ai lancé plusieurs fois et le programme se termine tout le temps avec un résultat qui ressemble à ce que tu veux.

Si tu constates que ton programme ne se termine pas (qu'il reste bloqué sans rien faire) tu peux exécuter ces commandes là :

jps -l
qui te renverra la liste des processus Java en cours avec leur numéro (cela te permet d'identifier ton programme)

jstack 1234
qui t'affichera l'état du processus (1234 est à remplacer par le numéro obtenu via le jps correspondant à ton programme)

Ce résultat devrait permettre de savoir où en est le programme dans son exécution et donc repérer l'endroit où se trouvent les points de blocage.

Remarque : jps et jstack sont des commandes fournis avec le JDK comme java et javac, il faut donc avoir configuré la variable JAVA_HOME dans le PATH pour pouvoir y accéder.
0