Foro de elhacker.net

Programación => Java => Mensaje iniciado por: splendid37 en 18 Noviembre 2017, 12:58 pm



Título: Enviar línea de datos con comas a constructor.
Publicado por: splendid37 en 18 Noviembre 2017, 12:58 pm
Hola.

Tengo la siguiente duda de como puedo enviar los datos a un constructor mediante el siguiente formato con Scanner : '2.3,4,palabra'

Código
  1.  
  2.    // Constructor
  3.  
  4.    public Producto(double precio, int cantidad, String articulo) {
  5.                this.precio = precio;
  6.                this.cantidad = cantidad;
  7.                this.articulo = articulo;
  8.            }
  9.  
  10.  

Código
  1.  
  2.    // Objeto
  3.  
  4.    Scanner entrada=new Scanner(System.in);
  5.  
  6.    Producto producto1 = new Producto();
  7.  
  8.  

¿Como puedo introducir la línea '2.3,4,palabra' en scanner y enviarla al constructor?

Por separado si sé hacerlo parámetro a parámetro pero no veo la forma de hacerlo en una línea sola con los datos separados por parámetros.

Gracias, Saludos.


Título: Re: Enviar línea de datos con comas a constructor.
Publicado por: ivancea96 en 18 Noviembre 2017, 14:52 pm
No hay una forma de hacerlo así en 1 línea.
Realmente, no es necesario a la hora de hacer estos programas.

Ahora bien, tienes la opción de crear una función tipo "create<Producto>(entrada)", que lea la línea, acceda al constructor de la clase por reflection y trate de inferir los argumentos a partir de los constructores de la clase y de la línea leída.

Esto no es tan sencillo, así que mi recomendación es que lo evites. No es necesario complicar tanto un programa.


Título: Re: Enviar línea de datos con comas a constructor.
Publicado por: HardC0d3 en 19 Noviembre 2017, 05:16 am

La única forma que se me ocurre (muy costosa), es recibir en el constructor un único parámetro String, luego trocear la cadena con el método split() con separador de campos ','  (coma), convertir las Strings al tipo apropiado y asignar cada valor de la posición del vector a tus variables de clase.

Pero es mejor que lo hagas de la forma convencional y sin complicaciones.