Autor Tema: Ejercicio CU00688B herencia y polimorfismo java  (Leído 7576 veces)

evuz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Ejercicio CU00688B herencia y polimorfismo java
« en: 08 de Agosto 2014, 10:16 »
Hola,

Estoy siguiendo el curso de programación en java pero este es el primer ejercicio que posteo por aquí. El ejercicio no es exactamente como se pide en el enunciado ya que no creo algunas subclases. El motivo de esto es que comencé a hacer el ejercicio y lo fui ampliando por mi cuenta y viendo lo que se iba pidiendo pues se me iban ocurriendo cosas.

Las clases que tengo son:
-Envio de productos
-GestionProductos
-Interaccion
-ListaDeProductos
-Productos
-ProductosFrescos
-ProductosCongelados
-ProductosRefrigerados
-TestProductos

Veréis que tengo un problema para continuar y es que en la clase GestionProductos se crea un ArrayList llamado listaEnvios y cuando me pongo a mirar con el depurador veo que cuando añado un envio a esa lista este borra el anterior que estaba en la posición
  • , sobreescribiendo el envío creado anteriormente. Pero la intención es que se vayan creando envíos y añadiendo a la lista para poder a posteriori visualizar todos los envíos realizados.

A ver si alguno puede echarle un vistazo al codigo y ver donde está el error, a parte de alguna que otra sugerencia tanto en el estilo del código como en el programa en sí.

Muchas gracias.
Un saludo
« Última modificación: 31 de Agosto 2014, 10:58 por Alex Rodríguez »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2646
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #1 en: 08 de Agosto 2014, 10:49 »
Hola, el problema es que no veo el código ¡creo que olvidaste adjuntarlo!. Crea un archivo zip y dentro de él mete los archivos .java con el código. Luego en el editor del foro pulsa en Opciones Adicionales y adjunta el archivo, de esa manera podremos acceder al código. Otra opción es pegarlo usando el botón # del editor del foro entre las etiquetas [ code ] ... [ / code ] pero si es muy largo es preferible ponerlo como archivo adjunto como te he indicado. Salu2

evuz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #2 en: 08 de Agosto 2014, 11:19 »
Hola, el problema es que no veo el código ¡creo que olvidaste adjuntarlo!. Crea un archivo zip y dentro de él mete los archivos .java con el código. Luego en el editor del foro pulsa en Opciones Adicionales y adjunta el archivo, de esa manera podremos acceder al código. Otra opción es pegarlo usando el botón # del editor del foro entre las etiquetas [ code ] ... [ / code ] pero si es muy largo es preferible ponerlo como archivo adjunto como te he indicado. Salu2

Si, iba a adjuntar el archivo pero como siempre se me olvidó. Ya he subido el fichero .rar

Gracias por el aviso

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2646
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #3 en: 08 de Agosto 2014, 11:55 »
Hola, he empezado a mirar el código y lo primero que me llama la atención es la aparición de métodos y atributos static en clases como GestionDeProductos y EnvioDeProductos, lo que no parece normal ¿Por qué estás utilizando static en estas clases?

He mirado lo que indicas de un error pero no sé cómo localizarlo: haz una ejecución del programa y cópiame lo que vas introduciendo hasta que te salta el error, de esa manera podré tratar de hacer la misma ejecución y así ver lo mismo que te ocurre a tí.

Saludos

evuz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #4 en: 08 de Agosto 2014, 12:15 »
Hola, he empezado a mirar el código y lo primero que me llama la atención es la aparición de métodos y atributos static en clases como GestionDeProductos y EnvioDeProductos, lo que no parece normal ¿Por qué estás utilizando static en estas clases?

He mirado lo que indicas de un error pero no sé cómo localizarlo: haz una ejecución del programa y cópiame lo que vas introduciendo hasta que te salta el error, de esa manera podré tratar de hacer la misma ejecución y así ver lo mismo que te ocurre a tí.

Saludos

Los método static los utilizo para invocarlos desde la misma clase, por ejemplo si en la clase GestionProductos desde el método gestionarProductos quiero invocar a el método removeProducto, uso
Código: [Seleccionar]
removeProducto();


Si no pongo static me salta un error, por ese motivo uso los método static. ¿Alguna forma de hacerlo más correcta?

El error no es una excepcion que salte. Es viendolo desde el debugger.
Si entro en enviar y añado un producto, lo valido y regreso al menú, este pedido debería de haberse añadido a listaEnvio. Si lo miramos con el debugger en listaEnvio se encuentra este envio. Pero si hacemos otro envio, agregamos un producto, lo validamos y regresamos al menú inicial. En el depurador se ve que en listaEnvio seguimos teniendo sólo un producto, que es el último que hemos creado y que ha sobreescrito al anterior.

Se puede ver cuando el programa ejecuta esta parte de código, incluido en la clase GestionProductos

Código: [Seleccionar]
public static void presentacion () {
        Interaccion interactuar = new Interaccion ();
        EnvioDeProductos tmpE;
        String producto = null;
       
        while (producto == null) {
            producto = interactuar.responder("¿Con que clase de productos desea trabajar?\n"
                                        + "F - Productos frescos\n"
                                        + "R - Productos refrigerados\n"
                                        + "C - Productos congelados\n"
                                        + "E - Envios\n"
                                        + "EXIT - salir\n"
                                        + "Productos: ", 0);
            interactuar.mostrar("");
            if (producto.toUpperCase().substring(0,1).equals("F")) {
                producto = "productos frescos";
                gestionarProductos(producto, listaFrescos);
            } else if (producto.toUpperCase().substring(0,1).equals("R")) {
                producto = "productos refrigerados";
                gestionarProductos(producto, listaRefrigerados);
            } else if (producto.toUpperCase().substring(0,1).equals("C")) {
                producto = "productos congelados";
                gestionarProductos(producto, listaCongelados);
            } else if (producto.toUpperCase().equals("EXIT")) {
                break;
            } else if (producto.toUpperCase().substring(0,1).equals("E")) {
                String tmpMsg = "Introduce un nombre para el envío";
                tmpE = new EnvioDeProductos(interactuar.responder(tmpMsg), listaFrescos, listaCongelados, listaRefrigerados);
                tmpE.gestionEnvios();
                if (tmpE.getValidacion()) {
                    listaEnvios.add(tmpE.getListaEnvio());
                    interactuar.mostrar("Envio añadido");
                }
                producto = null;
            } else {
                interactuar.mostrar("No ha seleccionado un producto correcto, vuelva a seleccionar\n"); 
                producto = null;
            }
        }
    }

Espero haberme explicado bien.
« Última modificación: 08 de Agosto 2014, 13:11 por evuz »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2646
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #5 en: 08 de Agosto 2014, 13:07 »
Hola, he eliminado todas las declaraciones static en GestionProductos y en EnvioDeProductos y no obtengo ningún error, el programa funciona con normalidad. No veo motivo para declarar atributos y métodos static en esas clases. Revísalo porque creo que tienes alguna confusión con esto.

Lo del código no me queda claro. Pon una instrucción para que te muestre por pantalla los productos que tiene listaEnvio justo después de añadir el producto (por ejemplo: "listaEnvio contiene 3 productos que son: fresas, pimientos, limones"), pon un comentario //Aqui esta el problema y pega el código de la clase completa para que tanto yo como otras personas puedan revisarlo y tratar de determinar dónde está el problema. Ten en cuenta que tú llevas muchas horas dedicadas a ese código y sabes localizarlo todo bien, pero los demás no tenemos esa soltura ;)

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #6 en: 08 de Agosto 2014, 13:10 »
Hola he repasado tu ejercicio al igual que el compañero pienso que estas abusando muchísimo de la clausula static, así a grosso modo, la clausula static se suele usar en métodos que no requieren de atributos de la clase para trabajar. Normalmente se los métodos estáticos se suelen usar en clases útiles.

Por ejemplo la clase java.lang.Math, esta clase tiene todos sus métodos estáticos.
sin(seno), cos(coseno), pow(potencia),.....

cuando los vamos a usar lo hacemos sin la necesidad de crear ningún objeto de esa clase, es decir para usar un método de la clase Math lo hacemos de la siguiente forma:

Código: [Seleccionar]
Math.cos(25.2);

En cambio, si los métodos no fueran estáticos, habría que haber creado un objeto antes de poder usar el método, es decir, habría que haber echo:

Código: [Seleccionar]
Math matematicas=new Math();
matematicas.cos(25.2);

Esta explicación anterior es solo un ejemplo. La verdad que es un poco abstracto de explicar. Pero quédate en principio con que los métodos estáticos se usan principalmente, cuando el método no necesita de ningún atributo dentro de la clase para realizar su cometido. En el momento que use algún atributo es mejor crear métodos no estáticos.

repasando un poco mas a fondo tu ejercicio, me doy cuenta que has echo todo justamente al revés, has usado static donde no deberías y no lo has usado donde deberías. Por ejemplo en este método de la clase interacción:

Código: [Seleccionar]
public String responder () {
        Scanner iScanner = new Scanner (System.in);
        String entradaTeclado = iScanner.nextLine ();
       
        return entradaTeclado;
    }

En este método si hubiera sido recomendable usar static, ya que si te fijas, no utiliza ningún atributo de la clase para realizar su cometido.

Yo si fuera tu intentaría repetir el ejercicio intentando evitar lo mas posible el uso de static. Como te digo es algo complicado de explicar, espero que al menos hayas podido pillar algo.

Y bueno sobre lo que comentas que al añadir un producto a envío, se pierden los demás, no e podido reproducir este problema, a mi me añade bien los productos, intenta describir mejor en que punto se produce este error( e menú principal, en el menú de envíos, ... ) y te lo repaso para ver que puede estar sucediendo.

Aun así te sigo recomendando lo mismo, intentar repetirlo evitando usar static tan abusivamente.

Bueno y si tienes alguna duda, por aquí andamos. Un saludo!

Nota te adjunto una captura de la ejecución de tu programa para que veas que si que los añade.

evuz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #7 en: 08 de Agosto 2014, 13:35 »
El tema de los static, está solucionado el problema venía en que sólo borré antes un static de las clases y al estar las demás clases como static lo requería. Así que algún static pondría en un primer momento que luego me empezó a tirar errores. Quitandolos todos sin problemas. Aunque creo que ahora tengo el problema de cuando poner static y cuando no ponerlos. Tendré que investigar algo más sobre ellos.

Sobre el problema que os comento, os copio la ejecución del código.

Código: [Seleccionar]
Bienvenido al sistema de gestión de productos
¿Con que clase de productos desea trabajar?
F - Productos frescos
R - Productos refrigerados
C - Productos congelados
E - Envios
EXIT - salir
Productos: e

Introduce un nombre para el envío
Primer Envio
¿Qué quieres haces?
A - Agregar productos al envio
D - Borra un producto del envío
V - Ver productos del envío
OK - Validamos el pedido
R - regresar al menú anterior
Accion: a

Estos son los Productos que tenemos en stock
Productos frescos
1 - Producto: Fresas
Fecha de caducidad: 8-8-14
Numero de lote: L-625
Fecha de envasado: 30-07-14
País de origen: Lepe/Huelva

2 - Producto: Pepinos
Fecha de caducidad: 12-8-14
Numero de lote:  J-2253
Fecha de envasado: 30-07-14
País de origen: Marruecos

¿Desea agregar un producto? (S/N) n

Productos refrigerados
1 - Producto: Queso tierno
Fecha de caducidad: 7-8-14
Numero de lote: HK-524
Codigo de supervision: 12345-M

2 - Producto: Yogur
Fecha de caducidad: 16-8-14
Numero de lote: R-123
Codigo de supervision: 725-P

¿Desea agregar un producto? (S/N) s
¿Qué producto desea añadir?: 1
Ha añadido al envio Queso tierno
¿Quiere añadir otro producto? (S/N): n

Productos congelados
1 - Producto: Merluza
Fecha de caducidad: 10-9-15
Numero de lote: B-159
Temperatura de congelación: -18.0

2 - Producto: Sepia
Fecha de caducidad: 31-10-14
Numero de lote: V-112
Temperatura de congelación: -14.0

¿Desea agregar un producto? (S/N) n

Usted tiene ha añadido al envio los siguientes artículos
Queso tierno

¿Qué quieres haces?
A - Agregar productos al envio
D - Borra un producto del envío
V - Ver productos del envío
OK - Validamos el pedido
R - regresar al menú anterior
Accion: v


Usted tiene ha añadido al envio los siguientes artículos
Queso tierno
Quiere ver los artículos con más detalles:(S/N) n

¿Qué quieres haces?
A - Agregar productos al envio
D - Borra un producto del envío
V - Ver productos del envío
OK - Validamos el pedido
R - regresar al menú anterior
Accion: r

¿Va a salir sin validar el envio, está seguro? (S/N): n
¿Está seguro de que desea validar este envío? (S/N): s

Envio añadido
En la lista tenemos1 envios
¿Con que clase de productos desea trabajar?
F - Productos frescos
R - Productos refrigerados
C - Productos congelados
E - Envios
EXIT - salir
Productos: e

Introduce un nombre para el envío
segundo envio
¿Qué quieres haces?
A - Agregar productos al envio
D - Borra un producto del envío
V - Ver productos del envío
OK - Validamos el pedido
R - regresar al menú anterior
Accion: a

Estos son los Productos que tenemos en stock
Productos frescos
1 - Producto: Fresas
Fecha de caducidad: 8-8-14
Numero de lote: L-625
Fecha de envasado: 30-07-14
País de origen: Lepe/Huelva

2 - Producto: Pepinos
Fecha de caducidad: 12-8-14
Numero de lote:  J-2253
Fecha de envasado: 30-07-14
País de origen: Marruecos

¿Desea agregar un producto? (S/N) s
¿Qué producto desea añadir?: 1
Ha añadido al envio Fresas
¿Quiere añadir otro producto? (S/N): n

Productos refrigerados
1 - Producto: Queso tierno
Fecha de caducidad: 7-8-14
Numero de lote: HK-524
Codigo de supervision: 12345-M

2 - Producto: Yogur
Fecha de caducidad: 16-8-14
Numero de lote: R-123
Codigo de supervision: 725-P

¿Desea agregar un producto? (S/N) n

Productos congelados
1 - Producto: Merluza
Fecha de caducidad: 10-9-15
Numero de lote: B-159
Temperatura de congelación: -18.0

2 - Producto: Sepia
Fecha de caducidad: 31-10-14
Numero de lote: V-112
Temperatura de congelación: -14.0

¿Desea agregar un producto? (S/N) n

Usted tiene ha añadido al envio los siguientes artículos
Fresas

¿Qué quieres haces?
A - Agregar productos al envio
D - Borra un producto del envío
V - Ver productos del envío
OK - Validamos el pedido
R - regresar al menú anterior
Accion: v


Usted tiene ha añadido al envio los siguientes artículos
Fresas
Quiere ver los artículos con más detalles:(S/N) n

¿Qué quieres haces?
A - Agregar productos al envio
D - Borra un producto del envío
V - Ver productos del envío
OK - Validamos el pedido
R - regresar al menú anterior
Accion: r

¿Va a salir sin validar el envio, está seguro? (S/N): n
¿Está seguro de que desea validar este envío? (S/N): s

Envio añadido
En la lista tenemos1 envios
¿Con que clase de productos desea trabajar?
F - Productos frescos
R - Productos refrigerados
C - Productos congelados
E - Envios
EXIT - salir
Productos:

He puesto una línea en la que dice en la lista tenemos X envios. Y se ve como al añadir el segundo envío aparece de nuevo:
Código: [Seleccionar]
En la lista tenemos1 envios
Vuelvo a subir el código sin los static y con esta línea añadida. listaEnvios, se gestiona desde la clase GestionProductos y se añaden los envios en el método gestionarProductos, concretamente por la línea 65.

Gracias a los dos, voy investigando con los static.

Edito: creo que he dado con el sentido de static, dongo al advertirme de donde sí debería de static creo que me ha abierto los ojos. Voy declarando por cada método
Código: [Seleccionar]
Interaccion interactuar = new Interaccion()

y partiendo de aquí, ya usaba los método de la clase Interaccion de esta forma
Código: [Seleccionar]
interactuar.mostrar(msg);
Pero si declaro los método de la clase Interaccion como static no necesito declarar el objeto interactuar, sino que puedo usar los métodos static de esta forma
Código: [Seleccionar]
Interaccion.mostrar(msg)
¿Estoy en lo cierto?
« Última modificación: 08 de Agosto 2014, 13:43 por evuz »

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #8 en: 08 de Agosto 2014, 14:46 »
Otro pdf...puff

Si, en cuanto a la forma de realizar la llamada al método si, estas en lo cierto.

Pero ten paciencia con el tiempo sabrás identificar cuando usar static y cuando no. Mi recomendación en principio es:

-Usa static en un método  cuando dentro de ese método no se hace uso de ningún atributo de la clase a la cual pertenece el método.
-No uses static cuando dentro del método haya alguna referencia a un atributo de la clase.

Por ejemplo, imagina que tenemos la siguiente clase:

Código: [Seleccionar]
public class Prueba{
    public String atributoClase;
public Prueba(String param){
this.atributoClase=param;
}
    public String imprime1(){
        System.out.println(atributoClase);
    }
     public static String imprime2(String cadena){
         System.out.println(cadena);
     }
}

Bueno fíjate en el ejemplo anterior, simplemente es una clase con un atributo(atributoClase) y dos métodos(imprime1() y imprime2(String cadena)).

Como puedes observar el primer método hace uso de un atributo de la clase, por eso no es recomendable crearlo como estático, ya que para eso también habría que convertir el atributo a static y otras implicaciones que con el tiempo aprenderás. Para ejecutar este método tendríamos que proceder como sigue:

Código: [Seleccionar]
public class TestPrueba{
public static void main(String[] arg){
Prueba p=new Prueba("hola"); //creamos el objeto de la clase prueba.
p.imprime1();  //llamamos al método no estático ¡a través! del objeto anteriormente creado.
}
}

Por otro lado, el segundo método(imprime2(String cadena)) recibe una cadena por parámetro y es lo único que necesitará el método para realizar su cometido, al no hacer uso de ningún atributo de la clase, podemos crearlo como estático, ya al no hacer uso de ningún atributo de la clase, no es necesario crear un objeto para inicializar estos atributos, ya que el método no requiere de ninguno para llevar a cabo su cometido. Para ejecutar este método se procedería así:

Código: [Seleccionar]
public class TestPrueba2{
public static void main(String[] arg){
Prueba.imprime2("hola");  // llamamos al método estático ¡Directamente! con el nombre de la clase y le decimos que elementos va a usar para trabajar . */
}
}

Esto es lo mas básico en cuanto a la clausula static, aunque hay mas implicaciones por detrás que si me pongo a contarte te aburriría.

Si mas o menos has entendido esto y eres capaz de detectar cuando usar el static y cuando no, creo que es mas que suficiente de momento.
Conforme avances y trabajes te será mas sencillo usarlo.

----------------------------------------------------------------------------------------------------------------------
Ahora, por otro lado, sobre lo del problema que te esta dando, bueno, la verdad que el codigo es bastante extenso y en OO cuesta seguir las trazas, pero a ver te explico lo que yo creo que esta pasando y a ver si puede ser eso.

Tu cuando le das a envíos  empiezas a crear una lista de productos, y cuando el usuario termina de añadir productos y valida el envío, esa lista que estabas creando, la añades a otra lista, con lo cual ese envío queda confirmado, creo que lo que te falta a ti es un par de métodos:

1.- Un método para mostrar la lista de envíos, la cual tendrá X listas de productos.(Leer nota de edición).
2.- Un método para poder modificar alguna de las listas de productos que ya esta añadida en la lista de envíos.

Pero claro tu cada vez que le das a envíos, creas una nueva lista de productos y cuando acabas la añades a la lista de envíos. Cuando vuelves a darle a envíos, creas una lista de productos nuevas, que al finalizar, también añades a la lista de envíos. Pero eso, te falta el método para poder ver, todo lo que hay en la lista de envíos.

Me he liado un poco pero espero que me hayas entendido mas o menos.

Bueno, creo que nada mas, siento la extensión de este post, pero cuando me pongo a escribir, por mucho que intento explicar siempre creo que o no queda claro o me faltan cosas, de ahí que haya tanto texto. Bueno pos nada a ver si lo consigues arreglar.

Nota de edición: Estoy tan aburrido que he estado mirando mas a fondo y me he dado cuenta que listaEnvios es una lista de productos, entonces claro, cuando se empieza un pedido y se valida, supongo que lo que harás(No he podido encontrar donde lo haces) será decir que la listaEnvios sea igual a la lista que acabamos de validar. Lo que yo creo que tu querías hacer era una lista de listas de productos, así:

Código: [Seleccionar]
ArrayList<ListaDeProductos> listaEnvios= new ArrayList();
y cada vez que terminarás de rellenar una lista de productos, añadir esta lista a la lista de envíos recientemente validada, así:

Código: [Seleccionar]
listaEnvios.add(listaProductosTemporal);

 Con lo cual, tendrías una lista con todos los pedidos que se hayan validado. Pero como listaEnvios es una ListaDeProductos, cada vez que el usuario rellena una lista y la validas, sustituyes lo que había en listaEnvios por esa nueva lista, y por eso se pierde.

La verdad que creo que se que es lo que querías hacer pero no se si me explico bien, bueno a ver si con lo que te escrito hay algo que sirva.
« Última modificación: 08 de Agosto 2014, 16:06 por dongo »

evuz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #9 en: 08 de Agosto 2014, 16:32 »
Muchas gracias por la explicación dongo. No te preocupes si salen post más largos de la cuenta se leen y se entienden mejor, creo que tengo algo más claro cuando usar static.

Lo que comentas en la edición es listaEnvio de la clase EnvioProducto, esa trabaja bien. El problema está en la listaEnvios de GestionProductos. Perdón por los nombres practicamente iguales.

Como bien comentas, en EnvioProductos voy creando una lista con productos que se van añadiendo a esa lista. Una vez que es envío se valida. En la clase GestionProductos en la línea 65 si el envío está validado este se añade a listaEnvios.
El problema está en que fijate en la ejecución que puse antes.
Empiezo a crear una lista, le añado productos, la valido y salgo. Aparece:
Código: [Seleccionar]
Envio añadido
En la lista tenemos1 envios

Luego hago el mismo procedimiento, creo un nuevo envío, lo valido y cuando salgo aparece de nuevo
Código: [Seleccionar]
Envio añadido
En la lista tenemos1 envios
Es decir, o no se añade este último elemento a listaEnvios(GestionProductos) o este último elemento sobreescribe al anterior que estaba. Con el debugger veo que lo que hace es la segunda opción se sobreescribe el elemento.

PD: No se si al modificar los post se pierden los archivos adjunto o volví a olvidar adjuntar los ficheros corrigiendo los static

Edito: encontre el gazapo, en la línea 38 estaba definiendo
Código: [Seleccionar]
EnvioDeProductos tmpE;que luego inicializaba el objeto en la línea 63 y este era el objecto que yo modificaba y agregaba a la lista. Pues he tenido que definirlo e inicializarlos a la vez en línea 63, para que al salir del if se destruya el objeto.

Gracias por la ayuda!
« Última modificación: 08 de Agosto 2014, 18:36 por evuz »

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #10 en: 08 de Agosto 2014, 17:13 »
vaa vaaa que estaba en gestionProductos la lista de lista, ejk claro con tanto código cuesta...Pues a ver llevo diez minutos mirando y creo que he dado con tu error, a ver tu cada vez que llamas al metodo:

Código: [Seleccionar]
public void addEnvio() {
        Interaccion interactuar = new Interaccion();
        GestionProductos gestion = new GestionProductos();
        String msgView = "¿Desea agregar un producto? (S/N)";
        String agregar = null;
.....

Si te fijas en la segunda linea, siempre estas creando un GestionPorductos nuevo, entonces no se esta manteniendo el que tenias, en cada vez que el user valida, tu creas un GestionProductos, la siguiente ves, en lugar de coger el GestionProductos que creaste la primera vez, creas uno nuevo, y el anterior se pierde.

Para resolverlo, deberías crear un atributo en la clase EnvioDeProductos de tipo GestionProductos, y en lugar de crear un objeto GestionProductos cada vez que llamas al método addEnvio, crea uno al inicio como atributo de la clase y usa este atributo en lugar de crear uno cada vez. Así se mantendrá el mismo GestionProductos durante toda la ejecución.

Bueno a ver si pude ser esa la causa, jeje.

evuz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #11 en: 08 de Agosto 2014, 18:40 »
Edité el comentario de antes, ya encontré el error, me autocito

Edito: encontre el gazapo, en la línea 38 estaba definiendo
Código: [Seleccionar]
EnvioDeProductos tmpE;que luego inicializaba el objeto en la línea 63 y este era el objecto que yo modificaba y agregaba a la lista. Pues he tenido que definirlo e inicializarlos a la vez en línea 63, para que al salir del if se destruya el objeto.

Gracias por la ayuda!

Dongo, lo que tu comentas creo que no debería afectar. Ya que ese objeto sólo lo utilizo para crear la lista de los productos por tipo y una vez que salgo de ese método se elimina ese objeto ¿cierto?

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #12 en: 08 de Agosto 2014, 18:49 »
jajaja estupendo, la verdad que entre tanto código y ademas tanta lista cuesta, pero una de las mejores formas de aprender es encontrando errores de este tipo, enhorabuena. Pero un consejos:

Intenta usar separadores en los programas de consola en plan:

Código: [Seleccionar]
system.out.println("____________________________");
system.out.println("titulo o cabeceras");
system.out.println("____________________________");

Será mas sencillo interactuar con el programa. Bueno pues nada, a seguir adelante.

CarloAmador

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #13 en: 08 de Agosto 2014, 21:58 »
alguien tendrá ya el programa completo??? me interesa saber como esta estructurado completamente, gracias!!!

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Ejercicio CU00688B
« Respuesta #14 en: 08 de Agosto 2014, 22:29 »
hola Carlos, pues si te fijas en el primer mensaje ahí están adjuntados los de evuz, pero...

Si estas empezando, ¿de que te sirve cogerlos hechos?

Si lo que te interesa es la estructura, bueno debes comprender que es de gente que esta empezando.

Aun asi si tienes problemas con tu ejercicio, si quieres, péganos el código, e intentaremos ayudarte.

Un saludo!


« Última modificación: 31 de Agosto 2014, 10:57 por Alex Rodríguez »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".