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 7 ... 12
21
Hola Enzo:

Estuve revisando tu ejercicio y lo veo perfecto! Felicitaciones.
He de destacar las líneas de comentario que vas añadiendo en el código, los nombres elegidos para los atributos, y la buena estructura del programa: evidencian entendimiento e incorporación de los conceptos aprendidos.
A seguir adelante!

22
Hola Carlos Andrés:

Estuve revisando tu ejercicio y lo veo perfecto. Destaco la buena organización del código, el haber utilizado un solo objeto tipo Scanner para receptar las dos palabras (optimización de recursos), y la claridad conceptual en la implementación del if dentro del ciclo for.

A seguir adelante!

23
Hola Javieerg:

Estuve revisando tu código y lo veo perfecto. A seguir adelante!

24
Hola Javieerg!

Estuve revisando tu ejercicio y lo veo muy bien !
Simpelmente hacerte algunas observaciones :

Respecto del Constructor con parámetros...
Sería más práctico inicializar los campos superficie y direccion a valores por defecto. De esta manera este constructor nos quedaría:

Código: [Seleccionar]
public Casa() {
   
        superficie = 0;
        direccion = "";
        salonCasa = new SalonCasa();
        cocinaCasa = new CocinaCasa();
    }

Respecto de los métodos setSalon...

Código: [Seleccionar]
public void setSalon(SalonCasa objetoSalonCasa) {salonCasa = objetoSalonCasa;}
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 setSalon(SalonCasa objetoSalonCasa) {
        salonCasa.setNumeroDeTelevisores(objetoSalonCasa.getNumeroDeTelevisores());
        salonCasa.setTipoSalon(objetoSalonCasa.getTipoSalon());
    }

Esta forma de codificar el método setSalon 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 salon Casa, la referencia del objeto objetoSalonCasa. Por lo tanto si se realizara cualquiera modificación al objeto objetoSalonCasa, esas modificaciones se verían reflejadas cuando consultemos el objeto salonCasa (y viceversa) ¿ por qué? porque salonCasa apunta a objetoSalonCasa, 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 objetoSalonCasa. Pero ambos objetos siguen siendo independientes. Tanto salonCasa como objetoSalonCasa 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.

25
Hola Javieerg:

Estuve revisando tu ejercicio, y lo veo perfecto. A seguir adelante!

26
Hola Marco:

Estuve revisando tu ejercicio:

1) Especificaría más el nombre del método para asegurarme de que se trata de la duración de un tema y no malinterpretarse como si fuera la duración del disco completo. Además, escribámoslo respetando la convención de letras mayúsculas y minúsculas.

public float getDuracionCancion (int NroCancion)

2) Respetando la convención de mayúsculas y minúsculas sería:
public void HolaDameTuDuracion()

3) Lo mismo que en el apartado (1), especificamos que se trata de la duración del disco completo. Además, no sería necesario pasarle ningún parámetro, ya que esa sería la función del método precisamente.
public float getDuracionDiscoCompleto ()

4) Sería más correcto elegir un nombre de método como:
public void aniadirCancionYDuracion(String titulo, float duracion)
o también:
public void addCancionYDuracion(String titulo, float duracion)

ya que la preposición 'set' está más ligada a lo que conocemos como 'modificar', pero no añadir.
La letra 'ñ' que usamos en español se trata de evitar en programacion y en su reemplazo puede usarse 'nn' o 'ni'.
Por ejemplo 'año' se podría escribir como 'anio' o 'anno'.

Saludos!

27
Hola edioswaldo:

Estuve revisando tus respuestas y veo todas muy bien salvo en aquellas dos que marcas dudas ("a" y "e"). Vayamos a ellas.

Respecto de la pregunta a)...
En la jerarquía de herencias que se plantea: todo objeto Taxi es siempre un objeto Vehiculo. Sin embargo su recíproca no se cumple: no todo Vehiculo es siempre un Taxi.
Este parece ser el problema en este punto.

Veamos, en la línea:

       
Código: [Seleccionar]
taxi2= (Taxi)carro2;

en tiempo de compilación no se marca ningún error ya que el compilador "confía" que llegado este momento de tener que hacer esta asignación, carro2 que es un Vehiculo, pueda llegar a contener efectivamente un Taxi como el casting lo pide.
Sin embargo, en tiempo de ejecución eso no sucede en este ejercicio.
carro2 no es un Taxi y estamos queriendo forzar a que lo sea. Estamos queriendo forzar que carro2 que tiene los atributos y métodos de Vehiculo tenga además "de la nada" dos atributos más y 4 métodos más (que corresponden a los de Taxi). Eso sería forzar a que se convierta en algo que no es, y nos da (logicamente) ese error en tiempo de ejecución.

Veamos ahora qué sucedería con este otro ejemplo:

       
Código: [Seleccionar]
Vehiculo carro4=new Taxi("ABC-999",4,"Edi7",4); ;
        Taxi taxi4= new Taxi("ABC-222",4,"Edi2",4);
        taxi4= (Taxi) carro4;     
        System.out.println("Carro 4= "+carro4.toString());

Aquí carro4 es tipo Vehiculo. Es decir: ese objeto tipo Vehiculo ahora EFECTIVAMENTE contiene un objeto tipo Taxi, por lo tanto en la asignación en tiempo de ejecución:

         
Código: [Seleccionar]
taxi4= (Taxi) carro4;    

no habrá ningún problema.

Insisto en lo siguiente: "Todo objeto Taxi es siempre un objeto Vehiculo. Sin embargo su recíproca no se cumple: no todo Vehiculo es siempre un Taxi."

Te planteo lo siguiente:
Supongamos que la clase Vehiculo hubiera tenido además de la clase hija Taxi, la clase hija AvionDeCarga.

Código: [Seleccionar]
        Vehiculo carro4=new new AvionDeCarga("ABC-222",4,"piloto 34","fuselejae 2K4", "container");
        Taxi taxi4= new Taxi("ABC-222",4,"Edi2",4);
        taxi4= (Taxi) carro4;     
        System.out.println("Carro 4= "+taxi4.toString());

aquí es más avidente y lógico que en tiempo de ejecución se marque con un error esta  incompatibilidad, ya que por mas casting que haga no puedo transformar un avion de carga (que es lo que realmente contiene el objeto tipo Vehiculo llamado carro4) en un objeto tipo Taxi que es lo que me pide el casting.

Respecto de la pregunta e)...
super() se utiliza en un constructor de una subclase para llamar al constructor de su super clase.
En este método sobreescrito de una subclase, si quieres hacer una llamada al método de su superclase, debes invocarlo de esa manera: super.toString()

28
Hola edioswaldo:

Muy bien por las dos primeras respuestas.

Con respecto a la tercera, más bien diríamos que el método iterator() devuelve un objeto de tipo Iterator con una copia de la colección que le hayamos pasado como parametro.

Saludos!

29
Hola MarckyMarck!

Estuve revisando tu ejercicio y funciona correctamente, cumple con la consigna del ejercicio, así que felicitaciones!

Con el fin de mejorar aún más el código ya que has llegado a este punto de lograr con éxito la resolución del problema, intentaría hacer un poco más eficiente el código.

Veamos qué alternativa podríamos incorporar:
En el código defines 2 objetos tipo Scanner. Realmente tal vez con uno solo podríamos servirnos para obtener las dos palabras que necesitamos para este problema ¿Cómo sería esto?

Código: [Seleccionar]
        System.out.println("Introduzca la primera palabra");
        Scanner introPalabra=new Scanner(System.in);
        String palabra1=introPalabra.nextLine();
        System.out.println("Introduzca la segunda palabra");
        String palabra2=introPalabra.nextLine();

Y con esto ya nos hemos ahorrado un recurso (un objeto Scanner menos).

Otra cosa que podemos ver a simple vista es que hay bastante semejanzas en los ciclos for. Si bien cada ciclo cumple con una función específica y se comporta como un engranaje escencial en el funcionamiento orgánico del conjunto, existen semejanzas que hacen pensar que tal vez podría depurarse aún más esta parte.
¿De qué manera? se podría pensar que una vez que determinamos cuál de las dos palabras tiene más caracteres, establecer un atributo limiteSuperior que contenga la cantidad de caracteres de la palabras más larga, y un atributo limiteInferior que contenga la cantidad de caracteres de la palabra más corta.
De esta manera, luego si, hacemos uso de un ciclo for (esta vez único) que haga el trabajo.

Puedes ver la implementación de esta idea en el siguiente link.
https://www.aprenderaprogramar.com/foros/index.php?topic=2089.msg10280#msg10280

Pero insisto en lo siguiente, tu código es excelente y cumple con la propuesta del ejercicio de la lección. Simplemente te invito a ver otra alternativa de resolución, otra posibilidad, otra forma de pensar el problema.

Saludos!


30
Hola Danny!

Bienvenido al foro.
Estuve revisando tu ejercicio. Ha faltado que publiques la clase EntradaDeTeclado para que se pueda compilar.
De todos modos, analizando el ejercicio es muy extraño que te de ese error que describes. Más bien debería darte un error en tiempo de ejecución que sería:

Código: [Seleccionar]
java.lang.StringIndexOutOfBoundsException: String index out of range
ya que el código tal como está escrito en un momento intenta acceder a una letra que no existe (en la palabra más corta).

Por ejemplo, si la entrada1 es "hola" (4 letras) y la entrada2 es "hola2" (5 letras), el programa querrá acceder a la letra número 5 de la entrada1 y te dará el mensaje de error anteriormente descrito.

Te sugiero revises el siguiente link:

https://www.aprenderaprogramar.com/foros/index.php?topic=2089.msg10280#msg10280

31
Hola Francy!

Bienvenido al foro, espero te podamos ser de ayuda en este camino que has emprendio.

Bien, yendo directamente a tu consulta, por lo que refieres sospecho que la solución debe ser la configuración de las variables de entorno. Para solucionarlo te recomiendo leas la entrega NºCU00610B:

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=389:configurar-java-en-windows-variables-de-entorno-javahome-y-path-cu00610b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

De todos modos, y para despejar cualquier problema de instalación, te recomendaría que sigas las instrucciones paso-a-paso para la instalación de Java que se van detallando a partir de la entrega CU00608B:

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=383:descargar-download-java-obtener-el-instalador-jdk-java-development-kit-de-oracle-cu00608b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

32
Hola Rubén:

Estuve revisando tu ejercicio y lo veo excelente! Utilizas muy bien los conceptos que se explican en esta entrega y los conceptos que se vienen acumulando de entregas anteriores.

Un único detalle que yo puntualizaría:
Tanto en la clase Senador como en la clase Diputado, no haría falta sobreescribir el método toString():

Código: [Seleccionar]
public String toString(){
return super.toString();
}

Este método ya es heredado por ambas clases de su clase padre Legislador.
Valdría la pena sobreescribir el método si es que la clase Diputrado o la clase Senador aportaran algo nuevo al método, pero si solamente invocan al método de la super clase, entonces no habría falta sobreescribirlo, ya lo heredan.

Analízalo y cualquier duda lo volvemos a revisar.

33
Hola Rubens:

Estuve analizando tu ejercicio y lo veo bien, cumple a la perfección lo que se pide en el enunciado.
De todos modos creo que los métodos sobreescritos equals en la clase Cuadrado y en la clase Circulo podrían mejorarse haciendo uso de la herencia.

Dichos métodos podrían bien codificarse de la siguiente manera:

método equals de la clase Circulo:
Código: [Seleccionar]
    public boolean equals (Object obj){
        if (obj instanceof Circulo){
            return super.equals(obj);
        }

        else{
              return false;
        }

    }


método equals de la clase Cuadrado:
Código: [Seleccionar]
    public boolean equals (Object obj){
        if (obj instanceof Cuadrado){
            return super.equals(obj);
        }

        else{
              return false;
        }

    }


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

34
Hola Campillo:

Estuve revisando tu ejercicio y lo veo muy bien !!
A seguir adelante entonces.

35
Hola Campillo:

Estuve revisando tu ejercicio y está muy bien!
A seguir adelante entonces.

36
Hola Campillo:

Estuve analizando tu ejercicio y ahora lo veo mucho mejor. Veamos entonces algunas observaciones puntuales en las clases.

Respecto de la clase EntradaNumeroAleatorio, muy bien.

Respecto de la clase NumeroAleatorio, muy bien también. Simplemente podría hacerse un poco más corto el método setNumeroAleatorio() no definiendo el atributo tipo int y usar directamente el campo de instancia 'numero'. De esa manera el método quedaría:

Código: [Seleccionar]
    public void setNumeroAleatorio(){
        Random numAleatorio;
        numAleatorio = new Random();
        numero = (numAleatorio.nextInt(101));
    }

Respecto de la clase Test73, podríamos observar lo siguiente:
1) Las siguientes dos líneas no deberían existir ya que no contribuyen al código:

Código: [Seleccionar]
new NumeroAleatorio();
Código: [Seleccionar]
new EntradaNumeroAleatorio();
2) La condición while debe chequear desigualdad entre el número aleatorio y la entrada que ingresamos por teclado.

3) La siguiente línea debería estar fuera del ciclo do while, ya que de lo contrario estaríamos eligiendo un nuevo número cada vez que no acertamos.
Código: [Seleccionar]
numeroAleatorio1.setNumeroAleatorio();
4) Habría que cambiar el signo de desigualdad en la condicion else if.

5) La línea :
Código: [Seleccionar]
System.out.print("Has acertado.\n");Debería quedar fuera del bucle do while.

La clase con todos estos cambios quedaría de la siguiente manera.

Código: [Seleccionar]
public class Test73
{
    public static void main(String [] args){
        NumeroAleatorio numeroAleatorio1 = new NumeroAleatorio();
        EntradaNumeroAleatorio entrada1 = new EntradaNumeroAleatorio();
        System.out.println("\nSe ha generado un numero aleatorio entre 1 y 100, intente adivinarlo:");
        numeroAleatorio1.setNumeroAleatorio();
        do{
            entrada1.setEntrada();
            if ( numeroAleatorio1.getNumeroAleatorio() < entrada1.getEntrada() ){
                System.out.print("No has acertado: el numero es menor.Prueba otra vez.\n");
            }else if ( numeroAleatorio1.getNumeroAleatorio() > entrada1.getEntrada() ){
                System.out.print("No has acertado: el numero es mayor.Prueba otra vez.\n");
            }
        }
        while(numeroAleatorio1.getNumeroAleatorio() != entrada1.getEntrada());
        System.out.print("Has acertado.\n");
    }
}

Analízalo y cualquier duda estamos aqui para volver a revisarlo.

37
Hola Campillo!

Estuve analizando tu ejercicio y noto que aún mantienes la sentencia 'break' cuando su no inclusión le daría mayor robustez al bucle.
Por otro lado la consigna del ejercicio era utilizar la clase Random y tu utilizaste un método de la clase Math para generar el número aleatorio.

Sugeriría que revises estas puntos, y por otro lado tal vez sería recomendable utilizar más de una clase para resolver el problema.

Puedes guiarte de programas de otros compañeros del foro donde puedes recoger buenas ideas a la hora de volver a codificar el ejercicio:

https://www.aprenderaprogramar.com/foros/index.php?topic=2893.msg13143#msg13143

Saludos.

38
Hola Luis:

Estuve analizando tu ejercicio y veo que cumple con la consigna del ejercicio. Sin embargo tenemos que revisar un punto importante.

Utilizas un bucle while cuya condición es 'true'.

Es decir que el bucle while(true) será infinito hasta que se encuentre la sentencia break.

Bueno, he de decirte que esto no conforma una buena práctica, no corresponde a un buen diseño de bucle.

Siempre trataremos de resolver el problema evitando tener que salir del bucle a través de break.

Siempre intentaremos salir del bucle while cuando deje de cumplirse la condición entre sus paréntesis.

Para este caso particular la condición de abandonar el while lo podemos relacionar con la longitud de la palabra ingresada por teclado.

Código: [Seleccionar]
import java.util.Scanner;

public class Bucle
{
    public static void main(String[] args)
    {
        System.out.println("Ingrese un texto:");
        String teclado="";
        Scanner escaner=new Scanner(System.in);
        teclado=escaner.nextLine();
       
        int longitudPalabra=teclado.length();
        int c=0;
        while(c < longitudPalabra)
        {
         
            String letra="";
            letra=teclado.substring(c,c+1);
            System.out.println("Letra "+(c+1)+" :"+letra);
            c=c+1;
           
        }
       
    }
}

Analízalo y cualquier duda lo seguimos revisando.

39
Aprender a programar desde cero / Re:EJERCICIO CU00683B REALIZADO
« en: 12 de Agosto 2015, 17:14 »
Hola Ronald:

Muy buena respuesta. Te invito a que leas este post donde se profundiza un poco más la respuesta, y se explica también otra alternativa.

https://www.aprenderaprogramar.com/foros/index.php?topic=2354.msg11208#msg11208

Saludos.

40
Aprender a programar desde cero / Re:EJERCICIO CU00682B REALIZADO
« en: 12 de Agosto 2015, 16:50 »
Hola Ronald:

Estuve revisando tu ejercicio y está bien, pero tendríamos que revisar algunas cosas.

Respecto de la clase TipoPiedra:
No es necesario declarar un campo nombre, ya que podemos utilizar el objeto mismo cuando se requiera representar el nombre de las distintas piedras. Esto se hace utilizando el método toString() sobre el objeto tipo TipoPiedra.
Por otro lado, el campo peso que declaras sería mejor bautizarlo como pesoEspecifico ya que es lo que representa. Además al momento de asignarle su valor puedes utilizar la letra 'f' como sufijo del número para indicar al compilador que se trata de un tipo float y no de un tipo double.

Código: [Seleccionar]

package ejemplo;
/**
 * @author Ronald Mosquera
 */
//clase tipo enum
public enum TipoPiedra {
    CALIZA (1200f),
    MARMOL (1423.55f),
    PIZARRA (1325f),
    CUARZITA (1466.22f);
   
    private final float pesoEspecifico;
   
    //metodo constructor
    TipoPiedra(float pesoEspecifico){
        this.pesoEspecifico=pesoEspecifico;
    }
   
    public float getPesoEspecifico(){
        return pesoEspecifico;
    }   
}


Respecto de la clase TestPiedra:
Aquí utilizamos el método toString() sobre el objeto tipo TipoPiedra para imprimir por consola el nombre de la piedra (como lo indicábamos anteriormente).
Fíjate que también habría que hacer una pequeña operación matemática de multiplicación para saber cuánto pesan los distintos palet.

Código: [Seleccionar]

package ejemplo;
/**
 * @author Ronald Mosquera
 */
public class TestPiedra {
   
    public static void main(String [] args){
       
        TipoPiedra tipoPiedra = TipoPiedra.CALIZA;
         System.out.println ("\fLa piedra elegida por el usuario es " + tipoPiedra.toString()
                 + "\ncon un peso especifico de " + tipoPiedra.getPesoEspecifico() +" kg/m3" + "\n");         
         
         for (TipoPiedra tpiedra: TipoPiedra.values() ) {
             System.out.println ("Un palet de piedra " + tpiedra.toString() + " pesa " + 2.27*tpiedra.getPesoEspecifico() +" kg");
        }
    }   
}


Analízalo y cualquier duda lo seguimos analizando.

Páginas: 1 [2] 3 4 5 6 7 ... 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".