Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Psyke1 en 22 Noviembre 2011, 20:05 pm



Título: [SRC] decimalToRomano
Publicado por: Psyke1 en 22 Noviembre 2011, 20:05 pm
Llevo muy poco en java, avisadme si veis algún error o algo mejorable, a ver que os parece:

Código
  1. import java.util.*;
  2.  
  3. public class Hello {
  4. public static String repeatString(String sText, int iTimes){
  5. return new String(new char[iTimes]).replace("\0", sText);
  6. }
  7.  
  8. public static String decimalToRomano(int iNum) {
  9. int iTmp= 0, i= 1;
  10. String sRet= "";
  11.  
  12. String [] [] sRDigit =
  13. {
  14. {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
  15. {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
  16. {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}
  17. };
  18.  
  19. if (iNum > 0){
  20. for (int x=0; x<3; x++){
  21. iTmp=iNum % (i * 10);
  22.  
  23. if (iTmp != 0)
  24. sRet= sRDigit[x][(iTmp / i) -1] + sRet;
  25.  
  26. iNum -= iTmp;
  27.  
  28. if (iNum == 0)
  29. return sRet;
  30.  
  31. i *= 10;
  32. };
  33.  
  34. sRet= repeatString("M", iNum / 1000) + sRet;
  35. };
  36.  
  37. return sRet;
  38. }
  39.  
  40. public static void main (String args[]) {
  41. System.out.println("Dame un numero mayor que cero para convertirlo a un numero romano:");
  42.  
  43. int iMyNum = new Scanner(System.in).nextInt();
  44. System.out.println("El numero "+ iMyNum + " en romano es: " + decimalToRomano(iMyNum));
  45. }
  46. }

DoEvents! :P


Título: Re: [SRC] decimalToRomano
Publicado por: тαптяα en 22 Noviembre 2011, 20:20 pm
Me gusta este código muy bueno.


Título: Re: [SRC] decimalToRomano
Publicado por: RyogiShiki en 22 Noviembre 2011, 20:30 pm
Hola. Bueno, el código está muy bien, no le he visto errores hasta el momento. Pero algo que he notado, y claro está es tu estilo de programación, es solo una sugerencia. Y es que generalmente en Java no es muy común, y las recomendaciones sobre el lenguaje que hacen libros como por ejemplo Clean Code es evitar el uso de la notación húngara. Y usar CameCase con nombre extremadamente descriptivos, un buen ejemplo de esto son las APIs de Java. Como ves éste tipo de cosas van muy ligadas a la plataforma se que vienes de programar un montón de tiempo en sobre Windows con las APIs de este, y en ellas es muy común el uso de la notación Húngara. Bueno en Java eso no es muy popular. Claro que mis palabras no sean tomadas como una norma ni nada por el estilo, solo es una sugerencia amigable y los aspectos de estilo en la programación con Java. Un consejo nada más.

Y bueno al final de los bloques if o for o cualquiera no es necesario poner el punto y coma, no se si lo haces por gusto o constumbre, pero solo por si acaso lo comento.

Una última sugerencia es que para leer datos tal vez te resulte más útil (en ocasiones futuras y si se hace un uso más intensivo de la lectura por teclado) el uso de BufferedReader.

Saludos  


Título: Re: [SRC] decimalToRomano
Publicado por: тαптяα en 22 Noviembre 2011, 20:37 pm
Yo idento el código de la misma manera que él. Y me han enseñado que se identa así.



Título: Re: [SRC] decimalToRomano
Publicado por: RyogiShiki en 22 Noviembre 2011, 20:39 pm
Yo idento el código de la misma manera que él. Y me han enseñado que se identa así.

Yo no hablo de la identación, si no de la forma de nombrar las variables. después esto va a ser muy importante al programar métodos accesores y ligarlos a sus respectivos atributos.


Título: Re: [SRC] decimalToRomano
Publicado por: Psyke1 en 22 Noviembre 2011, 20:40 pm
Lo de la notación húngara es una costumbre que tomé con vb6, como tú bien dices, por lo poquísimo que he visto en Java no se usa, pero a mí me resulta muy útil a veces, sobretodo si tengo muchas variables. :)

Sé que podía omitir ese punto y coma, pero así me parecía que quedaba un poco más claro, ¿no crees? :P

¿BufferReader?
No lo he usado hasta ahora, voy a probar. Gracias. ;)

DoEvents! :P



Título: Re: [SRC] decimalToRomano
Publicado por: RyogiShiki en 22 Noviembre 2011, 20:42 pm
Bien, igual como dije es solo una sugerencia, y como dices no se suele ver eso en código Java. Y lo del punto y coma pues no lo había pensado de esa manera.

Otra cosa puede ser un typo, pero aclara por si las dudas es BufferedReader.

Saludos


Título: Re: [SRC] decimalToRomano
Publicado por: тαптяα en 22 Noviembre 2011, 20:43 pm
Yo no hablo de la identación, si no de la forma de nombrar las variables. después esto va a ser muy importante al programar métodos accesores y ligarlos a sus respectivos atributos.
Cierto, los nombres de las variables no son del todo descriptivos.


Título: Re: [SRC] decimalToRomano
Publicado por: madpitbull_99 en 22 Noviembre 2011, 20:55 pm
@тαптяαпсє:

Sólo con ver iTmp sabrás que se trata de un integer, o al ver sRet sabrás que es un string, es cierto que en Java no se usa, pero puede
resultar bastante útil.

@Delerice:

Lo que dice RyogiShiki, es usar Buffers, por ejemplo:

Código
  1. System.out.print("Introduce un número: ");
  2. int num = Integer.parseInt(in.readLine());
  3.  

Aunque hacerlo con scanner es más corto.



Título: Re: [SRC] decimalToRomano
Publicado por: Psyke1 en 22 Noviembre 2011, 21:08 pm
Ya veo...
¿Alguna ventaja en especial de una clase sobre otra? :huh:

Me veréis mucho por aquí, ahora que empecé con Java. :)
Yuju!

DoEvents! :P


Título: Re: [SRC] decimalToRomano
Publicado por: madpitbull_99 en 22 Noviembre 2011, 21:45 pm
Yo tampoco tengo mucha experiencia, pero BufferedReader está orientado a trabajar con streams, mientrar que scanner es más rápido a la hora de
realizar el parseo (por ejemplo .nextInt()).

A ver si alguien con más experiencia nos comenta las ventajas y desventajas de cada uno.




Título: Re: [SRC] decimalToRomano
Publicado por: RyogiShiki en 22 Noviembre 2011, 21:53 pm
Como dice madpitbull es básicamente su orientación.

Pero en mi opinión el BufferedReader tiene algunas ventajas, como por ejemplo modificación de tamaño de Buffer. Mientras un Scanner es más rápido puede fallar en la presición de la lectura. como por ejemplo dejar caracteres como '\n' "pegados" y saltar la próxima lectura, entonces debes usar un Scanner.skip(), o cosas por el estilo. El BufferedReader en cambio aunque lee todo como un string y es necesario parsear los datos no sufre de ese problema y es más exacto por decirlo de una manera. Además el BufferedReader al hacer uso de buffers variables es una gran opción también a la hora de leer archivos grandes o datos desde sockets.

Saludos


Título: Re: [SRC] decimalToRomano
Publicado por: BlackZeroX en 23 Noviembre 2011, 10:38 am
Me veréis mucho por aquí, ahora que empecé con Java. :)
Yuju!

Pues seremos 2... tocallo!¡.

Como ves la sintaxis no es la que nos debera preocupar... si no mejor dicho ese mundo de clases que contempla JAVA (preguntale a seba123neo seguro sabra mas)!¡.

* El codigo a mi manera de ver es bastante prolijo
* No se te vaya a ocurrir poner variables de 1 sola literal que no sean contadores...

Te recomiendan el CameCase (recuerda que los nombres breves son descriptivos hasta cierto punto asi que metele comentarios a cada declaracion, no tanto al proceso... no intentas enseñarle a nadie a programar o ¿si?) debido a que el sistema hungaro es como para identificar longitudes de bytes y tipo de variables (para eso yo lo ocupo mas que para otra cosa), pero se pueden MEZCLAR... para realizar adecuadamente los Cast... para tener una orientacion mas entendible a simple vista... por ejemplo podemos usar 2 o 3 caracteres en MINUSCULA al inicio (como siempre) y poner una descripcion breve pero consiza...

* En este lenguaje por se un poco parecido a java te daras igual que yo al inicio de topes xP...
* Te vas a dar un buen de topes cuando te metas a diseñar Forms... creeme.

Al igual que haces un *=  puedes hacer lo mismo con la linea:

Código
  1.  
  2. iNum = iNum - iTmp;
  3.  
  4.  

Código
  1. iNum -= iTmp;
  2.  

Te dare un CONSEJO independientemente d ela opinion de los demas...

Código
  1.  
  2. for (int x=0; x<3; x++){
  3.  
  4.  

* NUNCA DECLARES variables en los For... mejor DECLARA todas las variable e inicializalas al inicio del proceso/funcion igual como le haciamos en vb6... a mi parecer es mas correcto esto...
* Espero no vayas a ser amante del Try... catch

Dulces Lunas!¡.


Título: Re: [SRC] decimalToRomano
Publicado por: Psyke1 en 23 Noviembre 2011, 13:24 pm
Ok, gracias bro. ;)

DoEvents! :P


Título: Re: [SRC] decimalToRomano
Publicado por: Debci en 23 Noviembre 2011, 16:15 pm
Gracias de nuevo, por un excelente código, luego, con tu permiso, lo incluye al indice de temas interesantes.

Saludos


Título: Re: [SRC] decimalToRomano
Publicado por: тαптяα en 23 Noviembre 2011, 16:34 pm
Otro que está empezando JAVA, espero que nos sigamos viendo todos por aquí.

Saludos


Título: Re: [SRC] decimalToRomano
Publicado por: madpitbull_99 en 23 Noviembre 2011, 16:37 pm
Pues aquí tenéis a otro  :)



Título: Re: [SRC] decimalToRomano
Publicado por: BlackZeroX en 23 Noviembre 2011, 20:15 pm
@тαптяαпсє
Nos tendras que aguantar chavo.

Dulces Lunas!¡.