Java - CarroDeCompras

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

CarroDeCompras

Publicado por winters (7 intervenciones) el 03/07/2020 04:45:31
Ayuda. En la clase Orden me sale error en los metodos, como lo modificaria?. Y como lo imprimiria en el main? GRACIAS.

1.-
1
2
3
4
5
6
7
8
9
10
11
12
public class Oferta {
    public float descuento;
 
    public Oferta(float des){
        descuento=des;
    }
 
    public float calcularPrecioFinal(float precio){
        return 0;
 
    }
}

2.-
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
public class Orden {
    private ICarritoDeCompras carrito;
    private float igv;
    private Oferta oferta;
 
    public Orden(ICarritoDeCompras cart, float salesTax){
        carrito= cart;
        igv=salesTax;
    }
 
    public void setOferta(Oferta oferta){
 
    }
 
    public float OrdenTotal(){
        float cartTotal=0;
        for(int i=0; i<carrito.items.length;i++){
            cartTotal+= carrito.items[i].precio*carrito.items[i].cantidad;
        }
        cartTotal+=cartTotal*igv;
        return cartTotal;
    }
 
    public float OrdenTotalFinal(){
        return 0;
    }
}


3.-
1
2
3
public interface ICarritoDeCompras {
    public InterfaceItem getItems();
}


4.-
1
2
3
4
5
6
7
8
9
10
11
12
public class CarritoDeCompras implements ICarritoDeCompras{
    public InterfaceItem[] items;
 
    public CarritoDeCompras(InterfaceItem i[]){
        items=i;
    }
 
    public InterfaceItem getItems(){
        return null;
 
    }
}
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 Rodrigo
Val: 1.591
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por Rodrigo (421 intervenciones) el 03/07/2020 04:54:57
Sugiero que incluyas los errores que te salen. Decir que "te sale error' no ayuda a ayudarte.
El error es en alguna linea especifica?
Cual es el mensaje?
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: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por Winters (7 intervenciones) el 03/07/2020 05:53:10
En el método OrdenTotal en la clase Orden. Me sale error en los ítem. Y como haría en main porfa
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 Rodrigo
Val: 1.591
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por Rodrigo (421 intervenciones) el 03/07/2020 05:59:07
Cual es el mensaje del error?
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.687
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por Kabuto (705 intervenciones) el 03/07/2020 19:49:39
Necesitamos saber cuál es el error en concreto.

De todos modos, veo algo que me parece raro.

En la clase Orden declaras como atributo un objeto ICarritoDeCompras, pero esto no es una clase, es una interface.

1
2
3
4
public class Orden {
    private ICarritoDeCompras carrito;
    private float igv;
    private Oferta oferta;

Quizás ese atributo debería ser CarritoDeCompras (sin la I delante) que es la clase que implementa dicha interface.
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: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por winters (7 intervenciones) el 03/07/2020 22:03:38
OK hice eso. En el for del metodo OrdenTotal de la clase Orden, me sale error en precio y cantidad.
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.687
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por Kabuto (705 intervenciones) el 03/07/2020 22:23:25
Precio y cantidad.

Parecen atributos de una clase, o de una interface, llamada InterfaceItem
¿Cómo es esa clase/interface?
¿Dónde está escrita?

No tenemos el código completo, sería interesante que compartieras todo el código que estés usando.
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: 14
Ha aumentado su posición en 8 puestos en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por winters (7 intervenciones) el 04/07/2020 03:27:46
Ok.Reeplantee el codigo. El codigo compila bien. Pero agregue una nueva Clase Oferta, la cual quiero que aplique un descuento a los productos. La clase oferta la vincule con la Clase Orden, como aplicaria los descuentos en los metodos setOferta y OrdenTotal y como lo haria en el main.

1.-
1
2
3
4
5
6
7
public class CarritoDeCompras {
    public Item[] items;
 
    public CarritoDeCompras(Item i[]){
        items=i;
    }
}

2.-
1
2
3
4
5
6
7
8
9
10
11
public class Categoria {
    private String nombre;
 
    public Categoria(String nomb){
        nombre=nomb;
    }
 
    public String toString(){
        return "NomCat:"+nombre;
    }
}

3.-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Item extends Producto{
    public float precio;
    public int cantidad;
 
    public Item(float p, int c,int i, String nom, float pre, String nomb){
        super(i,nom,pre,nomb);
        precio=p;
        cantidad=c;
    }
 
    public String toString(){
        return super.toString()+"PrecItem:"+ precio+"CantItem:"+cantidad;
    }
}

4.-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Orden {
    private CarritoDeCompras carrito;
    private float igv;
    private Oferta oferta;
 
    public Orden(CarritoDeCompras cart, float salesTax){
        carrito=cart;
        igv= salesTax;
    }
 
    public void setOferta(Oferta oferta){
 
    }
 
    public float OrdenTotal(){
        float cartTotal=0;
        for(int i=0; i<carrito.items.length;i++){
            cartTotal+=carrito.items[i].precio*carrito.items[i].cantidad;
        }
        cartTotal+=cartTotal*igv;
        return cartTotal;
    }
}

5.-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Producto extends Categoria{
    private int ID;
    private String nombre;
    private float precio;
 
   public Producto(int i, String nom, float pre, String nomb){
       super(nomb);
       ID= i;
       nombre= nom;
       precio= pre;
  }
   public String toString(){
        return super.toString()+"IDPro:"+ID+"NomProd:"+nombre+"PrecProd:"+precio;
   }
}

6.-
1
2
3
4
5
6
7
8
9
10
11
public class Oferta {
    float descuento;
 
    public Oferta(float d){
        descuento=d;
    }
 
    public float calcularPrecioFinal(float precio){
        return 0;
    }
}

7.-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Compras {
 
    public static void main(String[] args) {
        // TODO code application logic here
    Item i1= new Item(10,5,00120,"AB",30,"VVV");
    Item i2= new Item(20,2,00100,"AC",20,"CCC");
    Item i3= new Item(5,10,00150,"AD",40,"DDD");
    Item [] items={i1,i2,i3};
 
    System.out.println(i1);
    System.out.println(i2);
    System.out.println(i3);
 
    CarritoDeCompras cc= new CarritoDeCompras(items);
    Orden ord=new Orden(cc,0.18f);
    System.out.println("El costo total de la orden es:"+ord.OrdenTotal());
    }
}
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.687
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por Kabuto (705 intervenciones) el 04/07/2020 19:43:33
Vale.
Para aplicar descuento quizás no habría sido necesario crear una clase Oferta, siendo suficiente haber usado un atributo float en la clase Orden.
Pero bueno, ya que la tenemos escrita, usémosla.

Supongo que los descuentos quieres aplicarlos en porcentajes, ¿no? ..5% descuento, 15%, 33.3%...
Entonces lo primero es completar el método de la clase Oferta que aplicar este % de descuento.
1
2
3
4
5
6
7
8
9
10
11
12
public class Oferta {
 
    float descuento;
 
    public Oferta(float d){
        descuento=d;
    }
 
    public float calcularPrecioFinal(float precio){
        return precio - (precio * descuento / 100);
    }
}

Luego en la clase Orden, completamos el setter del objeto Oferta.
Y ahora toca decidir si quieres que el descuento se aplique a través del método OrdenTotal(), de modo que siempre salga el calculo del coste con la oferta aplicada; o tal vez prefieras un segundo método para mostrar el costo ofertado y así tener ambas formas de calcular el costo: ofertado y sin oferta.

Yo lo pongo aquí con los dos métodos. El método que calcula el costo ofertado, es muy simple, llama al método que le hemos escrito a la clase Oferta y le pasamos el resultado del costo que calcula OrdenTotal(), para que le aplique el descuento de oferta.

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
ublic class Orden {
 
    private CarritoDeCompras carrito;
    private float igv;
    private Oferta oferta;
 
    public Orden(CarritoDeCompras cart, float salesTax){
        carrito=cart;
        igv= salesTax;
    }
 
    public void setOferta(Oferta oferta){
    	this.oferta = oferta;
    }
 
    public float OrdenTotal(){
        float cartTotal=0;
        for(int i=0; i<carrito.items.length;i++){
            cartTotal+=carrito.items[ i].precio*carrito.items[i ].cantidad;
        }
        cartTotal+=cartTotal*igv;
        return cartTotal;
    }
 
    public float totalConOferta() {
    	return oferta.calcularPrecioFinal(OrdenTotal());
    }
 
}


Luego en el main(), añadimos un par de líneas para aplicar una oferta y que nos muestre ambos costos, sin oferta primero y luego con oferta.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Compras {
 
	public static void main(String[] args) {
        // TODO code application logic here
    Item i1= new Item(10,5,00120,"AB",30,"VVV");
    Item i2= new Item(20,2,00100,"AC",20,"CCC");
    Item i3= new Item(5,10,00150,"AD",40,"DDD");
    Item [] items={i1,i2,i3};
 
    System.out.println(i1);
    System.out.println(i2);
    System.out.println(i3);
 
    CarritoDeCompras cc= new CarritoDeCompras(items);
    Orden ord=new Orden(cc,0.18f);
    System.out.println("El costo total de la orden es:"+ord.OrdenTotal());
 
    //Aplicamos descuento de un 10%
    ord.setOferta(new Oferta(10f));
    System.out.println("El costo total con oferta es: " + ord.totalConOferta());
    }
 
}

Así, en pantalla tenemos este resultado:
1
2
3
4
5
NomCat:VVVIDPro:80NomProd:ABPrecProd:30.0PrecItem:10.0CantItem:5
NomCat:CCCIDPro:64NomProd:ACPrecProd:20.0PrecItem:20.0CantItem:2
NomCat:DDDIDPro:104NomProd:ADPrecProd:40.0PrecItem:5.0CantItem:10
El costo total de la orden es:165.2
El costo total con oferta es: 148.68
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 Rodrigo
Val: 1.591
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

CarroDeCompras

Publicado por Rodrigo (421 intervenciones) el 04/07/2020 03:21:20
No existe problema alguno en declarar un campo como interfaz.

Sospecho que el problema esta en intentar acceder a campos de una interface, como precio y cantidad.
Eso es mas raro.
O bien la interface indica metodos para acceder a valores, y se usan estos, o bien se hace un cast antes de acceder al tipo exacto.
Mejor lo primero.
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