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 8 ... 12
41
Muchas gracias Alex.
Y excelente el aporte del material para consultar. Saludos.

42
Ahora si perfecto Luis. A seguir adelante entonces!

43
Hola Luis:

Estuve revisando tu ejercicio y hay dos detalles a reveer:

1) El enunciado del ejercicio nos dice lo siguiente:
Citar
Por ejemplo si se introduce “ave” debe mostrar:

Letra 1: a
Letra 2: v
Letra 3: e

Por lo tanto, la línea:

Código: [Seleccionar]
letra=texto.substring(0,i+1);
debe ser reemplazada por:

Código: [Seleccionar]
letra=texto.substring(i,i+1);
2) Recuerda que el nombre de la clase debe empezar siempre con mayúscula.

Analízalo y cualquier duda lo analizamos nuevamente.

44
Hola Luis:

Estuve analizando tu ejercicio y lo veo bien. Igualmente hay algunos detalles a considerar para mejorar tu código.

Contestando a tus preguntas:
1) El método equals() está muy bien utilizado para determinar si la letra inicial de la palabra ingresada es una letra "a".
De todos modos te sugerería que en vez de utilizar el método equals() usaras el método equalsIgnoreCase() para que no discrimine si comienza con una letra "a" o una letra "A".

2) Los métodos lenght() y substring() están muy bien usados también.

Por otro lado habría que hacer una modificación en la línea:

Código: [Seleccionar]
if(y>5 && y<15)
por

Código: [Seleccionar]
if(y>=5 && y<=15)
ya que de lo contrario no estaría contemplada la opción cuando la palabra ingresada tiene 5 letras o 15 letras.

Y como sugerencia final: recomendaría nombrar los atributos con nombres más significativos. Por ejemplo el atributo 'x' podría llamarse más bien 'letraInicial', y el atributo 'y' podría bien llamarse 'longitudPalabra'. Estos nombres están más ligados a lo que representan, y nos va a servir por si en un futuro (u otro programador) tuviera que trabajar sobre el código.

45
Hola Guille:

Bueno, para responder a tu pregunta con solidéz argumental y espaldas para sostener lo dicho creo que deberíamos invocar a alguien con más estrellas y galardones en su uniforme que las que luzco yo.  ;D

Hasta que eso suceda me arriesgaría a decir que el uso de la sentencia break cuando el bucle puede ser resuelto sin él, evidencia un pobre diseño.
De todos modos no creo que se trate de un mero hecho estético evitar el break, sino que pienso podría estar relacionado con  cuestiones de diseño de estructura y solidez.
Igualmente convengamos también que el uso del break no es un error, de hecho forma parte del set de sentencias de Java.

46
Hola Guille!

Primeramente he de darte la bienvenida al foro ya que veo que es tu primera publicación, bienvenido!

Analizando tu ejercicio veo que lo has hecho muy bien, felicitaciones por ello.
Lo único para observar que tengo por mi parte es respecto a la utilización de la sentencia 'break' que empleas para salir del bucle while.
Si bien es válida la utilización de 'break' siempre trataremos de eviarla, diseñando los bucles de tal manera que nuestra salida del while sea más limpia, es decir: cuando la condición impuesta en while deja de cumplirse.

En este caso particular de tu ejercicio, la utilización del break no era necesaria. Reescribo el código eliminando el último 'else' (y convietiendo el último 'else if' en 'else').

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

public class Ejercicio
{
    public static void main(String [] args)
    {
        String entrada1 = "";
        String entrada2 = "";
       
        System.out.println("Introduce la primera palabra:");
        Scanner scanner1 = new Scanner(System.in);
        entrada1 = scanner1.nextLine();
       
        System.out.println("Introduce la segunda palabra:");
        Scanner scanner2 = new Scanner(System.in);
        entrada2 = scanner2.nextLine();
       
        int k = 0;
       
        while (entrada1.length() > k || entrada2.length() > k)
        {
            k+=1;
            System.out.println("¿Letra " +k+ " igual en las dos palabras?");
            if(entrada1.length() >=k && entrada2.length() >= k)
            {
                if(entrada1.substring(k-1,k).equals(entrada2.substring(k-1,k)))
                {
                    System.out.println("Si");
                }
                else
                {
                    System.out.println("No");
                }
            }
            else if (entrada1.length() < k)
            {
                System.out.println("La primera palabra no tiene letra " + k);
            }
            else
            {
                System.out.println("La segunda palabra no tiene letra " + k);
            }
           
        }
    }
}

Analízalo y cualquier duda estamos aquí para volverlo a revisar.

47
Hola Campillo!

Estuve revisando tu ejercicio y por mi parte lo veo muy bien.
Has utilizado una doble condición de control del ciclo for mediante el operador 'or', lo cual no lo he visto muy seguido, pero funciona muy bien. Además el código queda más compacto sin tener que utilizar atributos auxiliares para realizar las comparaciones.
Lo único que yo acotaría (solo como un detalle cosmético), mejorar los mensajes por consola a la hora de informar el resultado de las comparaciones, ajustándose a lo pedido por el ejercicio.

A seguir adelante!

48
Hola Adrián:

Estuve revisando tu ejercicio y lo veo muy bien. Solamente haría una observación que sería respecto a las clases Diputado y Senador.
Tal como están codificadas estas clases, daría la impresión de que el atributo 'camaraEnQueTrabaja' debiera haber sido declarado en la clase abstracta y así heredado por ambas clases para optimizar el diseño de las clases.
Otro detalle: si analizamos las clase Senador y Diputado son exactamente iguales, duplicidad de código, y esto no sería óptimo.

Mi sugerencia sería la siguiente:
Como al momento de instanciar un objeto tipo Diputado ya estoy conociendo de antemano que trabaja en la 'Cámara Baja', entonces no sería necesario que sea un atributo que pudiera contener otro valor. Lo mismo sucedería con los objetos tipo Senador.
Por lo tanto eliminaría el atributo 'camaraEnQueTrabaja' de ambas clases.

De esta manera, la clase Diputado podría codificarse:

Código: [Seleccionar]
public class Diputado extends Legislador{
   
    public Diputado(String nombre, String apellidos, int edad, String provinciaQueRepresenta)
    {
        super(nombre, apellidos, edad, provinciaQueRepresenta);
    }

    public String getCamaraEnQueTrabaja() {
        return "Cámara Baja";
    }
   
    public String toString() {
        return super.toString().concat("\nCamara en que trabaja: Cámara Baja");
    }
}

Y muy parecida sería la clase Senador (la única diferencia sería que habría que cambiar "Camara Baja" por "Cámara Alta").
Luego habría que eliminar el parámetro que ya no existe al momento de instanciar los objetos en la clase Test.

Analízalo y cualquier incoveniente seguimos discutiéndolo. Saludos!


49
Hola Adrián:

No, el método equals() si debe ser sobreescritos tanto en la clase Circulo como en la clase Cuadrado ya que antes de comprobar que tienen el mismo valor del campo dimensionPrincipal, hay que verificar que estemos comparando el mismo tipo de subclase de Figura. De lo contrario nos daría 'true' si comparamos un objeto tipo Triangulo con el mismo valor de dimensionPrincipal que un objeto tipo Cuadrado.

Analízalo y si hay dudas lo seguimos analizando.

50
Hola Adrián:

Estuve revisando tu ejercicio y lo veo bien. De todos modos haría algunas observaciones para mejorarlo aún más.

Respecto de la clase Figura
:
Reescribo el código de dos de sus métodos para ir explicitando las sugerencias.

Código: [Seleccionar]
    @Override
    public String toString() {
        return ((Double)getDimensionPrincipal()).toString();
    }

    @Override
    public boolean equals(Object Obj) {
        if (Obj instanceof Figura) {
            Figura tmpFigura = (Figura)Obj;
            if (dimensionPrincipal==tmpFigura.dimensionPrincipal) {   
                return true;
            } return false;
        } return false;
    }
}

Fíjate que he incluido el tag @Override sobre las clases que sobreescribimos, que viene siendo muy útil para ir teniendo en cuenta los métodos que se van sobreescribiendo.
Otro detalle importante es -hablando del método sobreescrito equals- qué consideración imponemos para determinar que dos objetos Figura son iguales.
Como dos figuras serán iguales siempre que sus atributos dimensionPrincipal (tipo primitivo double) sean iguales, entonces esa comprobación habría que hacerla de la siguiente manera:

Código: [Seleccionar]
if (dimensionPrincipal == tmpFigura.dimensionPrincipal) {
Respecto de la clase Circulo
:
Solo un detalle menor en el método sobreescrito equlas(), reescribo el código.

Código: [Seleccionar]
    @Override
    public boolean equals (Object Obj) {
        if(Obj instanceof Circulo) {
            Circulo tmpCirculo=(Circulo)Obj;
            if(super.equals(tmpCirculo)) {
                return true;
            } return false;
        } return false;
    }

Fíjate que la única modificiación es sobre la línea del segundo if.
Ya que el valor del area varía en función del atributo dimensión principal unicamente, es redundante hacer ambas comprobaciones, ya que si las dimensiones principales son las mismas indefectiblemente lo serán sus áreas (y viceversa).

Respecto de la clase Cuadrado:
Misma observación que para la clase Círculo.

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

51
Hola Luis:

Estuve revisando tu ejercicio y lo veo muy bien.
Fíjate solamente que para cumplir de manera completa con la consigna que el ejercicio plantea, faltaría crear un segundo Constructor que no reciba parámetros.

Saludos.

52
Hola Luis:

Es correcta la alternativa de código que sugieres. Bien podría haberse usado el parámetro 'numeroDeDepositosGrupo' para realizar la asignación al campo de instancia 'numeroDepositosGrupo'.


Saludos.

53
Hola Adrián:

Analizando las correcciones que realizaste noto que has reagrupado los atributos comunes en las clases padres, eso lo veo bien.

Lo que no veo bien es que eliminaste la clase intermedia ProductoRefrigeradoOCongelado que era un gran acierto. Te había indicado:

Citar
De esta manera el esquema que definiste se mantedría igual, solamente cambiarían los campos que cada clase declara.

Fíjate que en el post anterior también te había sugerido que la clase ProductoRefrigeradoOCongelado declarara un solo campo de instancia: temperatura de mantenimiento recomendada (atributo común tanto a los productos congelados como a los productos refrigerados).

Respecto de la nueva clase ProductoFresco: sería aún más corta de lo que codificaste ¿por qué? porque debido a la herencia no hace falta volver a declarar los métodos que hereda de la clase Producto. Recuerda que ProductoFresco heredará todos los campos de instancia y los métodos de la clase padre Producto.
Los objetos tipo ProductoFresco unicamente necesitarán los campos y métodos heredados.

Por tanto esta nueva clase será:

Código: [Seleccionar]
package CU00688B;
import java.util.Calendar;

public class ProductoFresco extends Producto {
   
    public ProductoFresco (int numeroLote, Calendar fechaCaducidad,
                            Calendar fechaEnvase, String paisOrigen) {
        super(numeroLote, fechaCaducidad, fechaEnvase, paisOrigen);
    }

}

Respecto de la clase ProdCongPorAire: definiste bien los métodos set para cada campo de instancia, pero no veo bien el método getComposicion(). Dejaría la salida por consola solo en el método mostrarProducto().
Definiría un método get para cada campo de instancia, de la misma manera que lo hiciste con los métodos set.

Muy bien la clase EnvioDeProductos a la que hemos dedicado un párrafo anteriormente, y muy bien tambien las restantes clases.

Saludos.

54
Hola Adrián:

Estuve revisando tu ejercicio. Lo veo bien pero creo que habría que hacer algunos cambios.

Respecto de la clase TestHerencia4: no creo que la lista ArrayList<Producto> deba ser un atributo del método main.
Pienso que el método main deberia tener como atributo un objeto tipo EnvioDeProducto que corresponderá a un pedido realizado por un cliente determinado.

Respecto de la clase EnvioDeProducto:
Creo que la lista ArrayList<Producto> debería ser su campo de instancia.
De esta manera (la lista como campo de instancia de la clase EnvioDeProducto), podrás crear en un futuro tantos objetos EnvioDeProducto como pedidos hagan los clientes. Cada objeto EnvioDeProducto corresponderá a un pedido realizado.

Si un cliente solicita un envio a domicilio, crearíamos un objeto tipo EnvioDeProducto el cual contendría todos los productos que solicite.
Si un segundo cliente nos hace un encargo de productos para su restaurante, creamos otro objeto tipo EnvioDeProducto conteniendo todos los productos que le son indispensables para su restaurante.

En la clase EnvioDeProducto tendría un método para agregar productos a la lista y otro método que me muestre la lista completa (a través de un iterador).

Pero es conceptualmente importante pensar que el objeto EnvioDeProducto posea una lista de los productos elegidos, y sus métodos.
De la manera en que lo pensaste tu, la lista es solo un atributo del método main de la clase Herencia4.

Respecto de la organización de las clases: está muy bien, pero creo que podría ser aún más eficiente y poner en práctica los conceptos de herencia.
Fíjate que todos los productos, tienen los campos comunes: fecha de caducidad y nro. de lote, como bien los definiste tu en la clase Producto.
Sin embargo, podemos notar que los campos: fecha de envasado y pais de origen, también son comunes a TODOS los productos, tanto de los productos frescos, como de los productos refrigerados, como de los productos congelados.
Entonces, en vez de definir esos campos en cada clase, sería mejor definirlos en la clase Producto directamente.
Deberíamos por lo tanto agrupar todos los campos comunes en las clases padres y luego que las clases hijas vayan declarando los campos que no sean comunes.

De esta manera el esquema que definiste se mantedría igual, solamente cambiarían los campos que cada clase declara.

Clase Producto: fecha de caducidad, nro. de lote, fecha de envasado, pais de origen.
Clase ProductoRefrigeradoOCongelado: temperatura de mantenimiento recomendada.
Clase ProductoFresco: no declara nuevos campos (son los mismos campos de la clase padre Producto).
Clase ProductoRefrigerado: codigo OSA.
Clase ProductoCongelado no declara nuevos campos (son los mismos campos de la clase padre ProductoRefrigeradoOCongelado).
Clase ProdCongPorAgua: salinidad.
Clase ProdCongPorAire: porcentaje de Ni, porcentaje de O2, porcentaje de CO2, porcentaje de vapor de agua.
Clase ProdCongPorNitrogeno: tiempo de exposicion, y metodo empleado.

Respecto de la clase Clase ProdCongPorAire:
Fíjate que declaras 4 campos de instancia, por tanto deberás tener 4 métodos set y 4 métodos get en la clase. Y los métodos get deben simplemente retornar el valor, no sacarlos por consola.
Para sacar por consola todos los valores de los campos que posee la clase con sus respectivas leyendas está el método mostrarProducto().

55
Hola niurkafer:

El error que recibes se debe a que escribiste solamente el cuerpo del método: el primer if con su else if y su else, y el segundo if. Pero ese es el cuerpo del método solamente. Olvidaste escribir la signatura del método y encerrar el cuerpo del método entre llaves.

Respecto al Constructor de la clase, los campos de instancia debería ser inicializados a valor por defecto.

Respecto de los métodos que establecen los valores de los campos de instancia, ellos deben comenzar con un prefijo 'set'. De esta manera el método que establece el valor del campo de instancia diametro debería llamarse setDiametro y no simplemente diametro.
Si bien esta omisión del prefijo 'set' no generará un error al compilarlo ya que no es un error realemente, es una convención que respetamos todos los programadores a la hora de escribir código.
En ese mismo orden también te sugeriría cambiar el nombre de los parámetros. El parámetro 'valordiametro', debería ser 'valorDiametro'.

Recuerda siempre respetar todos las convenciones a la hora de nombrar atributos, calses, y métodos.

A continuación reescribo tu ejercicio con las correcciones citadas (había también un error de signo '<' en la comprobación del diamétro).

Código: [Seleccionar]
public class Rueda {
    public String tipo;
    public double grosor;
    public double diametro;
    public String marca;

    public Rueda (){//constructor
        tipo = "";
        grosor = 0;
        diametro = 0;
        marca = "";
    }// cierre del constructor

    public void setTipo (String valorTipo) { //comprobarDimensiones
        tipo = valorTipo;
    } //Cierre del método

    public void setGrosor (double valorGrosor) {
        grosor = valorGrosor;
    } //Cierre del método

    public void setDiametro (double valorDiametro) {
        diametro = valorDiametro;
    }

    public void setMarca (String valorMarca) {
        marca = valorMarca;
    }

    public void comprobarDimensiones(){
        //if con else if y cláusula final else
        if (diametro > 1.4) {System.out.println ("La rueda es par au  vehiculo Grande");}
        else if (diametro <= 1.4 && diametro > 0.8) {System.out.println ("La reuda es para un vehivulo mediano"); }
        else {System.out.println ("La reuda es para un vehiculo pequeno");}

        if (diametro > 1.4 && grosor < 0.4 || diametro <= 1.4 && diametro > 0.8 && grosor < 0.25 )
        {System.out.println ("El grosor para esta rueda es inferior al recomendado");}
    }

   
    public String getTipo () { return tipo; } //Cierre del método

    public double getGrosor () { return grosor; } //Cierre del método

    public double getDiametro () { return diametro;}

    public String getMarca () { return marca; } //Cierre del método

}

De todos modos, y a modo de sugerencia, te recomendaría seguir las entregas previas a esta y realizar sus ejercicios también (por si no los has realizado), ya que todos los conocimientos vienen siendo siempre acumulativos.

56
Hola Luis:

Estuve revisando tu ejercicio y lo veo perfecto!

Un único detalle (error de tipeo seguramente):

Código: [Seleccionar]
public double valorbsoluto(double a)
debería ser:

Código: [Seleccionar]
public double valorAbsoluto(double a)

Saludos! A seguir adelante.

57
Hola Ronald:

Está muy bien. Creo acertada esa elección de nombres para dichos métodos.
Igualmente considera para los ejercicios siguientes la recomendación que te hacía respecto de los nombres que elegimos para los parámetros de los métodos.

A seguir adelante entonces!

58
Hola Adrián:

Lo que comentas es muy destacable: es muy bueno investigar un poco más.
Buscar información en el API de java es una recomendación que yo haría ya que en ella está documentada toda la información que necesitamos sobre clases, métodos, constructores, etc. Es una buena costumbre empezar a familiarizarnos con ella.
También es saludable leer otros códigos e interpretarlos. Por eso leer el código realizado por algun otro compañero del foro es muy aprovechable, es otra forma de aprender y ver nuevas ideas o estrategias que no habíamos contemplado.

Saludos!

59
Hola Ronald:

Tu ejercicio está muy bien! Has utilizado muy bien los tags y los comentarios.

Una recomendación solamente para hacerte.Rebautizaría el nombre de los métodos raizCuadrada y valorAbsoluto por calculaRaizCuadrada y calculaValorAbsoluto. Creo que sería más concordante de esa manera ya que es lo que el método hace. Este tipo de nombres de métodos está más en sintonía con lo que hace el método. Recuerda otros nombres de métodos visto anteriormente: dimeTipoMotor, setNombre (que traducido sería estableceNombre), etc.

De la misma manera, a los parámetros de esos métodos los rebautizaría como valorNumerico. Ya que nombres como valorAbsoluto o raizCuadrada podria dar lugar a una malinterpretación al pensar que dichos parámetro ya son el valor absoluto o la raiz cuadrada, cuando en realidad estos parámetros son los valores sobre los que queremos trabajar dentro del método.

Transcribo a manera de sugerencia cómo podrían quedar estos dos métodos, haciendo además una pequeña modificación sobre los comentarios de la etiqueta @param

Código: [Seleccionar]
    /**
     * Metodo que devuelve un valor absouluto
     * @param valorNumerico El parametro valorNumerico corresponde
     * al número sobre el que se quiere calcular el valor absoluto.
     * @return El valor absorAsoluto de un numero
     */
    public double calculaValorAbsoluto(double valorNumerico){
        return Math.abs(valorNumerico);
    }
    /**
     * metodo que devuelve una raiz cuadrada
     * @param valorNumerico El parametro valorNumerico corresponde
     * al número sobre el que se quiere calcular la raíz cuadrada.
     * @return El valor de la raiz cuadrada de un numero
     */
    public double valorRaizCuadrada(double valorNumerico){
        return Math.sqrt(valorNumerico);
    }


60
Hola Adrián:

Estuve revisando tu ejercicio y lo veo perfecto! Veo que has utilizado conceptos que se ven en la clase siguiente como es el método values(), combinado muy bien con el for-each.

A seguir adelante!

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