Java - Modificar valores en vector de objetos

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

Modificar valores en vector de objetos

Publicado por Carlos (5 intervenciones) el 11/06/2019 09:34:47
Hola, tengo un vector de objetos de la clase Ropa, quiero aplicar un descuento en el precio de la ropa cuya categoría decida el usuario, el problema que no puedo resolver es que me aplica el descuento a cada elemento del vector preguntando en cada iteración... yo lo que quiero es que me lo aplique a TODOS los elementos de la misma categoría,


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
public  double getPrecioDescuento() {
    Scanner teclado = new Scanner (System.in);
    double descuento;
    System.out.print("Ingrese el porcentaje de descuento: ");
    descuento = Double.parseDouble(teclado.nextLine());
 
    return this.precio * (descuento / 100);
 
}
 
//*************************METODO DEL VECTOR***************************************
 
private Vector<Ropa> vropa = new Vector<Ropa> (10,1);          //VECTOR
 
 
public void descuentoCategoria () {
    Scanner teclado = new Scanner(System.in);
    String categoria;
 
    System.out.print("Ingrese la categoría para descuento: ");
    categoria = teclado.nextLine();
 
    for (int i = 0; i < vropa.size(); i++) {
 
        if (vropa.elementAt(i).getCategoria().compareTo(categoria) == 0) {
            vropa.elementAt(i).Setprecio(vropa.elementAt(i).getPrecioDescuento());
            System.out.println(vropa.elementAt(i).getPrecio());
        }else{
            System.out.println("No existe esa categoria");
        }
    }
 
}
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
sin imagen de perfil
Val: 186
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Modificar valores en vector de objetos

Publicado por Juan (70 intervenciones) el 11/06/2019 11:26:36
Hola, por lo que entendí te modifica todas las categorías. lo que falla entonces es el IF donde comparas.
Usa mejor el equals.

El equals devuelve true si las cadenas son idénticas y false si no lo son.

Te quedaría de esta manera ese trozo de código:

1
2
3
4
5
6
if (vropa.elementAt(i).getCategoria().equals(categoria)) {
    vropa.elementAt(i).Setprecio(vropa.elementAt(i).getPrecioDescuento());
    System.out.println(vropa.elementAt(i).getPrecio());
}else{
    System.out.println("No existe esa categoria");
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificar valores en vector de objetos

Publicado por Carlos (5 intervenciones) el 11/06/2019 16:32:37
Hola Juan, no, la categoría (pantalón, camiseta, camisa, etc) la tengo definida como String, por eso utilizo el compareTo , si el usuario digita "pantalón" lo que quiero es que aplique el descuento a todos los pantalones dentro del Vector....
Igualmente al probarlo con equals tengo el mismo problema, tengo 3 objetos con la categoria pantalon y me pregunta por cada iteración el descuento a realizar...
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: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Modificar valores en vector de objetos

Publicado por Kabuto (1381 intervenciones) el 11/06/2019 16:55:29
Claro, porque has hecho que sea un método de la clase Ropa sea quien pida el descuento aplicable.

Por lo tanto, cada objeto Ropa del Vector que coincida con la categoría, serán quienes pidan dicho descuento

1
2
3
if (vropa.elementAt(i).getCategoria().compareTo(categoria) == 0) {
            vropa.elementAt(i).Setprecio(vropa.elementAt(i).getPrecioDescuento());
            System.out.println(vropa.elementAt(i).getPrecio());

Si tuvieras 100 objetos coincidentes, te lo pediría 100 veces...

No puede ser el propio objeto quien pida al usuario el descuento aplicable, esto inevitablemente provocará que por cada objeto se pida el dato al usuario.

Ha de pedirse desde el programa, por ejemplo, justo después de pedir la categoría. Y ya entonces dentro del bucle se le pasa a cada objeto para que lo aplique


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void descuentoCategoria () {
    Scanner teclado = new Scanner(System.in);
    String categoria;
 
    System.out.print("Ingrese la categoría para descuento: ");
    categoria = teclado.nextLine();
 
    System.out.print("Ingrese el porcentaje de descuento: ");
    double descuento = Double.parseDouble(teclado.nextLine());
 
    for (int i = 0; i < vropa.size(); i++) {
 
        if (vropa.elementAt(i).getCategoria().compareTo(categoria) == 0) {
            vropa.elementAt(i).Setprecio(vropa.elementAt(i).aplicaDescuento(descuento));
            System.out.println(vropa.elementAt(i).getPrecio());
        }else{
            System.out.println("No existe esa categoria");
        }
    }
 
}

Y este método podría aplicar el descuento

1
2
3
4
5
public void aplicaDescuento(double descuento) {
 
    this.precio = this.precio * (descuento / 100);
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificar valores en vector de objetos

Publicado por Carlos (5 intervenciones) el 11/06/2019 19:47:42
Excelente tu respuesta, me has clarificado el problema, muchas gracias !!
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: 11
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificar valores en vector de objetos

Publicado por Carlos (5 intervenciones) el 12/06/2019 17:19:54
Evidentemente el error viene por otro lado porque no logro hacer que solo aplique el descuento a los elementos de la categoría indicada, he probado con equals para comparar los Strings pero tampoco, tengo 4 objetos con diferentes categoría y me aplica el descuento a todos...
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: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Modificar valores en vector de objetos

Publicado por Kabuto (1381 intervenciones) el 12/06/2019 20:05:27
Sin duda la forma correcta de comparar Strings es con equals().

Prueba a, temporalmente, añadir varios System.out que te informen en pantalla de qué está pasando, qué se está comparando, qué resultado da esa comparación...
Algo de este estilo:

1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < vropa.size(); i++) {
 
    System.out.println("Categoria indicada por el usuario: " + categoria);
    System.out.println("Categoria de la ropa actual: " + vropa.elementAt(i).getCategoria());
    if (vropa.elementAt(i).getCategoria().equals(categoria)) {
        System.out.println("Ambas categorias son iguales. Se aplicará el descuento");
        vropa.elementAt(i).Setprecio(vropa.elementAt(i).aplicaDescuento(descuento));
        System.out.println(vropa.elementAt(i).getPrecio());
    }else{
        System.out.println("Las categorias no coinciden. No se aplicará descuento");
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificar valores en vector de objetos

Publicado por Carlos (5 intervenciones) el 13/06/2019 09:13:40
finalmente he visto la luz, no se muy bien que era lo que pasaba pero ahora si que funciona !, muchísimas gracias me has ayudado mucho !
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