Problème exercice débutant java [Fermé]

Signaler
-
anoukville
Messages postés
8
Date d'inscription
dimanche 20 mars 2016
Statut
Membre
Dernière intervention
23 février 2017
-
Bonjour, je suis débutante sur Java et je cherche la solution pour un petit exercice d'application (pas très compliqué je pense) mais je n'ai pas encore la logique.

enoncé:
Le but de l'exercice est de programmer le parcours d'un escargot qui doit avancer en ligne droite sur un parcours. En fait, il s'agit plutôt d'un pion sur un plateau de jeu que d'un escargot réel : il doit avancer de 50 cases en faisant des déplacements successifs. A chaque tour de jeu, l'escargot avance d'un certain nombre de cases selon le tirage d'un dé. Autrement dit, il peut avancer de 1 à 6 cases par tour. Le jeu s'arrête quand il a parcouru plus de 50 cases.
A chaque tour de boucle, c'est le numéro de la case où est l'escargot qui est affiché.
(instruction MOOC.auSort(1,6) pour générer le tirage au sort)

Je sais qu'il faut utiliser une boucle While mais je n'y arrive pas, ma boucle est sans fin et je ne trouve pas l'erreur.

code:

public class Exercice4 {
  public static void main(String[] args){
    int nombreDe = MOOC.auSort(1,6);
    int position = 0;
    position = position+nombreDe;
    while (position < 50 ) {
      System.out.println("position :");
      System.out.println(position + nombreDe);
  }
}
}


Merci de votre aide!

3 réponses

Messages postés
1053
Date d'inscription
mardi 2 février 2010
Statut
Membre
Dernière intervention
5 janvier 2017
118
Salut,
utilises un débogueur, tu trouvera ton erreur parce que si on te donne la solution tu va jamais rien comprendre surtout sur ce genre de notions d'algo super simple...
merci, je ne veux pas la solution toute faite bien sûr mais un indice sur ce qu'il manque ou ce qu'il ne va pas.
Messages postés
21187
Date d'inscription
mardi 27 juin 2006
Statut
Contributeur sécurité
Dernière intervention
22 juin 2016
1 237
Décortique nous ton code stp (tu vas comprendre ;-))

Explique chaque ligne:
int nombreDe = MOOC.auSort(1,6);
int position = 0;
position = position+nombreDe;
while (position < 50 ) {
   System.out.println("position :");
   System.out.println(position + nombreDe);

++
Indice: Que donne tes println ?
"Impossible is nothing"
réussi !

public class Exercice4V3 {
  public static void main(String[] args){
    int nombreDe; 
    int position = 0;
    int espace = 0;
    double ecranVide = 0;
    while (position < 55 ) {
      for (ecranVide = 0; ecranVide <= 15; ecranVide = ecranVide+1){
        MOOC.pause(0.3);
        System.out.println(" ");
      }
      for (espace = 0; espace < position; espace=espace+1){
        System.out.print(' ');
      }
      nombreDe = MOOC.auSort(1,6);
      position = position + nombreDe;
        System.out.println(espace + "_@_V"); 
      
  }
}
}
Regis59
Messages postés
21187
Date d'inscription
mardi 27 juin 2006
Statut
Contributeur sécurité
Dernière intervention
22 juin 2016
1 237
Du coup position < 55 ?
Ben oui c'est tout ce que j'ai trouvé et ca à l'air de marché vu que 55 est la valeur maximum que l'escargot puisse atteindre. Si tu a un autre proposition je suis curieuse ...!
Regis59
Messages postés
21187
Date d'inscription
mardi 27 juin 2006
Statut
Contributeur sécurité
Dernière intervention
22 juin 2016
1 237
Oui mais dans ce cas, si j'arrive à 51, j'ai pas gagné?
Oui effectivement je l'avais pas vu comme ça ...
Messages postés
8
Date d'inscription
dimanche 20 mars 2016
Statut
Membre
Dernière intervention
23 février 2017

bonjour, je viens de reprendre mon petit jeu avec l'escargot. on vient de voir la notion de tableau. Le nouvel énoncé de l'exercice avec les escargot est : il y a 5 escargots et à chaque tour de boucle, la position de chaque escargot est affichée sous la forme d'un numéro de case (du plateau de jeu, pas du tableau). Chaque escargot est identifié par un numéro, soit un numéro compris entre 0 et 4, soit un numéro compris entre 1 et 5 et à l'affichage, le numéro de l'escargot est précisé avec sa position.

en gros je dois obtenir quelque chose comme ça:
position escargot 0: 2
position escargot 1: 4
position escargot 2: 3
position escargot 3: 1
position escargot 4: 6

(à chaque nouveau tour, la position doit venir s'additionner à la position précédente)
position escargot 0: 8
position escargot 1: 10
position escargot 2: 7
position escargot 3: 9
position escargot 4: 12

mon problème est que sur mon programme, le nombre du dé s'additionne d'un escargot à l'autre.

public class Exercice5V1{
    public static void main(String[] args){
        int[] tab = new int[5];
        int position = 0;
        int nombreDe = 0;
        int num = 0;
        while (position < 50) {
            for (num = 0; num < 5; num = num + 1){
                nombreDe = MOOC.auSort(1, 6);
                tab[num] = position;
                position = position + nombreDe;
                System.out.println("position escargot " + num + " : " + position);
            }
        }
    }
}

un indice ? ;)
merci
KX
Messages postés
16104
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 janvier 2020
2 501 > anoukville
Messages postés
8
Date d'inscription
dimanche 20 mars 2016
Statut
Membre
Dernière intervention
23 février 2017

C'est normal de passer autant de temps sur un truc aussi simple ?
C'est une question de logique, d'algorithmique, et ça s'apprends en résolvant de petits énoncés comme celui-ci, simples en apparence mais qui nécessitent une certaine rigueur dans la manière de construire ses idées.

J'ai commencé par remplacer ma condition while (position < 50) par while (tab[num] < 50
Je pense que c'est déjà un bon début, puisque tu prends en compte le fait que tu as 5 escargots, ce que tu ne faisais pas avant.
Peut-être que ton erreur est de vouloir garder un code proche de ce que tu avais avant (avec un seul escargot) alors que c'est un problème différent, avec de nouvelles règles, qui aura donc une solution différente.

Remarque : pour écrire du code sur le forum merci d'utiliser les balises de code.
Exemple : <code java>public class Exercice5V1{ </code>
anoukville
Messages postés
8
Date d'inscription
dimanche 20 mars 2016
Statut
Membre
Dernière intervention
23 février 2017

merci, j'ai partiellement résolu le problème :

public class Exercice5V1{
    public static void main(String[] args){
        int[] tab = new int[5];
        int position = 0;
        int nombreDe = 0;
        int num = 0;
        boolean courseFini = false;
        while (tab [0]< 50 & tab [1]< 50 & tab [2]< 50 & tab [3]< 50 & tab [4]< 50) {
            for (num = 0; num < 5; num = num + 1){
                nombreDe = MOOC.auSort(1, 6);
                tab[num] = tab[num] + nombreDe;
                System.out.println("position escargot " + num + " : " + tab[num]);
            }
            System.out.println(" ");
}
}
}


Mais je ne suis pas satisfaite car si j'avais des millions d'escargot cette methode serait impossible.
KX
Messages postés
16104
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 janvier 2020
2 501 > anoukville
Messages postés
8
Date d'inscription
dimanche 20 mars 2016
Statut
Membre
Dernière intervention
23 février 2017

En fait techniquement ça marcherait aussi pour un million, mais ça va demander du temps pour faire le code.

Tu ne t'es pas servi de la variable courseFini... tu devrais peut-être ;-)

PS. Je t'invite à utiliser une variable
int nbEscargots = 5;
et de supprimer tout les 5 de ton code pour les remplacer par cette constante, si tu veux passer à un million d'escargots, tu n'auras qu'à changer cette valeur.

Remarque : pour l'opérateur logique ET il faut utiliser
&&

En apparence l'opérateur
&
fait la même chose, mais ce n'est pas correct.
je pense que ton while doit etre une valeur boolean avec un if dans ta boucle for pour pouvoir l'arreter
anoukville
Messages postés
8
Date d'inscription
dimanche 20 mars 2016
Statut
Membre
Dernière intervention
23 février 2017

j'y suis! :

public class Exercice5V2 {
    public static void main(String[] args){
        int[] tab = new int[5];
        int position = 0;
        int nombreDe = 0;
        int num = 0;
        boolean finCourse = false;
        while (!finCourse) {
            for (num = 0; num < 5; num = num + 1){
                nombreDe = MOOC.auSort(1, 6);
                tab[num] = tab[num] + nombreDe;
              if (tab[num] >= 50){
                 finCourse = true;
                 System.out.println("l'escargot " + num + " a gagné --> " + "position = "+ tab[num]);
            }
              System.out.println("position escargot " + num + " : " + tab[num]);
        }
            System.out.println (" ");
    }
      
}
}


je recommence avec la variable in nombbreEscargot ;)