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 - RaGa

Páginas: [1] 2 3 4 5 6 ... 12
1
Hola maxplanck:

Estuve revisando tu ejercicio y lo veo bien estructurado. Funciona correctamente salvo un pequeño detalle de interpretración de la consigna (b) del ejercicio.
Habría dos signos '=' que deberían agregarse en dos sentencias del código para cumplir con lo que se propone en el ejercicio de la entrega. (Prestar atención a la palabra 'inferior').

Citar
b) Si el diámetro es superior a 1.4 con un grosor inferior a 0.4, ó si el diámetro es menor o igual a 1.4 pero mayor que 0.8, con un grosor inferior a 0.25, deberá mostrarse por consola el mensaje “El grosor para esta rueda es inferior al recomendado”.

Primera línea a modificar:
Código: [Seleccionar]
if (diametro > 1.4 && grosor >= 0.4) {
Segunda línea a modificar:
Código: [Seleccionar]
else if (diametro <= 1.4 && diametro > 0.8 && grosor >= 0.25) {
Analízalo y cualquier duda estamos aquí para volver a revisarlo.

2
Hola Chompy129:

He estado analizando tu código y lo veo muy bien, felicitaciones.
Y aprovechando que está muy bien y no veo necesidad de hacer correcciones importantes, sí me gustaría aportar otra forma de codificar la clase 'TestListaCantantesFamoso'.
En esta versión alternativa, introduzco algunos cambios para que los analices y veas si te parecen bien:

1) se ahorra un campo de instancia (boolean inicial), y se resuelve de otra manera aquello para lo cual estaba pensado originalmente.
2) Se cambia la condición while(true) por una solución más elegante, sin tener que salirse del bucle utilizando 'break'.
3) Se crea el método mostrarListaCompleta, que además de ser retulizable dentro de la clase, hace más legible el método main.
4) Se muestra la lista completa por pantalla la primera vez, y cada vez que ingresamos un nuevo cantante. Esa es la manera en que debe proceder nuestro programa (fijarse en el ejemplo de la descripción del ejercicio).

Código: [Seleccionar]
import java.util.Iterator;
import java.util.Scanner;
/**
 * Este método main testea el funcionamiento de ListaCantantesFamoso.
 * Hace uso de variables tipo Iterator.
 * @author Chompy129
 * @version 1.0
 */

public class TestListaCantantesFamoso{
   
    public static void main(String[] args){
        Scanner entradaS= new Scanner(System.in);
        ListaCantantesFamoso lista= new ListaCantantesFamoso();
        lista.anadirCantante("Michael Jackson", "Thriller");
        lista.anadirCantante("Madonna", "All I want is you");

        String nombreNuevo= "";
        String discoMasVendidoNuevo= "";
       
        System.out.println("La lista inicial contiene los siguientes datos:");
        mostrarListaCompleta(lista.getLista().iterator());
        String m= "s";
       
        while(m.equalsIgnoreCase("s")){
           
            System.out.println("Añada un nuevo cantante:");
            System.out.print("- Nombre: ");
            nombreNuevo= entradaS.nextLine();
            System.out.print("- Disco con mas ventas: ");
            discoMasVendidoNuevo= entradaS.nextLine();
            lista.anadirCantante(nombreNuevo, discoMasVendidoNuevo);           

            System.out.println("La lista actualizada contiene los siguientes datos:");
            mostrarListaCompleta(lista.getLista().iterator());
 
            System.out.println("¿Desea introducir un nuevo cantante (s/n)?");
            m= entradaS.nextLine();
           
        }

        System.out.println("Hasta luego.");

    }//Cierre de método main.
   
    private static void mostrarListaCompleta(Iterator<CantanteFamoso> it){
           
        CantanteFamoso next;
     
        while(it.hasNext()){
             next= it.next();
             System.out.print("Cantante: " + next.getNombre() + ".");
             System.out.println("       Disco con más ventas: " + next.getDiscoConMasVentas() + ".");
        }
           
    }
   
} // fin de la clase.

Analízalo y cualquier duda estamos aquí para revisarlo nuevamente.

3
Hola nasrry:

Estuve revisando tu ejercicio y por mi parte puedo decir que lo has hecho muy bien!
La única recomendación que haría es no olvidar el "modificador de acceso" del método ´combinador´, el cual debería ser public.

En ese caso, esa línea quedaría:

Código: [Seleccionar]
public String combinador (String valor_texto1, String valor_texto2, String valor_texto3){
Saludos.


4
Correcto! es una muy buena sugerencia de convenciones la que te hacen los compañeros, a tomarla en cuenta  ;)

5
Hola hymsoft:

Leyendo tu código veo que se ajusta perfectamente a la consigna planteada por el ejercicio de la lección, felicitaciones!
Además para destacar: muy bien comentado, y muy bien estructurado el código. Hasta te has tomado la molestia de hacer una impresión de pantalla  ;)
A seguir adelante!

6
Hola Edu:

Estuve revisando tu código y lo veo perfecto! Por mi parte nada por corregir, veo al código muy bien estructurado, cumple al pié de la letra la consigna del ejercicio. A seguir adelante!

7
Hola umadara:

He estado revisando tu ejercicio y veo que lo has hecho bien, felicitaciones por ello. Sin embargo déjame hacerte algunas observaciones que considero importantes desde el punto de vista de cómo pensar el código.

Defines un atributo llamado 'faltaEdad' donde guardarás la cantidad de años que le falta al médico para tener una edad múltiplo de 5.
Fíjate que ese es un dato superfluo ¿a qué me refiero con "superfluo"? Siempre a partir del campo 'edad' puedo calcular cuántos años le faltan para que su edad sea múltiplo de 5. Por lo tanto no usaré recursos del computador (en este caso un campo de instancia) para almacenar un dato que con un método puedo obtener en cualquier momento. Por lo tanto el atributo 'faltaEdad' no debiera existir, no es necesario almacenarlo, puedo calcularlo en cualquier momento a partir del atributo 'edad'.
Por lo tanto, en vez de definir el método 'setFaltaEdad', definimos un método llamado calculoParaMultiploEdad(), cuyo nombre tiene un poco más de sentido a lo que estamos pretendiendo hacer: un cálculo de edad, y no un 'set'.

¿Qué código debería incluir entonces este método calculoParaMultiploEdad()? pues mira cómo puede modificarse tu código a algo parecido a esto.

Código: [Seleccionar]
public void calculoParaMultiploEdad(){
        int moduloEdad;
        moduloEdad = edad % 5;
        moduloEdad = 5 - moduloEdad;
        System.out.println("El medico: " + nombre + " " + apellidos + " ,con especialidad: " + especialidad + " ,tendra una edad multiplo de 5 en " + moduloEdad + " anios.");
    }

Y en este punto -conforme a lo que expresabas en tu post- hago una salvedad acerca de la interpretación de la consigna del ejercicio:

Si el médico tiene 47 años, pues le faltan 3 años para tener una edad múltiplo de 5.
Si el médico tiene 25 años, pues le faltan 5 años para tener una edad múltiplo de 5 (por más que actualmente tenga una edad múltiplo de 5).
Pero insisto, es una interpretación de la consigna, no tiene mayor importancia.

Último  observación. En el constructor de la clase, deberías inicializar todos los campos a valor por defecto: los String inicializados a "", y los int a 0.

Espero haber sabido explicarme. Cualquier duda estamos aquí para revisarlo nuevamente.

8
Hola Amateu:

Estuve revisando tu ejercicio y lo veo perfecto! Cumple con lo que pide el ejercicio.

Respecto al uso del operador '==' no es correcto usarlo con los objetos tipo String. Para comprobar igualdad de un objeto tipo String se debe usar el método 'equals' de la clase Object (a la cual pertenecen todos los objetos, incluídos los tipo String).

Ejemplo: Podemos incluír un condicional if más en tu código de la siguiente manera:

Código: [Seleccionar]
....
....
Scanner entradaEscaner = new Scanner (System.in); //Creación de un objeto Scanner
        entradaTeclado = entradaEscaner.nextLine (); //Invocamos un método sobre un objeto Scanner
       
        if(entradaTeclado.equals("java")){
            System.out.println("La palabra ingresada es 'java'");
        }
       
        if (entradaTeclado.length() < 5)
            {
            longitud = "menos de 5 ";
....
....

Lo que haría este agregado es que si la palabra ingresada es "java" nos lo indicará por consola. Si no lo fuese, no habrá ninguna indicación.

Analízalo y cualquier duda estamos aquí para reveerlo.

9
Aprender a programar desde cero / Re:CU00642B Ejercicio
« en: 11 de Abril 2016, 14:49 »
Hola Amateu:

Insisto en lo siguiente: tal como lo habías codificado tu estaba perfectamente resuelto, no se debía cambiar nada.
Siemplemente hicimos un agregado a la lección con la segunda opción que yo te planteaba, a modo de alternativa a la solución del ejercicio. También te explicaba "las diferencias sutiles" entra ambas posibilidades.
La elección entre adoptar una u otra solución en el futuro dependerá de problema a resolver en sí, pero en este caso en particular (CU00642B) era indistinto, ambos códigos funcionaban correctamente.

Esta otra forma de en que planteas en tu último hilo sí ya no es correcta, violamos el principio de encapsulación, lo que significa que accedemos a los campos de instancia de un objeto de forma directa. Por regla general el acceso a los campos de instancia de un objeto no deberían ser 'public'.
Siempre que querramos leer o setear un campo de instancia de un objeto será a través de sus métodos set y get, nunca de manera directa.
En principio todos los campo de instancia de un objeto deberían ser de acceso 'private'.

10
Aprender a programar desde cero / Re:CU00642B Ejercicio
« en: 10 de Abril 2016, 15:36 »
Hola Amateu:

Veo que es tu primer mensaje en el foro así que Bienvenido!
Estuve revisando tu ejercicio, y lo veo perfecto!

Como un agregado extra -ya que todo ha estado correctísimo- me gustaría plantearte lo siguiente a modo de "darle una vuelta más de tuerca al tema"...

Tú habías planteado en la clase Casa, el siguiente método:
Código: [Seleccionar]
public void setSalonCasa (SalonCasa valorSalonCasa)
    {
            salonCasa = valorSalonCasa;
    }

Está perfecto como está codificado, hace lo que que debe hacer.
Sin embargo quisiera mostrarte una alternativa distinta de codificación de este método:
Código: [Seleccionar]
    public void setSalonCasa(SalonCasa valorSalonCasa) {
        salonCasa.setNumeroDeTelevisores(valorSalonCasa.getNumeroDeTelevisores());
        salonCasa.setTipoSalon(valorSalonCasa.getTipoSalon());
    }

Esta forma de codificar el método setSalonCasa también realiza lo que se pide en el ejercicio.

Nos podríamos plantear la siguiente pregunta ¿ambas formas son equivalentes? ¿es indistinto codificar de una manera o de otra?... tomémonos un tiempo para pensarlo y analizarlo.

La respuesta es  que si bien ambas formas de codificación resuelven en nuestro caso particular el ejercicio que se plantea en la lección, hay diferencia entre una y otra forma.

Fíjate en lo siguiente: de la manera en que lo planteaste tu, lo que hacemos es asignarle al campo salonCasa, la referencia del objeto valorSalonCasa. Por lo tanto si se realizara cualquiera modificación al objeto valorSalonCasa, esas modificaciones se verían reflejadas cuando consultemos el objeto salonCasa (y viceversa) ¿ por qué? porque salonCasa apunta a valorSalonCasa, eso es lo que realiza la asignación: una asignación de referencias.

Ahora bien, si analizamos la segunda forma de codificar, vemos que el método lo que hace es asignar a los campos del objeto salonCasa, los valores de los campos del objeto valorSalonCasa. Pero ambos objetos siguen siendo independientes. Tanto salonCasa como valorSalonCasa referencian lugares de memorias distintos.

Todo lo dicho es aplicable también al método método setCocina.

Analízalo, y cualquier consulta estamos aqui para reveerlo.

11
Hola Carlos, y bienvenido al foro.
Estuve revisando tu ejercicio y veo que lo has hecho bastante bien. Analicemos un poco tu trabajo...
Las propiedades definidas son correctas, y las operaciones propuestas son correctas también. Pero a la vez podríamos agregar otras operaciones que también serían de mucha utilidad.

Recordemos las propiedades que has definido:
         Numero de matricula
         Fabricante
         Capacidad de pasajeros
         Tamaño
         Espacio aereo que transita
         Coordenadas GPS

Para cada una de esas propiedades has definido una operación de asignación. Propongo que para cada una de esas propiedades definamos también una operación de lectura. Así no solo podríamos asignarle un valor a cada propiedad, sino que también tendríamos la posibilidad de leer el valor que tenga cada una de ellas luego de haberles asignado un valor.
Por lo tanto, así como definiste una operación llamada "Asignar matricula" definiríamos otra llamada "Leer matrícula"; así como definiste la operación "Asignar fabricante", definiríamos otra llamada "Leer fabricante", y así suscecivamente.

Por otro lado, y en cuanto a la superclase,veo que has entendido bien el concepto. Un clase Avion es una super clase de otras clases como ser: Avion de caza, Avion de pasajeros, Avion de carga, etc.

Una forma de determinar si estamos estructurando bien nuestro problema a la hora de detrminar cuál es una superclase es hacernos la siguiente pregunta: "¿Avion de carga es un "Avion?" si la respuesta es siempre SI, pues entonces Avion es una superclase.
Fíjate que su recíproca no siempre se cumple "¿Avion es un Avion de Carga?". En este caso no siempre se cumple, ya que Avion podría ser algunas veces un Avion de carga o un Avion caza, por lo tanto Avion de Carga no es una superclase.
(Practica de hacerte esta pregunta con las clases Vehiculo, Taxi, Autobus, Tranvía, de la lección).

En cuanto a la forma de definir las  propiedades y las operaciones de las clases Avion de carga, Avion de pasajeros, etc. lo dejaremos para analizarlo en el futuro donde hayamos avanzado más en el curso, no ahondaremos en detalles por ahora, lo importante en esta lección es que se haya entendido bien el concepto de qué operaciones definir respecto a las propiedades que declaramos.

Lo has hecho muy bien, a seguir adelante!
Cualquier duda ya sabes que estamos aquí para revisarlo.

12
Hola jchusmit:

Veo que es el primera post que publicas en el foro, así que me toca hacer de anfitrión y darte la bienvenida!

Como primer consejo que me gustaría darte sería sugerirte leer este hilo:
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0
donde encontrarás la forma de insertar código en el foro de manera correcta.

Ahora bien, yendo específicamente al código que publicaste, he de decirte que está bien pensado, y si bien hay algunos errores que a continuación iremos puntualizando, has hecho un muy buen trabajo!

Veamos entonces qué correcciones habría que hacerle para mejorar el código.

1) Cómo se ha dicho en más de una oportunidad en las lecciones (y en muchos hilos del foro que recomiendo siempre leer ya que se aprende mucho de los compañeros), es una buena práctica respetar la convención que nos dice que: los nombres de los atributos y los métodos deben comenzar siempre con una letra manúscula, y los nombres de las clases siempre con una letra mayúscula.
Así pues: el atributo ´Apellido´, debería llamarse ´apellido´. El atributo ´Nombre´debería llamarse ´nombre´, etc.
Otra convención importante a respetar en este mismo sentido es la que nos dice que si bautizamos un método o un atributo con un nombre que contenga dos palabras, esa segunda palabra comenzará con una letra mayúscula. De esta forma se hace más ágil y entendible su lectura, además de darnos mayor información acerca de "qué representa" cuando se trata así de nombre compuestos.
Por lo tanto, un atributo como ´valorespe´debería llamarse ´valorEspe´, y un método como ´calmultedad´debería llamarse ´calMultEdad´, o ´setcasado´debería ser ´setCasado´, etc.

2) Siguiendo con las convenciones de un buen programador: los métodos que asignan un valor a un atributo de clase, deben bautizarse anteponiendo el prefijo ´set´. Ejemplo: ´setCasado´.
Los métodos que devuelven un valor, deben bautizarse anteponiendo el prefijo ´get´. De esta manera deberías cambiar nombres de métodos como por ejemplo el método ´Apellido´ que debería llamarse ´getApellido´, etc.

3) Fíjate en el constructor que has creado en tu código:

Código: [Seleccionar]
//constructo
public Medico2(){
Nombre = " ";
Apellido =" ";
edad = 0;
casado = false;
DI= "";
espe= "";

Aquí he de señalarte que el atributo ´espe´está muy bien inicializado. Pero fíjate que no es de la misma forma que has inicializado el atributo ´Apellido´ o el atributo ´Nombre´, donde hay un espacio entre las comillas. Ese espacio no debería existir si estamos inicializando un campo tipo String a valores por defecto.

4) La línea

Código: [Seleccionar]
if (edad <10){
debe ser reemplazada por :

Código: [Seleccionar]
if (edad <10)
para que funcione correctamentetodo el programa.


Analiza estos puntos y cualquier duda, estamos aquí para revisarlo nuevamente.



13
Hola Jarb.

Veo que es la primera consulta que publicas, así que me toca hacer de anfitrión y darte la bienvenida al foro.

Para poder ayudarte -la mayoría de las veces- va a ser necesario que insertes el código completo y no solo uno de los métodos. De esa manera quien lea/corrija/participe/opine sobre la mejor solución del problema en cuestión tendrá un total conocimiento de lo que se está haciendo.

Sugiero que leas este post: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0
donde encontrarás la forma de insertar código en el foro.

Yendo específicamente a tu pregunta, hay que tener en claro lo siguiente:

1) el parámetro 'matricula' es el campo de instancia del objeto taxi.
2) setMatricula(String valorMatricula) es un método del objeto taxi que recibe (de alguna manera) un valor de matrícula en el parámetro 'valorMatricula'.
3) la función del método es asignar al campo de instancia 'matrícula' de ese objeto taxi, el valor que el método recibió en el parámetro 'valorMatricula'.

De esta manera es como se asigna un valor al campo de instancia del objeto. Esta es la función de los métodos set.

Recomendaría leer con detenimiento la lección: https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=426:ique-es-una-clase-java-concepto-atributos-propiedades-o-campos-constructor-y-metodos-cu00623b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

y y si hay conceptos que aún no están bien afianzados, ir leyendo las lecciones anteriores.

Saludos.


14
Hola JuanMontaña:

Último detalle a tener en cuenta: agregar en la signatura del método  lo que se denomina "modificador de acceso Java". Como hemos venido definiendo en el curso siempre los métodos como públicos, la signatura del método debería ser:

Código: [Seleccionar]
public String combinacion (String valor_texto1, String valor_texto2,String valor_texto3)    {
más adelante se abordará en detalle qué es esto de los modificadores de acceso Java. De momento sigamos definiendo todos nuestros métodos como públicos.

15
Hola JuanMontaña:

Estuve revisando tu ejercicio y funciona correctamente.
Sin embargo quisiera aprovechar para hacerte una sugerencia respecto de nombrar un método y un atributo de la misma manera: no pareciera ser una buena idea, podría generar confusiones.
Sugeriría leer el siguiente hilo donde se trata un poco acerca de la elección de los nombres para clases, métodos, y atributos.

https://www.aprenderaprogramar.com/foros/index.php?topic=2674.msg12456#msg12456

16
Hola JuanMontaña:

Tu código funciona correctamente. Cumple con la consigna establecida por el ejercicio, felicitaciones.

Respecto a tu consulta acerca de ¿ por qué funciona sin problemas el código sin la incorporación de la línea "import java.lang.Math;"?
Transcribo el último párrafo de la entrega Nº47 del curso donde podemos encontrar la respuesta:

Citar
Prueba ahora a eliminar la sentencia import de la primera línea y a compilar. La compilación es posible. ¿Por qué? Esto se debe a lo que comentamos relativo a que determinadas clases o paquetes se cargan automáticamente mientras que otros no se cargan a no ser que se indique específicamente. El paquete java.lang es un paquete que se carga automáticamente. Por ello podemos hacer uso de todas sus clases, como String o Math, sin necesidad de importarlo. Si escribimos la sentencia de importación no habrá mensaje de error, pero tampoco será útil ya que estamos redundando al repetir algo que hace Java automáticamente.

17
Hola Enzo:

Estuve revisando tu ejercicio y por mi parte lo veo muy bien, nada para agregar.
A seguir adelante!

18
Hola JuanMontaña:

Estuve revisando tu ejercicio y noto que has comprendido correctamente el funcionamiento del bucle 'for'. Lo has implementado muy bien en la resolución del ejercicio planteado.
A seguir adelante!

20
Hola Enzo:

Perfecta la resolución del ejercicio.
A seguir adelante!

Páginas: [1] 2 3 4 5 6 ... 12

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