Java - Ayuda con las clases y objetos en java

 
Vista:
sin imagen de perfil
Val: 15
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con las clases y objetos en java

Publicado por Meneth (7 intervenciones) el 14/01/2020 11:57:10
Hola
Tengo problemas con las clases y objetos en java y agredecería si alguien pudiese ayudarme.
Tengo que hacer una aplicación de una tienda y necesito hacer un método que muestre el nombre y los precios de 5 productos en una especie de tabla.
No sé como hacer para que me muestre variables de tipo String con los nombres de los productos y los precios de tipo double en el mismo método.
Se supone que es algo sencillo, pero tengo problemas para entender estas cosas en java.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Franklin
Val: 515
Bronce
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con las clases y objetos en java

Publicado por Franklin (140 intervenciones) el 14/01/2020 13:33:38
Crea una clase tipo Producto, defines sus valores y luego tomas sus valores con los metodos, sería algo tal que así.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class productos{
 
    String nombre;
    Double precio=0;
    int igv=0;//iva o como se llame el impuesto (opcional)
    Double result=0; // para calcular precio con  igv
 
    public productos (String nombre, Double precio, int igv) { // COnstructor
        this.nombre = nombre;
        this.precio = precio;
        this.igv = igv;
 
    }
    public void calcularIgv(){
    if(igv != 0 && precio != 0){
    result = precio / igv;
    }
    }
 
    public String getNombre(){
     return this.nombre;
    }
 
    public Double getPrecio(){
    return this.precio;
    }
 
    public Double getPrecioconIGV(){
    return result;
    }
 
}




Sería una manera de hacerlo, aunque puedes refinirlo como un arreglo en caso de ser varios en simultaneo pero mas o menos sigues la idea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 2.268
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con las clases y objetos en java

Publicado por Kabuto (568 intervenciones) el 14/01/2020 14:26:51
Para combinar String con double, una forma de solucionarlo es convertirlo todo a String.

Para ello puedes aprovechar el método llamado toString(), que habitualmente se usa para devolver un String con el que mostrar en pantalla los atributos que consideremos más descriptivos de dicha clase.
Este método lo heredan TODAS las clases escritas en Java y viene de la clase Object (Object es la superclase suprema de todas las clases Java)

Dicho método, podemos usarlo o no, según nos convenga. En caso de querer usarlo, nos conviene "sobreescribirlo" (override) para que se comporte según las necesidades de la clase que estamos creando.

Para una clase Producto con atributos nombre y precio, podemos querer construir y devolver un String con ambos datos.
Por ejemplo:

1
2
3
4
@Override
	public String toString() {
		return "Nombre: " + nombre + " Precio: " + precio " $");
	}
Eso ya nos devuelve un String con ambos datos juntos para ser mostrados en pantalla.

Si además queremos que sea presentado en pantalla con un mínimo de elegancia, podemos aplicar algo de formato a ese String.
Podemos hacer que el nombre siempre ocupe en pantalla una misma cantidad de caracteres, así cuando saquemos un listado de productos los datos salen tabulados a un mismo ancho.
Y también podemos hacer que el valor double salga redondeado siempre a dos decimales, así evitamos que por ejemplo nos salgan precios en pantalla tipo 23,666666667

Esto lo podemos hacer ayudándonos con el método String.format()

1
2
3
4
@Override
	public String toString() {
		return String.format("%20s -- %.2f $", nombre, precio);
	}

String.format() es muy útil para mostrar datos formateados y tiene muchas posibilidades. Si buscar por Internet verás decenas de ejemplos mostrando sus posibilidades.
En este caso, el símbolo % es un comodín donde se insertarán por orden las variables que ponemos a continuación de la cadena.
Con %s le decimos que ahí vamos a meter un String, la variable nombre en este caso.
Con %20s además le estamos diciendo que queremos que ese String ocupe 20 espacios. Si el String tiene menos letras, lo rellenará con espacios.

Con %f le decimos que ahí pondremos un valor real con decimales (floating point), ya sea double o float
Con %.2f además le indicamos que queremos que lo redondee a dos decimales.

Así que nuestra clase Producto, versión simplificada para este ejemplo, podría ser esta:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Producto {
 
	private String nombre;
	private double precio;
 
	public Producto(String nombre, double precio) {
		this.nombre = nombre;
		this.precio = precio;
	}
 
	@Override
	public String toString() {
		return String.format("%20s -- %.2f $", nombre, precio);
	}
}

Luego, en la clase principal main, podemos crear un ArrayList de objetos Producto y luego mostrar un listado de ellos.
El listado en pantalla puede tener un título/cabecera al que aplicaremos también formato (con printf() en este caso ) similar al aplicado a la clase Producto, para que todo salga bien tabulado en pantalla.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.ArrayList;
 
public class Tienda {
 
	private static ArrayList<Producto> productos = new ArrayList<Producto>();
 
	public static void main(String[] args) {
 
		crearProductos();
		mostrarProductos();
 
	}
 
	/**
	 * Método para crear productos
	 */
	private static void crearProductos() {
		productos.add(new Producto("Lavavajillas", 1.75));
		productos.add(new Producto("Quitagrasas", 2.8));
		productos.add(new Producto("Insecticida", 4.25));
		productos.add(new Producto("Lija", 0.6));
		productos.add(new Producto("Cepillo de Raices", 4.5));
		productos.add(new Producto("Cinta Adhesiva", 2.25));
		productos.add(new Producto("Esponja", 0.8));
	}
 
	/**
	 * Método para mostrar listado de productos en pantalla.
	 * A la cabecera se le aplica un formato similar al aplicado
	 * en el método toString() de la clase Producto.
	 */
	private static void mostrarProductos() {
		System.out.println("LISTADO DE PRODUCTOS:\n");
		System.out.printf("%20s    %s\n", "Nombre", "Precio");
		System.out.printf("%20s    %s\n", "------", "------");
		for (Producto p: productos)
			System.out.println(p); //Aquí estamos llamando a toString()
								   //pero no hace falta ponerlo dentro de println()
	}
 
}

Si ejecutamos este código, sale esto en pantalla:

1
2
3
4
5
6
7
8
9
10
11
LISTADO DE PRODUCTOS:
 
              Nombre    Precio
              ------    ------
        Lavavajillas -- 1,75 $
         Quitagrasas -- 2,80 $
         Insecticida -- 4,25 $
                Lija -- 0,60 $
   Cepillo de Raices -- 4,50 $
      Cinta Adhesiva -- 2,25 $
             Esponja -- 0,80 $


Esta podría ser una forma de hacerlo, ya depende de las clases que tenga tu programa.

Si por ejemplo tuvieras otra clase intermedia que se encargase de gestionar los objetos de la clase Producto, sería esta clase quien debería construir el listado y encargase ella de aplicar formato, en cuyo caso, le iría mejor pedirle a la clase Producto que le devolviera los atributos por separado (getNombre(), getPrecio()) y con ellos construir el String formateado.

Siempre hay varias formas de alcanzar un mismo objetivo, espero que este ejemplo te sirva al menos para tener nuevas ideas.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 15
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con las clases y objetos en java

Publicado por Meneth (7 intervenciones) el 14/01/2020 15:33:45
Ante todo muchas gracias por responder
Probaré lo que me habéis comentado, pero ya digo, tengo un cacao mental curioso a la hora de entender estas cosas en java, ya que soy novato en esto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar