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

Java Discussion :

Erreur incompréhensible d'une variable de type int


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    102
    Points
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 34
    Par défaut Erreur incompréhensible d'une variable de type int
    Bonsoir,
    j'ai écrit une classe contenant une méthode de conversion de nombre en lettre.
    Je veux convertir les valeurs numériques des jours en toutes lettres. seulement, pour le testé il se passe une erreur que je n'arrive pas à comprendre.

    J'arrive à convertir toutes les valeurs de 01 à 31 sans problème, exceptées 08 et 09 pour lesquels le système me dit : "Integer number too large :08 " . Par contre il convertit les valeurs 8 et 9. J'arrive pas à comprendre. Ci-dessous mon 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
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    public class Jours {
     
        private static final String[] dizaineNames = {
        "",
        "",
        "vingt",
        "trente",
        "quarante",
        "cinquante",
        "soixante",
        "soixante",
        "quatre-vingt",
        "quatre-vingt"
      };
     
      private static final String[] uniteNames1 = {
        "",
        "un",
        "deux",
        "trois",
        "quatre",
        "cinq",
        "six",
        "sept",
        "huit",
        "neuf",
        "dix",
        "onze",
        "douze",
        "treize",
        "quatorze",
        "quinze",
        "seize",
        "dix-sept",
        "dix-huit",
        "dix-neuf"
      };
     
      private static final String[] uniteNames3 = {
        "",
        "premier",
        "deux",
        "trois",
        "quatre",
        "cinq",
        "six",
        "sept",
        "huit",
        "neuf",
        "dix",
        "onze",
        "douze",
        "treize",
        "quatorze",
        "quinze",
        "seize",
        "dix-sept",
        "dix-huit",
        "dix-neuf"
      };
     
       private static String convertZeroToHundred(int number) {
     
        int laDizaine = number / 10;
        int  lUnite = number % 10;
        String resultat = "";
     
        switch (laDizaine) {
        case 1 :
        case 7 :
        case 9 :
          lUnite = lUnite + 10;
          break;
        default:
        }
     
        // séparateur "-" "et"  ""
        String laLiaison = "";
        if (laDizaine > 1) {
          laLiaison = "-";
        }
        // cas particuliers
        switch (lUnite) {
        case 0:
          laLiaison = "";
          break;
        case 1 :
          if (laDizaine == 8) {
            laLiaison = "-";
          }
          else {
            laLiaison = " et ";
          }
          break;
        case 11 :
          if (laDizaine==7) {
            laLiaison = " et ";
          }
          break;
        default:
        }
     
        // dizaines en lettres
        switch (laDizaine) {
        case 0:
          resultat = uniteNames3[lUnite];
          break;
        case 8 :
          if (lUnite == 0) {
            resultat = dizaineNames[laDizaine];
          }
          else {
            resultat = dizaineNames[laDizaine] 
                                    + laLiaison + uniteNames1[lUnite];
          }
          break;
        default :
          resultat = dizaineNames[laDizaine] 
                                  + laLiaison + uniteNames1[lUnite];
        }
        return resultat;
      }
     
        public static void main(String[] args) {
    /* les valeurs 8 et 9 sont convertis*/
            System.out.println("*** " + Jours.convertZeroToHundred(8));
            System.out.println("*** " + Jours.convertZeroToHundred(9)); 
     
    /* par contre 08 et 09 déclenchent une exception de type: Integer number too large :08 */
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 569
    Points
    21 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 569
    Points : 21 637
    Par défaut
    Cinq fois cette semaine que je vois parler de ça. Le monde fonctionne bizarrement.

    En Java et de nombreux autres langages, il ne faut jamais écrire les entiers en commençant par un zéro. C'est tout.

    (Cela déclenche l'écriture en base octale, c'est à dire en utilisant 8 chiffres, de 0 à 7, et non pas les 10 chiffres habituels de notre base décimale bien-aimée.
    Comme les chiffres 8 et 9 n'existent pas en octal, on ne peut pas écrire les nombres 08 et 09. Et écrire le nombre 010 en octal produira un nombre dont l'écriture décimale est 8. Il ne faut donc pas le faire.
    J'ignore à quoi sert l'écriture octale. Java en a hérité de C, et je ne sais pas pourquoi C a inventé ça. Le mieux est de ne jamais s'en servir et de ne jamais commencer un entier par 0.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    102
    Points
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Points : 34
    Par défaut Erreur incompréhensible d'une variable de type int
    Merci beaucoup thelvin pour ces précisions, cela veut dire qu'il n'y a pas solution pour écrire 08 "en java. quoi. Je vais donc formater la valeur du champ dont la méthode prend en paramètre pour ne pas avoir de surprises désagréable.Merci encore

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Points
    29 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    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
    Points : 29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par coolanso Voir le message
    Merci beaucoup thelvin pour ces précisions, cela veut dire qu'il n'y a pas solution pour écrire 08 "en java. quoi. Je vais donc formater la valeur du champ dont la méthode prend en paramètre pour ne pas avoir de surprises désagréable.Merci encore
    D'un autre coté, à quoi ça pourrait bien servir d'écrire des entiers avec un 0 devant ? Pour l'affichage on peut tout à fait le faire au besoin (ça a existé dans de vieux rapports produits en cobol ou en RPG/GAP , pour gérer l'alignement de colonnes), mais dans le code, ça sert à rien d'autre que de surcharger le code d'un caractère inutile.
    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.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 569
    Points
    21 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 569
    Points : 21 637
    Par défaut
    Citation Envoyé par coolanso Voir le message
    Je vais donc formater la valeur du champ dont la méthode prend en paramètre pour ne pas avoir de surprises désagréable.Merci encore
    Ah si si, tu peux écrire "08" tant que tu veux, du moment qu'il y a conversion String -> int.
    Mais pas 08 qui ressemble à un int directement, sauf qu'un int ne peut pas être écrit comme ça puisque ça commence par 0.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 14
    Dernier message: 02/08/2014, 03h33
  2. Fonction ReplaceAll utilisant une variable de type int
    Par melouze dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 18/09/2012, 14h19
  3. Réponses: 1
    Dernier message: 09/09/2011, 17h38
  4. Réponses: 2
    Dernier message: 10/04/2007, 13h39
  5. Réponses: 3
    Dernier message: 23/02/2006, 10h37

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