Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Alex Rodríguez

Páginas: 1 ... 49 50 51 52 53 [54] 55 56 57 58 59 ... 93
1061
Hola Raga como el ejercicio está perfecto no tengo nada que pueda indicar a mejorar, por eso lo que voy es a destacar las cosas que están muy bien:

La definición del método equals en la superclase y su sobreescritura en las subclases -- > muy bien, reutilización de código, modularidad, mantenibilidad...

La declaración de tipo estático el más amplio (Figura) y tipo dinámico el concreto (Cuadrado o Circulo) como por ejemplo Figura cuadrado1 = new Cuadrado(5); -- > muy bien, utilización del polimorfismo, aporta ventajas.

Uso del api de Java p.ej. Math.PI para recuperar el número pi y Math.pow -- > muy bien, uso de herramientas disponibles.

Los comentarios que has hecho -- > completamente acertados.

Poco más que añadir ;)

Saludos

1062
Hola rubens23 :) Ninguna observación sobre las clases SalonCasa y CocinaCasa. En cambio para la clase casa además de lo indicado por Lorenzo31, indicarte varias cosas erróneas:

Los métodos setTipoSalon(String valorTipoSalon), setEsIndependiente(boolean valorEsIndependiente), setNumeroDeFuegos(int valorNumeroDeFuegos) no deben ir en esta clase.

Por otro lado, te faltan los getters y los setters para los atributos objeto SalonCasa y CocinaCasa.

Es importante entender cómo se trabaja con objetos y el por qué esos métodos no deben ir ahí. Esto lo encuentras explicado en https://www.aprenderaprogramar.com/foros/index.php?topic=1220.0

Saludos

1063
Hola mzamora, para una mejor organización de los foros

- Lee por favor https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0 donde se explica cómo pegar código y cómo poner título a los temas

- Cada hilo (tema) del foro debe tratar sobre un asunto, por ejemplo "ejercicio CU00624B". Cuando se quiera pasar a otro asunto debe abrirse un nuevo tema. De esta forma mantenemos una mejor organización.

En este caso como se pasa de CU00624B a CU00630B voy a dividir el tema en dos temas, uno para CU00624B y otro para CU00630B

Gracias a todos por la colaboración  ;)

1064
Hola, realmente si sobreescribes el método, los dos métodos (en superclase y subclase) deben tener el mismo nombre, y si es así te basta con escribir super() y de ese modo Java ya entiende que estás llamando al método del mismo nombre en la superclase.

Nota: tener en cuenta que para que exista sobreescritura el método debe tener exactamente la misma signatura, si no es así sería un método distinto.

Si escribimos super.nombreMetodoSuperclase() estamos llamando a un método de la superclase, un método cualquiera. Si escribimos super() se entiende que llamamos al mismo método de la superclase, exactamente ese método.

Saludos

1065
Hola Dan, me parece que aciertas terminando lo que empezaste. ¡Y me das envidia por estar de vacas! Intentamos ofrecer aquí un sitio donde entre todos nos preocupemos por ayudar y hacer las cosas lo mejor posibles, con contenidos de calidad. Los cursos pueden resultar muy provechosos siempre que se sigan paso a paso y con constancia como has hecho tú.

Para tu código pocos comentarios.

En lugar de public double getAreaCirculo(){return (3.14 * Math.pow(dimensionPrincipal, 2));}

te recomiendo usar public double getAreaCirculo(){return (Math.PI * Math.pow(dimensionPrincipal, 2));}

Puedes ver que se trata de un atributo estático de la clase Math que te devuelve el número pi: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

También aunque no sea necesario en este ejercicio te recomiendo que no declares

Código: [Seleccionar]
Cuadrado figuraCuadrada = new Cuadrado(35.04);
        Cuadrado figuraCuadradita = new Cuadrado(23.20);
        Cuadrado figuraCuadra = new Cuadrado(23.20);
        Circulo circulo1 = new Circulo(19.30);
        Circulo circulo2 = new Circulo(14.24);
        Circulo circulo3 = new Circulo(19.30);

En vez de eso usa el polimorfismo, así te acostumbras a las buenas prácticas de la programación orientada Java, de este modo puedes tratar a los objetos como si fueran de un tipo u otro según necesites

Código: [Seleccionar]
Figura figuraCuadrada = new Cuadrado(35.04);
        Figura figuraCuadradita = new Cuadrado(23.20);
        Figura figuraCuadra = new Cuadrado(23.20);
        Figura circulo1 = new Circulo(19.30);
        Figura circulo2 = new Circulo(14.24);
        Figura circulo3 = new Circulo(19.30);

Del mismo modo para declarar un ArrayList usa List<String> miLista = new ArrayList<String>(); y así en general, para aprovecharte del polimorfismo

Saludos

1066
Hola fedegaray en líneas generales bien, con estas cosas mejorables:

En vez de un método dameDatos() en la subclase y otro dameDatosPro() en la superclase

Código: [Seleccionar]
   public void dameDatos() {
        dameDatosPro();
        System.out.println ("Fecha de envasado: " + getFechaEnvasado());
        System.out.println ("País de origen: " + getPaisOrigen());
    }


Sería preferible sobreescribir el método en la subclase y reutilizar el código de la superclase invocando a super() así:


Código: [Seleccionar]
   public void dameDatosPro() {
        super();
        System.out.println ("Fecha de envasado: " + getFechaEnvasado());
        System.out.println ("País de origen: " + getPaisOrigen());
    }

La idea es similar a lo que has hecho, pero esta forma se es más adecuada conforme a la programación orientada a objetos y a la reutilización de código. Esto aplica para todas las subclases.

En la clase con el main has creado productos vacíos, con lo cual no se pueden ver datos de los productos. Lo adecuado sería usar los constructores para crear productos con datos y poder ver esos datos, de esta forma podrías comprobar si el código funciona bien.

Saludos.

1067
Hola Dan la explicación para esto es que Java busca dando prioridad al tipo dinámico de los objetos. Como se explica en la entrega CU00690B es:

Citar
Si como hemos dicho, el compilador se basa en el tipo estático para su trabajo, podríamos pensar que si invocamos a un objeto de tipo estático “superclase” y tipo dinámico “subclase” con un método sobreescrito, el método que se utilice sería el propio de la superclase. Pero sin embargo, esto no es así: el control de tipos del compilador se basa en los tipos estáticos pero en tiempo de ejecución los métodos que se ejecutan dan preferencia al tipo dinámico. Es decir, en tiempo de ejecución Java está constantemente “buscando” (“ligando” o “despachando”) el método que corresponda en función del tipo dinámico al que apunta una variable. Si el método invocado no se encuentra definido en el tipo dinámico de que se trate, Java busca el método en la superclase para tratar de ejecutarlo. Si no lo encuentra en la superclase, continúa subiendo niveles de clase hasta alcanzar a la clase Object. Si en la clase Object tampoco se encontrara un método con ese nombre, el programa no llegaría a compilar. Decimos que los métodos en Java son polimórficos porque una misma llamada en un programa puede dar lugar a la ejecución de distintos métodos según el tipo dinámico de una variable.

Saludos


1068
Hola Dan, viendo los apartados:

a) La respuesta es que sí sería posible haciendo un casting. Ejemplo en https://www.aprenderaprogramar.com/foros/index.php?topic=1147.0

b) Correcto

c) Correcto

d) En la clase hija debes hacer uso de super en aquellos métodos donde sea conveniente, por ejemplo en el método toString. Ejemplo en https://www.aprenderaprogramar.com/foros/index.php?topic=1147.0

e) Se ejecutará el método toString() del tipo contenido en el objeto (es decir, de Taxi) aunque se declarara como tipo Vehiculo

¿Estás seguro de esto?
Citar
Se ejecuto el método toString() de la propia clase Vehiculo


Saludos

1069
Hola Dan, a mí me salta un error java.util.ConcurrentModificationException al invocar recorre.next()

        while(recorre.hasNext()){
            Producto aux = recorre.next();
            aux.imprimirInfo();
        }


Puede haber varios problemas, el primero de ellos es que el iterador crea una copia del objeto en el momento en que se crea el iterador. Tú estás creando el iterador al principio, cuando el objeto está vacío.

        EnvioDeProductos envio = new EnvioDeProductos();
        Iterator <Producto> recorre = envio.getEnvio().iterator();


Pero el iterador se debe crear justo antes de recorrer una colección, no en cualquier momento:

       Iterator <Producto> recorre = envio.getEnvio().iterator();
        while(recorre.hasNext()){
            Producto aux = recorre.next();
            aux.imprimirInfo();
        }

También ten en cuenta que el método imprimirInfo tiene un nombre equívoco: el método no imprime, sino que devuelve un String, por tanto mejor llamarlo getInfo() o similar

Prueba con estos pequeños cambios:

Código: [Seleccionar]
        Iterator <Producto> recorre = envio.getEnvio().iterator();
        while(recorre.hasNext()){
            Producto aux = recorre.next();
            System.out.println(aux.imprimirInfo());
        }

Y recuerda ponerle nombres correctos a clases y métodos... si no es fácil incurrir en equivocaciones.

Saludos

1070
Hola Víctor, para pegar código hazlo siguiendo lo que se indica aquí: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Para poder revisar haría falta poder compilar el código (o el código completo o un fragmento que crees simplemente a modo de prueba), con lo que has puesto ahora mismo es difícil determinar dónde puede estar el problema.

Es posible que se solucione llamando ObjectOutputStream.reset() cuando terminas de escribir los datos en el fichero, pero habría que estudiarlo.

Saludos

1071
Hola, para quienes lean el ejercicio (aunque el código está bien escrito) tener en cuenta que en esta entrega del curso todavía no se ha explicado el uso del main, el ejercicio está previsto que se resuelva usando BlueJ.

Sobre la impresión de resultados, normalmente los métodos de clases no deben encargarse de mostrar mensajes por pantalla (salvo excepciones o salvo que lo pida el ejercicio expresamente).

Saludos

1072
Hola Pitu, el ejercicio está bien resuelto, únicamente indicarte que <p align="justify"> no debe usarse. Esto se explica en http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=489:encabezados-html-h1-a-h6-parrafos-aplicar-estilos-y-etiqueta-pre-texto-preformateado-ejemplo-cu00715b&catid=69:tutorial-basico-programador-web-html-desde-cero&Itemid=192

Ahí tienes un ejemplo sobre cómo debe hacerse.

De resto todo bien!

Saludos

1073
Hola rogergcc, el uso del main no se explica en el curso hasta la entrega CU00655B, por tanto para este ejercicio no es necesario usar main ya que el main se explica más adelante. En este ejercicio los objetos deben crearse usando BlueJ (supongo que vienes siguiendo el curso desde el principio, si no es así te recomiendo que lo hagas).

En la clase Casa te faltan los métodos get y set de los atributos objeto, para ver cómo se trabaja con métodos y atributos objeto recomiendo leer esto: https://www.aprenderaprogramar.com/foros/index.php?topic=1220.0

Saludos

1074
Hola fedegaray la imagen se ve muy pequeña y además parece que se ha cortado la parte de abajo...

Saludos

1075
Hola jepc depende de cómo se encuentren los datos en el txt. Supongamos que los datos siempre van separados por un espacio:

1 pepe  10
5 juan 44
78 eugenio 14

Aquí podrías extraer la línea como String. Después puedes usar métodos de String para dividir la cadena "1 pepe  10" en tres cadenas "1" "pepe"  "10" y luego ya colocas cada dato en su sitio.

Para extraer las cadenas puedes usar substring, split, u otras maneras, aquí tienes un ejemplo de substring https://www.aprenderaprogramar.com/foros/index.php?topic=1258.0

split tiene que usarse con expresiones regulares: este es un ejemplo de split

Código: [Seleccionar]
str = "Hello I'm your String";
String[] splited = str.split("\\s+");

Una vez hagas pruebas pega el código con el que estés trabajando e intentaremos ayudarte. Saludos.


1076
Hola fedegaray, el ejercicio cumple perfectamente con lo que se pedía, no veo necesidad de hacer ninguna corrección.

Saludos

1077
Hola Lorenzo, has creado un código donde haces un buen uso de todos los conceptos vistos en el curso. Para quienes lean o estudien el ejercicio, es interesante ver cómo la herencia favorece la reutilización de código como vemos en los métodos sobreescritos invocando a super, por ejemplo:

    public double obtenerSalarioBase(){ return (super.obtenerSalarioBase() + ( yearsEmerito * 47.80 )); }


En la subclase se invoca super para recuperar lo que hace la superclase y se añade aquello que es específico de la subclase.

Todo bien!

Saludos

1078
Hola Dan, suponte que estás recorriendo una colección de personas y quieres mostrar solo la información de las personas que se llamen Alberto.

El código sería como este:

Código: [Seleccionar]
for (int i=0; i<coleccionPersonas.size()-1; i++) {

if (coleccionPersonas.get(i).getName(i).equals("Alberto") {
    System.out.println("Hemos encontrado una persona que se llama Alberto. A continuacion sus datos:");
    coleccionPersonas.get(i).mostrarDatos(); //Extraemos el objeto en posición i
}

}


coleccionPersonas.get(i) recupera un objeto situado en la posición i dentro de la colección

Una vez tenemos el objeto podemos operar sobre él, si suponemos que ese objeto es un objeto Persona que tiene un método getName() recuperamos el nombre usando coleccionPersonas.get(i).getName(i)

Ese nombre lo podemos comparar con lo que buscamos.

Igual que nombre podríamos comparar otros atributos. En caso de que la comparación sea compleja (entre objetos) hay que usar equals según se explica en la entrega CU00694B del curso.

Saludos

1079
Hola para el punto 2

Citar
debe permitir la realización de una venta de un número x de entradas para una sesión concreta, es decir, para una fecha y una pelıcula concreta.

En primer lugar se debe comprobar que existe en el cine alguna sesión con dichos datos, es decir, que en la fecha pedida se proyectará la película que se pide. En caso afirmativo, se debe comprobar que el número de entradas pedidas no excede el número de butacas disponibles para esa sesión. Por último, se deberán crear tantos objetos de la clase entrada como cantidad de entradas se desean comprar, para posteriormente almacenarlas y actualizar el número de butacas disponibles de la sesión concreta;


Antes de realizar este punto tienes que preparar varias cosas.


Paso 1) Para poder comparar fechas debes disponer de un método equals en la clase Sesion, que te permita comparar si las fechas de dos sesiones son iguales

Implementación de método equals se explica en http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=666:sobreescribir-metodos-tostring-y-equals-en-java-ejemplos-y-ejercicios-resueltos-comparar-objetos-cu00694b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

Orientación:

Código: [Seleccionar]
    public boolean equals (Object obj) {

        if (obj instanceof Fecha) {

            Fecha tmpFecha = (Fecha) obj;

            if (this.dia==tmpFecha.getDia() && this.mes==tmpFecha.getHora() && this.año==tmpFecha.getAño() &&
            this.hora == tmpFecha.getHora() &&this.minutos==tmpFecha.getMinutos()

            ) { return true; } else { return false; }

        } else { return false; }

    }   
[code]

Ahora para comparar dos Fechas debes hacerlo usando el método equals. Por ejemplo if (fecha1.equals(fecha2)) te devuelve true si ambas son la misma fecha, o false si no lo son.




Para poder comparar Peliculas debes disponer de un método equals en la clase Pelicula

Orientación:

[code]
        public boolean equals (Object obj) {

        if (obj instanceof Pelicula) {

            Pelicula tmpPelicula = (Pelicula) obj;

            if (this.titulo.equals(tmpPelicula.getTitulo()) && this.director.equals(tmpPelicula.getDirector()) &&
            this.año == tmpPelicula.getAño() && this.sinopsis.equals(tmpPelicula.getSinopsis()))
            { return true; } else { return false; }

        } else { return false; }

    }


Tienes que implementar métodos equals en todas las clases epara las que necesites hacer comparaciones de objetos.



Paso 2) Tener en cuenta cómo relacionan las sesiones con el cine. Tal y como lo tienes definido en la clase Sala tienes un ArrayList de Sesion y en la clase Cine tienes un ArrayList de sala


Paso 3) Para implementar lo que pide el punto 2 del paso 3 del enunciado, parece que debe hacerse en un método cuya idea sería esta, quizás haga falta algún parámetro más...:

public void venderEntradasSesion (int numeroEntradasVenta, Sesion sesionDeLaVenta) {

Aquí tienes que recorrer con bucles y hacer comparaciones con equals siguiendo lo que dice el enunciado

}

Intenta desarrollar esto y lo vas pegando...

Saludos

1080
Ya he fusionado los dos temas. Saludos.

Páginas: 1 ... 49 50 51 52 53 [54] 55 56 57 58 59 ... 93

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".