• Martes 30 de Abril de 2024, 01:51

Autor Tema:  Ejercicio En Eclipse  (Leído 1579 veces)

jesus.ct

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Ejercicio En Eclipse
« en: Viernes 4 de Enero de 2008, 23:18 »
0
necesito ayuda para resolver este ejercicio porque no paro de darle vueltas y estar probando y probando y no hay manera de que me salga lo que quiero si alguien sabe y podria ayudarme se lo agradeceria mucho.
Gracias
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

logicaemp

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Ejercicio En Eclipse
« Respuesta #1 en: Martes 8 de Enero de 2008, 03:35 »
0
El sistema de numeración Romano no es un sistema posicional como el Arábigo.
Como un glifo solo puede tener un valor sin importar su posición, podemos buscar y reemplazar.
Por ejemplo M siempre vale 1000. Al contrario del sistema arábigo donde 1 depende de la cantidad de 0's.
Lo único que hay que tener en cuenta es que un valor superior como "M" no puede aparecer despúes de "X".

Código: Text
  1. import java.text.ParseException;
  2.  
  3. public class FromRoman {
  4.  
  5.   public static final Integer[] divs = {1000,  900, 500,  400, 100,   90,  50,   40,  10,    9,   5,    4,   1};
  6.   public static final String[]  figs = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
  7.  
  8.   public static void main(String[] args) throws ParseException {
  9.     String letter = args[0];
  10.     Integer number = 0;
  11.  
  12.     int i = 0;
  13.     int j = 0;
  14.     while (i < letter.length()) {
  15.  
  16.       if (i < letter.length() - 1) {
  17.         String twoletter = letter.substring(i, i + 2);
  18.         int twoindex = indexOf(j, twoletter);
  19.         if (twoindex != -1) {
  20.           number += divs[twoindex];
  21.           i = i + 2;
  22.           j = twoindex;
  23.           continue;
  24.         }
  25.       }
  26.  
  27.       String oneletter = letter.substring(i, i + 1);
  28.       int oneindex = indexOf(j, oneletter);
  29.       if (oneindex != -1) {
  30.         number += divs[oneindex];
  31.         i++;
  32.         j = oneindex;
  33.         continue;
  34.       }
  35.  
  36.       throw new ParseException(letter, i);
  37.     }
  38.  
  39.     System.out.println(number);
  40.   }
  41.  
  42.   public static int indexOf(int startIndex, String temp) {
  43.     for (int j = startIndex; j < figs.length; j++) {
  44.       if (temp.equals(figs[j])) {
  45.         return j;
  46.       }
  47.     }
  48.     return -1;
  49.   }
  50.  
  51. }
  52.  
  53.  
Código: Text
  1. logicaemp@sparc4:~$ java FromRoman MCMLXXXVII
  2. 1987
  3. logicaemp@sparc4:~$ java FromRoman MCMXLXXXVII
  4. 1977
  5. logicaemp@sparc4:~$ java FromRoman CCC
  6. 300
  7.  
  8. logicaemp@sparc4:~$ java FromRoman MXXXXIXXI
  9. Exception in thread "main" java.text.ParseException: MXXXXIXXI
  10.         at FromRoman.main(FromRoman.java:36)
  11. logicaemp@sparc4:~$ java FromRoman MXXXXIXI
  12. 1050
  13.  
  14.  

Todavía hay que corregir la cantidad de "figs" que puede contener un valor.
Así como el ejemplo anterior donde IX (9) y después un I (1), evidentemente debería ser un error.
Espero que sea de ayuda.