Erreur incompréhensible d'une variable de type int

Erreur incompréhensible d'une variable de type int - Java - Programmation

Marsh Posté le 24-11-2013 à 17:10:33    

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 :
  1. public class Jours {
  2.    
  3.     private static final String[] dizaineNames = {
  4.     "",
  5.     "",
  6.     "vingt",
  7.     "trente",
  8.     "quarante",
  9.     "cinquante",
  10.     "soixante",
  11.     "soixante",
  12.     "quatre-vingt",
  13.     "quatre-vingt"
  14.   };
  15.   private static final String[] uniteNames1 = {
  16.     "",
  17.     "un",
  18.     "deux",
  19.     "trois",
  20.     "quatre",
  21.     "cinq",
  22.     "six",
  23.     "sept",
  24.     "huit",
  25.     "neuf",
  26.     "dix",
  27.     "onze",
  28.     "douze",
  29.     "treize",
  30.     "quatorze",
  31.     "quinze",
  32.     "seize",
  33.     "dix-sept",
  34.     "dix-huit",
  35.     "dix-neuf"
  36.   };
  37.   private static final String[] uniteNames3 = {
  38.     "",
  39.     "premier",
  40.     "deux",
  41.     "trois",
  42.     "quatre",
  43.     "cinq",
  44.     "six",
  45.     "sept",
  46.     "huit",
  47.     "neuf",
  48.     "dix",
  49.     "onze",
  50.     "douze",
  51.     "treize",
  52.     "quatorze",
  53.     "quinze",
  54.     "seize",
  55.     "dix-sept",
  56.     "dix-huit",
  57.     "dix-neuf"
  58.   };
  59.  
  60.    private static String convertZeroToHundred(int number) {
  61.     int laDizaine = number / 10;
  62.     int  lUnite = number % 10;
  63.     String resultat = "";
  64.     switch (laDizaine) {
  65.     case 1 :
  66.     case 7 :
  67.     case 9 :
  68.       lUnite = lUnite + 10;
  69.       break;
  70.     default:
  71.     }
  72.     // séparateur "-" "et"  ""
  73.     String laLiaison = "";
  74.     if (laDizaine > 1) {
  75.       laLiaison = "-";
  76.     }
  77.     // cas particuliers
  78.     switch (lUnite) {
  79.     case 0:
  80.       laLiaison = "";
  81.       break;
  82.     case 1 :
  83.       if (laDizaine == 8) {
  84.         laLiaison = "-";
  85.       }
  86.       else {
  87.         laLiaison = " et ";
  88.       }
  89.       break;
  90.     case 11 :
  91.       if (laDizaine==7) {
  92.         laLiaison = " et ";
  93.       }
  94.       break;
  95.     default:
  96.     }
  97.     // dizaines en lettres
  98.     switch (laDizaine) {
  99.     case 0:
  100.       resultat = uniteNames3[lUnite];
  101.       break;
  102.     case 8 :
  103.       if (lUnite == 0) {
  104.         resultat = dizaineNames[laDizaine];
  105.       }
  106.       else {
  107.         resultat = dizaineNames[laDizaine]
  108.                                 + laLiaison + uniteNames1[lUnite];
  109.       }
  110.       break;
  111.     default :
  112.       resultat = dizaineNames[laDizaine]
  113.                               + laLiaison + uniteNames1[lUnite];
  114.     }
  115.     return resultat;
  116.   }
  117.    
  118.     public static void main(String[] args) {
  119. /* les valeurs 8 et 9 sont convertis*/
  120.         System.out.println("*** " + Jours.convertZeroToHundred(8));
  121.         System.out.println("*** " + Jours.convertZeroToHundred(9));
  122. /* par contre 08 et 09 déclenchent une exception de type: Integer number too large :08 */
  123. }


---------------
l'on s'enrichit d'avantage en partageant ces connaissances
Reply

Marsh Posté le 24-11-2013 à 17:10:33   

Reply

Marsh Posté le 24-11-2013 à 21:02:56    

Wesh
 
Google t'aurais donne la reponse en deux secondes: un 0 devant un nombre en Java, c'est pour indiquer un nombre en octal (base 8). Du coup, 08 et 09 n'ont pas de sens. Et 010, si tu arrives jusque-la, ne vaut pas 10 mais 8, etc.
 
Bref, je suppose que tu passes tes nombres depuis une "source" externe; du coup passes les en tant que String au lieu d'Integer, et pour les passer en base 10, utilises Integer.parseInt() (ex: Integer.parseInt("08" ) retourne 8).


---------------
C'était vraiment très intéressant.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed