IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Programme de formule 1 - Problème Horloge


Sujet :

avec Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Par défaut Programme de formule 1 - Problème Horloge
    Bonjour,

    Je dois programmer une simulation de Formule 1 et dans les consignes je dois y intégrer une horloge en millisecondes.

    Pour l'instant je ne sais pas comment la faire mais mon réel problème est d'abord de savoir à quoi elle va me servir, en sachant que dans mon code j'ai déjà instancié mes écuries avec des voitures, des pilotes...

    J'aurais ainsi plusieurs situations à gérer, le dépassement d'une voiture par l'autre... et à la fin de chaque tour, un classement avec l'attribution de points pour les 1ers.

    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Cette horloge te servira surement à avoir le temps de parcours des tes formules 1. Dans le cas où 2 voitures arrivent en même temps, il faut bien les départager sur la milliseconde et non pas la seconde.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Bonjour,

    Lorsque tu veux obtenir un temps de référence (c'est-à-dire un point de départ temporel), tu appelles system.currenttimemillis() (de mémoire... à vérifier plus exactement). Dans ton cas, par exemple, au moment du départ, ou à chaque nouveau tour, tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private long departTemporel;
    private long departTour;
    public void depart() {
        departTemporel = system.currenttimemillis();
        departTour = departTemporel;
    }
    public void nouveauTour() {
        departTour = system.currenttimemillis();
    }
    Et pour récupérer le nombre de millisecondes écoulées,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public long getTempsTotal() {
        return system.currenttimemillis()-departTemporel;
    }
    public long getTempsTourMillis() {
        return system.currenttimemillis()-departTour;
    }

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Par défaut Programme de formule 1 - Problème Horloge
    Merci beaucoup, donc si je reprend ce bout de code , il me sera afficher l'horloge et elle changera a chaque milliseconde, comme un chronometre quoi ?
    Et puis-je aussi lancé une fonction qui test a chaque mms si une de mes voitures a passer la ligne d'arriver ? (Pour pouvoir incrémentaire son paramètre "nombreDeTourEffectue" )
    il faudrais que je puisse aussi rafraichir l'horloge toute les mms donc il me faut une boucle
    Si j'utilise System.currentMillis ca ne vas pas
    Je suis completement perdue
    Cordialement

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Hum... Je pense que ta façon de voir les choses est trop procédurale et pas assez orientée objet. L'idée est que chaque voiture devrait gérer sa course. Mais ça va être difficile de t'expliquer plus concrètement sans voir à quoi ressemble ton code...

    Les méthodes que je t'ai donné doivent être écrites dans la classe voiture et servent à récupérer à tout instant et pour chaque voiture le temps écoulé depuis le départ, et depuis le début du tour.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 764
    Par défaut
    Bonjour,

    As-tu pensé à donner des caractéristiques différentes à chaques voitures (accélération, consommation, usure des pneus .. etc) et à chaque pilote (rapidité de réaction, intelligence, expérience .. etc) ?
    et pourquoi pas aléatoirement, le vent, le temps (pluie, température ... etc)...

    Car, de mon point de vue, il me semble que si tu ne fait pas cela, toutes tes voitures finiront leur tour dans le même temps (sauf que ton ordinateur fera varier de quelques millisecondes aléatoirement).

    Il serait intéressant que tu nous dévoile les consignes


  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Par défaut
    Alors en fait je me suis renseigner et finalement l'horloge peut être gérer a l'aide d'un simple entier en utilisant une boucle for représentant les minutes .
    Voici un exemple concernant l'instanciation de mes voitures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // Initialisation de notre 1ere écurie :
     
            double vitesseAlea1 = random.nextDouble()*10;     // unité : km/min
            double fiabiliteAlea1 = random.nextDouble()/100;
     
            double vitesseAlea2 = random.nextDouble()*10;     
            double fiabiliteAlea2 = random.nextDouble()/100;
     
            Personne pilote1 = new Personne ("Kobayashi","Kamui",0,"Caterham");
            Personne pilote2 = new Personne ("Ericsson","Marcus",0,"Caterham");
     
            Voiture voiture1 = new Voiture (1,pilote1,vitesseAlea1,150, 2.345,fiabiliteAlea1,0.0,0);
            Voiture voiture2 = new Voiture (2,pilote2,vitesseAlea2,150, 2.345,fiabiliteAlea2,0,0);
     
            tabVoiture[0]=voiture1;    //Remplissage du Tableau avec les voitures instanciés
            tabVoiture[1]=voiture2;
     
            Ecurie Caterham = new Ecurie ("Caterham",voiture1,voiture2,0);
    J'ai utilisé des nombres aléatoires pour les vitesses et la fiabilité (fiabilité qui nous aidera pendant a tester s'il y a collision lorsqu'une voiture en dépasse une autre

    Le but de cette simulation est : gérer la courses de 10 écurie de 2 voitures , leur faire faire 50tours de course , a chaque tour afficher la position de chaque voiture et a la fin de la course afficher un classement final pour les pilotes et un autre pour les écuries.

    J'ai utilisé un tableau de 50 ArrayList . Par ex si la voiture 1 passe le 1er tour je l'ajoute dans la liste de la case 0 du tableau et ça pour toute les voitures

    Mais ça m'apparait et je n'arrive pas à le résoudre :
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50
    at java_projet.Test.main(Test.java:262)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    while (tablisteVoituresPasseTour[0].size()<20 || tablisteVoituresPasseTour[1].size()<20 || tablisteVoituresPasseTour[2].size()<20 || tablisteVoituresPasseTour[3].size()<20 || tablisteVoituresPasseTour[4].size()<20 || tablisteVoituresPasseTour[5].size()<20 || tablisteVoituresPasseTour[6].size()<20 || tablisteVoituresPasseTour[7].size()<20 || tablisteVoituresPasseTour[8].size()<20 || tablisteVoituresPasseTour[9].size()<20 || tablisteVoituresPasseTour[10].size()<20 ||
                    tablisteVoituresPasseTour[11].size()<20 || tablisteVoituresPasseTour[12].size()<20 || tablisteVoituresPasseTour[13].size()<20 || tablisteVoituresPasseTour[14].size()<20 || tablisteVoituresPasseTour[15].size()<20 || tablisteVoituresPasseTour[16].size()<20 || tablisteVoituresPasseTour[17].size() <20 || tablisteVoituresPasseTour[18].size()<20 || tablisteVoituresPasseTour[19].size()<20 || tablisteVoituresPasseTour[20].size()<20 || tablisteVoituresPasseTour[21].size()<20 ||
                    tablisteVoituresPasseTour[22].size()<20 || tablisteVoituresPasseTour[23].size()<20 || tablisteVoituresPasseTour[24].size()<20 || tablisteVoituresPasseTour[25].size()<20 || tablisteVoituresPasseTour[26].size()<20 || tablisteVoituresPasseTour[27].size()<20 || tablisteVoituresPasseTour[28].size()<20 || tablisteVoituresPasseTour[29].size() <20 || tablisteVoituresPasseTour[30].size()<20 || tablisteVoituresPasseTour[31].size()<20 || tablisteVoituresPasseTour[32].size()<20 ||
                    tablisteVoituresPasseTour[33].size()<20 || tablisteVoituresPasseTour[34].size()<20 || tablisteVoituresPasseTour[35].size()<20 || tablisteVoituresPasseTour[36].size()<20 || tablisteVoituresPasseTour[37].size()<20 || tablisteVoituresPasseTour[38].size()<20 || tablisteVoituresPasseTour[39].size() <20 || tablisteVoituresPasseTour[40].size()<20 || tablisteVoituresPasseTour[41].size()<20 || tablisteVoituresPasseTour[42].size()<20 || tablisteVoituresPasseTour[43].size()<20 ||
                    tablisteVoituresPasseTour[44].size()<20 || tablisteVoituresPasseTour[45].size()<20 || tablisteVoituresPasseTour[46].size()<20 || tablisteVoituresPasseTour[47].size()<20 || tablisteVoituresPasseTour[48].size()<20 || tablisteVoituresPasseTour[49].size()<20 )
                {
                 for (int i=0; i<20; i++){
     
                             tabVoiture[i].distanceParcourue= tabVoiture[i].distanceParcourue + tabVoiture[i].vitesse;
     
                             if (tabVoiture[i].tourTermine()==true){ // une voiture a passer un tour, donc on incrémente le compteur qui compte le nombre de voiture ayant passer la ligne
     
                                 System.out.println((tabVoiture[i].tourEffectue)-1);
                                 tablisteVoituresPasseTour[(tabVoiture[i].tourEffectue)-1].add(tabVoiture[i]);  // ajoute la voiture dans la liste de voiture correspondant à son tour Effectue ; par exemple, si la voiture 12 a effectue son 3e tour il sera mis dans la 3e listedeVoiture qui se trouve dans la case d'indice 2 du tableau
     
                                   }
                             }
     
                 }
    C'est à l'endroit de la ligne tablisteVoituresPasseTour[(tabVoiture[i].tourEffectue)-1].add(tabVoiture[i]);

    Merci

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je suppose, que dans tourTermine(), tu incrémentes un compteur de tour. L'erreur indique qu'on essaye d'accèder à tablisteVoituresPasseTour[50] (le tour 51 donc), qui n'existe pas. Je suppose que c'est dû au fait qu'une voiture à au moins un tour d'avance. Dans ta boucle while, tu devrais ne pas traiter les voitures qui ont franchis la ligne d'arrivée (qui ont fait déjà 50 tours).

    Par ailleurs, ton while est épouvantable. Tu devrais le factoriser en une méthode du type, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while( coursePasTerminee(tablisteVoituresPasseTour) ) {
     
       ...
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private boolean coursePasTerminee(ArrayList<Voiture>[] tablisteVoituresPasseTour) {
     
       for(ArrayList<Voiture> voitures : tablisteVoituresPasseTour ) {
           if ( voitures.size()<20 ) {
              return true; // un ou (||) signifie qu'il suffit qu'au moins une condition soit vraie pour que l'expression complète le soit
           }
       }
     
       return false;
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Par défaut
    Oui vraiment je me doutais que pour le while j'allais me faire "remonter les bretelles". Merci en ajoutant une condition cela fonctionne
    Enfin le petit problème est résolu , est-ce que vous auriez une idee de la facon dont je pourrais m'y prendre pour gerer les dépassement ?

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par NatsuPower Voir le message
    Enfin le petit problème est résolu , est-ce que vous auriez une idee de la facon dont je pourrais m'y prendre pour gerer les dépassement ?
    Je dirais qu'il y a pleins de façons de faire, en fonction de ton modèle, et des spécifications (c'est quoi "gérer les dépassements" ?).

    Dans le premier cas, il me semble que le plus simple est encore de trier la liste des voitures par rapport à la distance totale parcourue, ce qui donne l'ordre (en simplifiant de manière convenable à mon avis). On peut le faire par exemple systématiquement après chaque boucle sur les 20 voitures pour les faire avancer. On peut connaitre ainsi les positions intermédiaires. On peut savoir qu'une voiture en a dépassé une autre, en comparant par rapport à la liste triée précédente (après la boucle précédente). Si une voiture a changé de position dans la liste, c'est qu'elle a doublé au moins une voiture (possiblement plusieurs) : il faut parcourir les voitures dans la liste actuelle, entre l'ancienne position et la nouvelle, pour connaitre celles dont qui ont été doublées par cette voiture. Avec ce système de liste, tu pourrais même facilement gérer un journal (du genre au km 38.455, Hamilton dépasse Rosberg, au km 88.215 Vettel dépasse Rosberg qui est en train de reprendre sa place à Hamilton, etc...).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 7
    Par défaut
    D'accord je vais essayer de faire ca, merci beaucoup pour vos réponse et votre patience

Discussions similaires

  1. Programmation d'un signal d'horloge en C
    Par tirem dans le forum C
    Réponses: 2
    Dernier message: 27/03/2010, 16h18
  2. Réponses: 4
    Dernier message: 03/02/2010, 13h49
  3. [Dev-Pascal] Programme de combat naval : problème d'affichage
    Par deltarip dans le forum Autres IDE
    Réponses: 1
    Dernier message: 15/02/2009, 00h10
  4. probléme horloge en java
    Par grungy-soul dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 31/12/2007, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo