Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con conversor a números romanos (?)

Estas en el tema de Problema con conversor a números romanos (?) en el foro de Java en Foros del Web. Haber si me ayudan con esto, quiero conseguir convertir a numeros romanos números del 1 al 9999. De momento me convierte de 1 a 999 ...
  #1 (permalink)  
Antiguo 25/11/2013, 05:46
 
Fecha de Ingreso: julio-2010
Mensajes: 166
Antigüedad: 13 años, 8 meses
Puntos: 0
Pregunta Problema con conversor a números romanos (?)

Haber si me ayudan con esto, quiero conseguir convertir a numeros romanos números del 1 al 9999.

De momento me convierte de 1 a 999 pero me he quedado aquí... no se como modificar el código para que lo haga hasta el 9999, haber si alguien me ayuda..

Código:
    public static void main(String[] args) {
      Scanner entrada=new Scanner(System.in);
 
      String Unidad[]={"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
      String Decena[]={"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
      String Centena[]={"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
      String Milesima[]={"", "M"}; 

      System.out.println("Ingresa numero entre 1 y 9999");
      int Num = entrada.nextInt();
      int unidad=Num%10;
      int decena=(Num/10)%10;
      int centena=Num/100;
//AQUÍ ES DONDE NO SE COMO DEBO DECLARARLA E IGUALARLA:
      int milesima= (?) ;
//
      if(Num>=100){         
          System.out.println(Centena[centena]+Decena[decena]+Unidad[unidad]);
      }else{
          if(Num>=10){
              System.out.println(Decena[decena]+Unidad[unidad]);          
          }else{
              System.out.println(Unidad[Num]);          
          }          
      }          
    }
}
Gracias
  #2 (permalink)  
Antiguo 25/11/2013, 08:31
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Problema con conversor a números romanos (?)

personalmente lo leeria con un readLine

Luego miro el tamaño a ver si tiene entre 1 y 4 caracteres, de lo contrario muestro un mensaje indicando que el texto introducido no cumple las especificaciones.

Luego separaría el texto en un array de strings con los caracteres separados (llamemosle numeros)
numeros[0] indicaria los miles. En tu caso haremos lo siguiente: Llamar a un metodo separado que intenta convertir el String en un int. Si da una excepción en el parseo se mostrará el mismo mensaje anterior. Si todo fue bien se añaden tantas emes como el número indique.

Esto realmente no es así, en los numeros romanos a partir del 4000 se indica con un IV con una barra horizontal superior (que indica que el numero se multiplica por 1000), pero para tu caso lo dejaremos como está, porque la mayoria de conversores tienen este error.

Luego procesamos las centenas (numeros[1]) obteniendo el elemento Centena[i] donde i es el valor de numeros[1]. El valor obtenido se concatena al String de los millares.

Repetimos lo mismo para decenas y para las unidades con numeros[2] y numeros[3] respectivamente.

De la composición de estos elementos saldrá el número romano completo.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 25/11/2013, 15:08
 
Fecha de Ingreso: julio-2010
Mensajes: 166
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema con conversor a números romanos (?)

Podrías facilitarme el código, pero arreglando el mío?
O alguien podría arreglarlo? esque no se muy bien por donde tirar.. soy novato en esto.
  #4 (permalink)  
Antiguo 26/11/2013, 02:09
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Problema con conversor a números romanos (?)

Te he explicado el método bien clarito y me gustaría que te esforzases un poco.

Aún así te voy a dar la forma de pasar de String a int

private int tryParse(String text) throws NumberFormatException {
try {
return Integer.parseInt(text);
} catch (NumberFormatException e) {
throw e;
}
}

Lo he puesto asi a ojo por lo que no sé si está bien. Deberías usar un IDE como eclipse o netbeans que te ayude a solucionar los problemas con java.

Para separar un String en sus letras tienes el método split(), que te devuelve un array con las letras si lo haces asi => tuVariableTexto.split("");
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 26/11/2013, 06:12
 
Fecha de Ingreso: julio-2010
Mensajes: 166
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema con conversor a números romanos (?)

Es buena idea hacerlo así, pero quiero conseguir hacerlo de la otra forma, es decir, simplemente arreglando mi código. Porque es una chorrada lo que tengo que cambiar pero no doy con el resultado correcto.

Gracias por eso
  #6 (permalink)  
Antiguo 26/11/2013, 06:44
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Problema con conversor a números romanos (?)

Los miles son exactamente iguales a lo que has hecho, más bien a lo que otro ha hecho, porque si ese código fuese tuyo no tendrías esa duda.

Milésima es la fracción mil, tú buscas las unidades de millar o millares.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: conversor, numeros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:25.