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

Langage Java Discussion :

Programme Java avec la classe Terminal


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 22
    Points : 11
    Points
    11
    Par défaut Programme Java avec la classe Terminal
    bonjour .j'utilise la classe terminal pour les entrees et les sorties .
    Donc j'ai un exercice qui consiste a calculer le jour correspondant a une date donnee voici le code

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    public class date {
        // ===================================================
        // --- Les variables d'instances ---
        int jour;
        int mois;
        int annee;
         int jourSemaine;
     
        // ===================================================
        // --- Un premier constructeur ---
        public date(){ 
          this.jour =1;
          this.mois=1;
          this.annee =1; 
        }
     
        // ===================================================
        // --- Un second constructeur ---
        public  date (int j, int m, int a, int jS){
            this.jour=j;
            this.mois = m;
            this.annee = a;
            this.jourSemaine = jS;
        }
     
        // ===================================================
        //---methode d'affichage
        public void affiche(){
         Terminal.ecrireString(""+jour+"/"+mois+"/"+annee);
        }
        //fonction calcule lendemain d'une date
        public date lendemain(){
            date res=new date();
            res.jourSemaine=this.jourSemaine%7+1;
            if(this.jour==28&&this.mois==2){
                if(bissextile()){
                    res.jour=29;
                    res.mois=2;
                    res.annee=this.annee;//redondonce(peut etre effacer)
                }
                else{
                    res.jour=1;
                    res.mois=3;
                    res.annee=this.annee;//redondance(idem)
                }
                return res;
                //res.annee=this.annee;
            }
            else if(this.finMois()){
                if(this.mois==12){
                    res.jour=1;
                    res.mois=1;
                    res.annee=this.annee+1;
                }
                else{
                    res.jour=1;
                    res.mois=this.mois+1;
                    res.annee=this.annee;
                }
                //res.jour=1;
            }
            else{
                res.jour=this.jour+1;
                res.mois=this.mois;
                res.annee=this.annee;
            }
     
            return res;
        }
        public boolean finMois(){
            int[]tab={31,29,31,30,31,30,31,31,30,31,30,31};
            if(this.jour==tab[this.mois-1]){return true;}
            return false;
        }
        public boolean bissextile(){
            if((this.annee%4==0&&this.annee%100!=0)||this.annee%400==0){
                return true;
            }
            return false;
        }
        void calculerJourSemaine(){
            date d=new date(1,1,2005,7);
            while(d.jour!=this.jour||d.mois!=this.mois||d.annee!=this.annee){
                d=d.lendemain();
            }
            this.jourSemaine=d.jourSemaine;
        }
        void afficher(){
            String[]j={"","dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"};
            Terminal.ecrireStringln(j[jourSemaine]+""+jour+"/"+mois+"/"+annee);
        }
        //---main
        public static void main(String[]args){
          date[]tab=new date[31];
            /*for(int i=0;i<31;i++){
                tab[i]= new Date(i+1,1,2006);
                tab[i].affiche();
                Terminal.sautDeLigne();
            }*/
            /*Date d1=new Date(5,3,2008,2);
            d1.lendemain().affiche();
            Terminal.sautDeLigne();
            Date d2=new Date(31,12,2007,5);
            d2.lendemain().affiche();
            Terminal.sautDeLigne();*/
            date madate=new date(12,3,2008,99);
            madate.calculerJourSemaine();
            madate.afficher();
     
        }
    }
    public class testdate {
    public static void main(String [] args ) {
      date d1=new date(12,3,2008,1);
     
        d1.calculerJourSemaine();
        d1.afficher();
     
        }
    }
    donc j'ai vraiment pas saisi comment fonctionnais la methode calculerjoursemeine.. et du coup je ne comprends toujours pas comment on fais pour calculer le jour correspondant a une date qui peut m'aider
    Merci
    et donc c

  2. #2
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Points : 380
    Points
    380
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static int day(Date date) {
    	return (int) ((date.getTime()/(86400000) + 3)%7); // 24*60*60*1000 = 86400000
    }
    Il te retourne un entier de 0 à 6, 0 pour lundi et 6 pour dimanche. (Le principe viens du fait que le 1er janvier 1970 est un jeudi et on compte le nombre de jour entre la date actuelle et la data de référence (le 01/01/1970 à minuit +0 GTM)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 22
    Points : 11
    Points
    11
    Par défaut suite
    MERCI
    PAR contre qu'elqu'un pourrait me dire la difference entre une methode statique et non statique car j'ai pas tres bien compris...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    une méthode statique peut être appelée sans avoir besoin d'instancier la classe (exemple : la fonction main).

  5. #5
    Invité
    Invité(e)
    Par défaut
    Une méthode statique ne connait pas l'objet courant. Elle n'agit que sur ses arguments et sa valeur de retour.
    Voici quelques remarques :

    citation de la FAQ :

    On peut aussi manipuler une variable ou méthode statique à partir d'une instance de la classe.

    Pour faire des variables statiques des constantes, il faut combiner le mot-clé static avec le mot-clé final.

    Les méthodes statiques, étant indépendantes de toute instance, n'ont pas accès aux variables ou méthodes non statiques.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 22
    Points : 11
    Points
    11
    Par défaut suite
    Merci c'est sympa

    bah a propos des methodes statiques
    on me demande de codé une methode statique qui dit si une date est anterieure a une autre

    voici le code

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    public class date {
        int jour;
        int mois;
        int annee;
     
        public date() {
            this.jour=1;
            this.mois=1;
            this.annee=1;
        } 
        public date(int j,int m,int a ) {
            this.jour=j;
            this.mois=m;
            this.annee=a;
        }
     
       static  boolean estavant(date d1, date d2 ) {// d2 est recopier dans DA
            if(d1.annee < d2.annee) {// this represente d.estavant 
                return false;// donc this est pas avant
            } 
             else if (d1.annee >d2.annee ) {
                return true; // donc this est avant (anterieur)
            } 
             else if (d1.mois < d2.mois) {// le sinon dit implicetement qu'ils ont la meme annee  et doit tester les mois'
                return false;
            } 
             else if(d1.mois > d2.mois) {
                return true;
            } 
             else if (d1.jour <= d2.jour) {// idem pour les jour
                return false;
            } 
             else {
                return true;//dans ce cas this est anterieur
            }
        }
    }     
    // le fichier main
    public class testdate {
        public static void main(String[]args ) {
            date d=new date(19,3,2008 );
            date d2=new date(12,3,2008);
            if(date.estavant(d,d2)) { 
                Terminal.ecrireStringln(" ok ");
     
        } else {
                Terminal.ecrireStringln(" non ok");
        }
    }  
    //ps: j'utilise netbeans
    apparemment a la compile c'est le deuxieme argument de la methode est avant qui est testé (si le deuxieme args est avant le 1ER on ecrit ok sinon non ok) Mais a quoi voit on dans la methode que c'est le deuxieme args qui est testé ?ou par défaut c'est toujours le 2eme.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je ne comprends pas réellement le sens de cette question.
    A la lecture de cet algorithme, je vois une méthode statique (ici tu as besoin d'un retour d'information sur un test), et je vois 2 arguments, on compare ces arguments ensemble en comparant en premier lieu l'année d'une date et en redescendant jusqu'au jour afin de vérifier "l'ancienneté" d'une date par rapport à l'autre.
    Tu fais référence dans tes commentaires au mot clé "this" qui permet d'appeler l'objet courant. Je rappelle qu'une méthode statique ne connait pas l'objet courant. Donc au sein de ta méthode (static) tu ne peux plus commenter en parlant de this, mais désigne correctement ton objet pour le citer, ceci pourrait t'éviter de grandes confusions.
    Tu parles de test d'un argument avant l'autre. Je ne remarque pas de test d'un argument avant l'autre, j'observe une simple comparaison des arguments entre eux, alors j'ai donc des difficultés à comprendre ce que tu souhaiterais que l'on t'explique.
    Remarque : si les 2 dates sont identiques, tu vas avoir un retour de ta méthode qui sera incorrecte, l'une n'est antérieure ou postérieure à l'autre. Il aurait peut-être été intéressant d'approfondir ce point.

Discussions similaires

  1. Morpion (programmation Java avec Eclipse)
    Par flariii dans le forum Débuter
    Réponses: 1
    Dernier message: 15/08/2010, 19h41
  2. Récursivité avec la class Terminal
    Par ginos dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 12/05/2008, 22h38
  3. Dessiner en java avec plusieurs classes
    Par keub51 dans le forum 2D
    Réponses: 12
    Dernier message: 04/03/2007, 21h46
  4. Comment on connecte un programme Java avec une base de données FireBird?
    Par Gomez dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 16/02/2007, 10h21
  5. Réponses: 2
    Dernier message: 13/02/2007, 16h14

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