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 - Jorge lopez

Páginas: 1 ... 3 4 5 6 7 [8] 9 10 11 12 13
141
Aprender a programar desde cero / Re:ejercicio (CU00634B)
« en: 12 de Septiembre 2014, 03:05 »
 Hola alex!

para ejercicios de este tipo, te sugiero desarrollarlo indicando la pregunta, seguida de la respuesta. Ejemplo
Código: [Seleccionar]
a) A > 3: true
a) A > C: true
c) A < C: false
...

Con esto quien revisa tu ejercicio lo entiende mejor.
En cuanto a tu respuesta, solo has contestado una pregunta erróneamente.
Has contestado:
Código: [Seleccionar]
p) A > 3 && B >= 3 && C < -3: false
Aquí tenemos que se tienen que cumplir 3 condiciones para que la sintaxis sea verdadera (true) fácilmente se puede identificar que la primera condición se cumple puesto que 5 es mayor que 3 y que la segunda condición se cumple puesto que 3 no es mayor que 3 pero si es igual (3 >= 3) por tanto deduzco que te as confundido con los números negativos, para calcular esto debes de tener en cuenta que un numero negativo  es mayor que otro numero negativo mientras menor es su numero. Ejemplo: -10 es mayor que -100, y todo numero positivo es mayor que cualquier numero negativo. Por tanto -12 es menor que -3 (C < -3)

Saludos!

142
 A continuación adjunto en un archivo.rar mi propuesta sobre este ejercicio
Código: [Seleccionar]
Define una clase Figura de la que hereden otras dos clases denominadas Cuadrado y Círculo. La clase
figura debe tener al menos el campo dimensionPrincipal. Las clases Cuadrado y Círculo deben tener al
menos un método calcularArea que permita calcular el área a partir de la dimensión principal,
utilizando la fórmula matemática correspondiente. Además, sobreescribe el método equals para que
dos cuadrados sean iguales si tienen igual dimensión principal, y dos círculos idem. A continuación crea
un programa test donde crees varios círculos y cuadrados y hagas comprobaciones de igualdad usando
el método equals.
Saludos!

143
 Hola  BelCrow!

He verificado tu código y te comento que se puede notar que tienes dominio de lo que se necesita para realizar este ejercicio, sin embargo.

No estas diseñando un código que se corresponda con lo requerido en el enunciado del ejercicio, aun cuando empleas correctamente los métodos equals length y substring.

A continuación te dejo tu código editado (no completo) con lo necesario para que te enfoques en lo que pide el ejercicio, también e usado lo que es el condicional "if" con "else if".
Te sugiero que analices este nuevo código y que rediseñes tu código según lo que se pide.
 
Código: [Seleccionar]
//importacion de API's
import java.util.Scanner;
//clase
public class VerificadoDeEntradas
{
    //sin variables y sin constructor

    //metodo Main
    public static void main (String[]args)
    {
        System.out.println ("Escriba la palabra que sera verificada:");

        //variables locales
        Scanner entradaPorTeclado = new Scanner (System.in);
        String palabraIntroducida = entradaPorTeclado.nextLine ();
        int contadorDeLetras = palabraIntroducida.length();
        String primeraLetra = palabraIntroducida.substring (0,1);

        //if con else if, System.out.println
       if(contadorDeLetras<5 && primeraLetra.equals("a") || contadorDeLetras<5 && primeraLetra.equals("A"))
       { //Aqui concatenamos la primera letra de la cadena escrita, sea "a" o "A"------------|             |
         System.out.println("La Cadena Tiene Menos De 5 Caracteres y Comienza Por La Letra: " + primeraLetra);
       }
        else if(contadorDeLetras>=5 && contadorDeLetras<=15 && primeraLetra.equals("a") || contadorDeLetras>=5 && contadorDeLetras<=15 &&
        primeraLetra.equals("A"))
       {
          System.out.println("La cadena tiene entre 5 y 15 caracteres y comienza con la letra: " + primeraLetra);
       }
        else if(contadorDeLetras>15 && primeraLetra.equals("a") || contadorDeLetras>15 && primeraLetra.equals("A"))
       {
          System.out.println("La cadena tiene mas de 15 caracteres y comienza con la letra: " + primeraLetra);
       }
       else if(contadorDeLetras<5 && primeraLetra != "a" || contadorDeLetras<5 && primeraLetra != "A")
       {
         System.out.println("La Cadena Tiene Menos De 5 Caracteres y no comienza Por La Letra: a");
       }
    }       
}

Cualquier duda no dudes en preguntar.
Saludos!

144
Aprender a programar desde cero / Re:Ejercicio! entrega CU00692B
« en: 09 de Septiembre 2014, 00:55 »
 Parece que eres alérgico a las Ñ´s dongo  ;D
Ignoraba que podrían ocasionar problemas, tomare en cuenta sustituirlas (en el codigo)

En cuanto a @Override, también tomo nota.

Saludos!

145
Citar
Razona tú mismo: ¿el objeto de tipo estático declarado Taxi en el código de ejemplo anterior contiene a un objeto Vehículo en tiempo de ejecución?

¿Responderías ahora sí a la pregunta?

Ya lo he captado!

Para poder dar como respuesta, "SI" con relacion a el anterior codigo que utilice como ejemplo:
Citar
Vehiculo v1 = new Vehiculo(); //creamos un objeto de la super clase.

Taxi t1 = new Taxi(); //creamos un objeto de la subclase.

t1 = v1; //Error en compilación al tratar de hacer que la variable t1 apunte al objeto de v1.

t1 = (Taxi)v1; //La compilacion es posible gracias al "casting" pero en tiempo de ejecucion se optiene el siguiente error: java.lang.ClassCastException: CU00690B.Persona cannot be cast to CU00690B.Medico

es necesario realizar una conversion de tipos hacia abajo (que un objeto Vehiculo pase a almacenar un objeto Taxi)
mediante una sintaxis como v1 = t1; y luego hacer que t1 almacene un objeto v1 mediante un "Casting"
t1 = (Taxi)v1;

y aqui es donde entra tu codigo de ejemplo  Mario:
Código: [Seleccionar]
public class test {

    public static void main (String[] Args){

        Vehiculo v1 = new Vehiculo();
        Taxi t1 = new Taxi();
        v1 = t1;
        t1 = (Taxi)v1;
        System.out.println("Ejecuta");
    }
}

En este punto, cambio mi respuesta a la pregunta a) y contesto SI, gracias al "Casting" de tu comentario Mario ;D

Muchas gracias.

Saludos!

146
 Ejercicio:
Citar
Considera que estás desarrollando un programa Java donde trabajas con la superclase Profesor y la
subclase ProfesorEmerito. Crea el código para estas clases que cumpla los requisitos que indicamos.
Como atributos de la superclase tendremos nombre (String), edad (int) y añosConsolidados (int)
declarados como protected.

En la subclase se trabajará con el campo adicional añosEmerito declarado como private.
Un método de la subclase será double obtenerSalarioBase () que obtendrá el salario base como (925 +
añosConsolidados * 33.25 + 47.80 * añosEmerito).

Pregunta
Citar
Intenta acceder directamente al campo añosConsolidados desde la subclase (como si fuera un campo
más de la subclase) para implementar este método. ¿Es posible sin utilizar una invocación a super ni un
método get?
Respuesta
Puesto que la variable añosConsolidados esta declarada con el modificador de acceso "protected"
(acceso disponible para las subclases  de superclases y clases que usan otras clases en un mismo package)
si es posible acceder directamente a dicha variable, un ejemplo aceptable seria declarar el siguiente método en una subclase de la superclase Profesor:
Código: [Seleccionar]
@Override public double obtenerSalarioBase()
    {
      añosConsolidados = 10;
      return  925 + (añosConsolidados * 33.25) + (47.80 * añosEmerito);
    }
Pregunta
Citar
¿Qué ocurre si el atributo en la superclase lo declaras private?
Respuesta
En dicho caso, al intentar compilar el anterior método en una subclase de la superclase Profesor, obtendríamos el siguiente error en compilación: "añosConsolidados has private access in Profesor" indicando que la variable añosConsolidados esta definida con el modificador de acceso "private"
(acceso exclusivo de uso de esta variable en su clase padre)
por tanto, ni subclases de la superclase Profesor, ni otras clases que usen la clase Profesor, tienen acceso a dicha variable.

Saludos!

147
 Ejercicio:
Citar
Considera que estás desarrollando un programa Java donde trabajas con la superclase Profesor y la
subclase ProfesorEmerito. Crea el código para estas clases que cumpla los requisitos que indicamos.

Como atributos de la superclase tendremos nombre (String), edad (int) y añosConsolidados (int). Un
método de la superclase será double obtenerSalarioBase () que obtendrá el salario base como (725 + el
número de años consolidados multiplicado por 33.25).

En la subclase se trabajará con el campo adicional añosEmerito. Queremos hacer lo siguiente:
sobreescribir el método obtenerSalarioBase () en la subclase para calcular el salario base del profesor
emérito invocando mediante la palabra clave super al cálculo del salario base de Profesor y añadiéndole
la cantidad de (47.80 * añosEmerito).
public class Profesor
Código: [Seleccionar]
public class Profesor
{
    private String nombre, apellidos;
    private int edad, añosConsolidados;
    //Constructor general
    public Profesor()
    {
      nombre = "";
      apellidos = "";
      edad = 0;
      añosConsolidados = 0;
    }
    //Constructor con parametros
    public Profesor(String nombre, String apellidos, int edad, int añosConsolidados)
    {
      this.nombre = nombre;
      this.apellidos = apellidos;
      this.edad = edad;
      this.añosConsolidados = añosConsolidados;
    }
    //Setters
    public void setNombre(String nombre)
    {
      this.nombre = nombre;
    }
     public void setApellidos(String apellidos)
    {
      this.apellidos = apellidos;
    }
    public void setEdad(int edad)
    {
      this.edad = edad;
    }
    public void setAñosConsolidados(int añosConsolidados)
    {
      this.añosConsolidados = añosConsolidados;
    }   
    //Getters
    public String getNombre()
    {
      return nombre;
    }
    public String getApellidos()
    {
      return apellidos;
    }
    public int getEdad()
    {
      return edad;
    }
    public int getAñosConsolidados()
    {
      return añosConsolidados;
    }
    //Otros metodos
    public double obtenerSalarioBase()
    {
     return  725 + (añosConsolidados * 33.25);
    }
    public String mostrarInfoProf()
    {
      return "Nombre: " + nombre + "\nApellidos: " + apellidos + "\nEdad: " + edad + " años" + "\nAños consolidados: " +
      añosConsolidados + "\nSalario base: US$" + obtenerSalarioBase();
    }
}
public class ProfesorEmerito extends Profesor
Código: [Seleccionar]
public class ProfesorEmerito extends Profesor//En esta clase se implementa la herencia.
{
    private int añosEmerito;
    //Constructor general
    public ProfesorEmerito()
    {
      super();
      añosEmerito = 0;
    }
    //Constructor con parametros
    public ProfesorEmerito(String nombre, String apellidos, int edad, int añosConsolidados, int añosEmerito)
    {
      super(nombre, apellidos, edad, añosConsolidados);
      this.añosEmerito = añosEmerito;
    }
    //Setter
    public void setAñosEmerito(int añosEmerito)
    {
      this.añosEmerito = añosEmerito;
    }
    //Getters
    public int getAñosEmerito()
    {
      return añosEmerito;
    }
    //Otros metodos
    @Override public double obtenerSalarioBase()
    { //En este metodo se implementa la sobre escritura.
      return super.obtenerSalarioBase() + (47.80 * añosEmerito);
    }
    @Override public String mostrarInfoProf()
    { //En este metodo se implementa la sobre escritura.
      return "Nombre: " + getNombre() + "\nApellidos: " + getApellidos() + "\nEdad: " + getEdad() + " años" + "\nAños consolidados: " +
      getAñosConsolidados() + "\nAños emerito: " +
      añosEmerito + "\nSalario base: US$" + obtenerSalarioBase();
    }
}
public class TestPolimorfismoHerenciaYSobreEscritura
Código: [Seleccionar]
public class TestPolimorfismoHerenciaYSobreEscritura
{
    public static void main(String []args)
    {
      Profesor p1 = new Profesor("Felipe", "Duran Contreras", 35, 10);
      Profesor pE1 = new ProfesorEmerito("Adrian", "Romero Garcia", 48, 20, 12);//En la creacion de este objeto se implementa el polimorfirmo.
      String linea = "____________________________";
      System.out.println("Informacion sobre profesores:\n" + linea + "\n\t  Profesor\n" + linea + "\n" + p1.mostrarInfoProf() +
      "\n" + linea + "\n" + "      Profesor emerito\n" + linea + "\n" + pE1.mostrarInfoProf() + "\n" + linea + "\nFin de información a mostrar.");
    }
}
Saludos!

148
Aprender a programar desde cero / Re:ENTREGA:CU00659B
« en: 07 de Septiembre 2014, 00:20 »
 Hola momo!

Veo todo correcto, solo una pequeña recomendación:

Para mejorar a la vista lo mostrado por pantalla, es preferible que se muestre como se muestra en el ejemplo del ejercicio.

Ejemplo en el ejercicio:

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

En tu codigo:

Letra1:a
Letra2:v
Letra3:e

La cuestión es los espacios necesarios para una visualización mas fresca.

Saludos!

149
Aprender a programar desde cero / Re:Entrega CU00623B
« en: 06 de Septiembre 2014, 19:30 »
Hola  aleexx1724!

Algo común entre los nuevos usuarios en el foro es no usar el botón # ubicado arriba de la caja para escribir del foro al momento de pegar código, porque desconocen su uso.

Te explico: Cuando vayas a introducir el código de una clase primero pulsa el botón con el símbolo "#" que esta junto a los demás botones, caritas,ect. Al pulsarlo te aparecerán 2 etiquetas parecidas a estas: "[cod][/cod]" Luego en medio de estas dos etiquetas pegas tu codigo, ejemp: [cod]aqui tu codigo...[/cod]

Código: [Seleccionar]
Cuando previsualices o publiques, tu codigo saldrá como este.
Casi a todos nos pasa igual que ati en principio  ;D.

En cuanto al código, esta correcto con relación al ejercicio y solo veo dos puntos a comentar.

1ro: acostumbrate a declarar las variables de clase como private, ejemp: private String nombre; private int edad; private.... ; y asi las declaras todas.

2do: veo que tanto en el set como en el get de la variable nombre, has puesto como nombre de método setNomber y getNomber, tal vez fue un descuido o tal vez fue intencional, pero aunque esto no afecta el funcionamiento del código, no representa un código claro. El nombre de un método debe de reflejar lo que hace, o para que sirve, leyendo el nombre de tu metodo getNomber(); yo interpretaría que es un método que retorna el valor de la variable nomber, y esa variable no existe en el código, por tanto lo correcto seria: getNombre. lo mismo para el set.

En general tu código lo veo bien.

Saludos!

150
SOBREESCRIBIR MÉTODOS EN JAVA. TIPO ESTÁTICO Y DINÁMICO. LIGADURA.
MÉTODOS POLIMÓRFICOS.

Citar
a) ¿Un objeto de tipo estático declarado Taxi puede contener a un objeto Vehiculo en tiempo de ejecución?
No. Considerando lo siguiente:

Vehiculo v1 = new Vehiculo(); //creamos un objeto de la super clase.

Taxi t1 = new Taxi(); //creamos un objeto de la subclase.

t1 = v1; //Error en compilación al tratar de hacer que la variable t1 apunte al objeto de v1.

t1 = (Taxi)v1; //La compilacion es posible gracias al "casting" pero en tiempo de ejecucion se optiene el siguiente error: java.lang.ClassCastException: CU00690B.Persona cannot be cast to CU00690B.Medico
Citar
b) ¿Un objeto de tipo estático declarado Vehiculo puede contener a un objeto Taxi en tiempo de ejecución?
Si. Considerando lo siguiente:
Vehiculo v2 = new Taxi(); //El codigo compila y se ejecuta sin errores.
Citar
c) Escribe el código de una clase Vehiculo con los atributos matricula (String) y numeroDeRuedas (int), constructor, métodos getters y setters y método toString() para mostrar la información de un vehículo.
public class Vehiculo
Código: [Seleccionar]
public class Vehiculo
{
    private String matricula;
    private int numeroDeRuedas;
    public Vehiculo(String matricula, int numDeRuedas)
    {
      this.matricula = matricula;
      numeroDeRuedas = numDeRuedas;
    }
    //Setters
    public void setMatricula(String matricula)
    {
      this.matricula = matricula;
    }
    public void setNumeroDeRuedas(int numRuedas)
    {
      numeroDeRuedas = numRuedas;
    }
    //Getters
    public String getMatricula()
    {
      return matricula;
    }
    public int getNumeroDeRuedas()
    {
      return numeroDeRuedas;
    }
    //Otros metodos
    public String toString()
    {
      return "Matricula: " + matricula + "\nNumero de ruedas: " + numeroDeRuedas;
    }
}
Citar
d) Escribe el código de una clase Taxi que herede de vehículo y que además de los atributos de Vehiculo lleve un atributo adicional nombreDelConductor (String) y numeroDePlazas (int), constructor, métodos getters y setters y método toString() para mostrar la información de un Taxi.
public class Taxi extends Vehiculo
Código: [Seleccionar]
public class Taxi extends Vehiculo
{
    private String nombreDelConductor;
    private int numeroDePlazas;
    public Taxi(String matricula, int numDeRuedas, String nombreDelConductor, int numDePlazas)
    {
      super(matricula, numDeRuedas);
      this.nombreDelConductor = nombreDelConductor;
      numeroDePlazas = numDePlazas;
    }
    //Setters
    public void setNombreDelConductor(String nombre)
    {
      nombreDelConductor = nombre;
    }
    public void setNumeroDePlazas(int numPlazas)
    {
      numeroDePlazas = numPlazas;
    }
    //Getters
    public String getNombreDelConductor()
    {
      return nombreDelConductor;
    }
    public int getNumeroDePlazas()
    {
      return numeroDePlazas;
    }
    //Otros metodos
    public String toString()   
    {
      return super.toString() + "\nNombre del conductor: " + nombreDelConductor + "\nNumero de plazas: " + numeroDePlazas;
    }
}
Citar
e) Escribe el código de una clase test con el método main que cree un objeto cuyo tipo es Vehiculo, instanciado como Taxi. Establece valores para sus atributos y usa el método toString().
public class Test
Código: [Seleccionar]
public class Test
{
    public static void main(String []args)
    {
      Vehiculo t1 = new Taxi("DC-2030", 4, "Jason Statham", 2);
      System.out.println("Datos del taxi numero 1:\n\n" + t1.toString());
    }
}
Citar
¿Qué método toString() resulta de aplicación, el propio de la clase Vehiculo o el propio de la clase Taxi?
Se ejecuta el metodo toString(); sobre escrito en la clase Taxi.
Citar
¿Por qué?
Aunque el objeto esta declarado como tipo Vehiculo en tiempo de ejecución el JVM se basa en su tipo dinamico (Taxi) y entonces comienza la búsqueda de este método a partir de la subclase Taxi, de no encontrar este método sobre escrito en la clase Taxi, entonces ejecutaría el método también sobre escrito de la clase Vehiculo, el resultado en esta ocasión y debido a la acción que se le indica realizar a este método sobre escrito de la clase Vehiculo, seria imprimir por pantalla un String que contiene el valor de sus únicos dos campos de clase. De no encontrar este método sobre escrito en la clase Vehiculo, entonces lo busca en la clase (Object) padre de todas las clases.

Como siempre sus comentarios correctivos son siempre bienvenidos.

Saludos!

151
Aprender a programar desde cero / Re:Entrega: CU00658B
« en: 05 de Septiembre 2014, 23:49 »
Mirando tu codigo he notado que esta incorrepto con referencia al ejercicio, por ejemplo: si introducimos la palabra ave: tu programa devuelve :

Letra 1: v                                                                                 
Letra 2: e

Cuando deveria devolver:
                                                                                 
Letra 1: a
Letra 2: v                                                                                 
Letra 3: e

Para esto, deberias cambiar el valor inicial de "i" por 0 en ves de 1, y en el mensaje para mostrar evitarías que se imprima la secuencia:

0
1
2

si usas un contador como (i+1)

Tu código quedaría mas o menos así:
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaTeclado
{
    public static void main(String[] args)
    {
        System.out.println("Introdusca la Palabra ");
        String palabra="";
        Scanner escaneo=new Scanner(System.in);
        palabra=escaneo.nextLine();
        System.out.println("");
        for(int i=0; i<palabra.length(); i++)
        {
          String cadena=palabra.substring(i,i+1);
          System.out.println("Letra "+ (i+1) + ": " + cadena);       
        }
    }//cierre main
}//cierre clase

Saludos!

152
Aprender a programar desde cero / Re:ENTREGA:CU00657B
« en: 05 de Septiembre 2014, 22:46 »
 Hola momo!

Te indico que al código que as pegado le falta las llaves de cierre correspondientes a el main y la llave de cierre de la clase para que pueda compilar.

He revisado tu código y lo he editado (no esta todo resuelto) solo con lo necesario para que puedas resolverlo correctamente por ti mismo, te sugiero que leas y analices lo requerido por el ejercicio nuevamente.

En lo que he editado veras la forma difícil de indicar a tu programa que haga tal acción si la primera letra de la cadena es "a" o si es "A". si te interesa la forma fácil, investiga sobre el metodo equalsIgnoreCase("String"); y te sera bastante útil.

Cualquier duda no dudes en preguntar.

Saludos!

Código editado:

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

 public class EntradaTeclado{   
    public static void main(String[] args){       
     System.out.println("Por favor introdusca una cadena");
     String entradaTeclado="";
     Scanner entradaEscaner= new Scanner(System.in);
     entradaTeclado=entradaEscaner.nextLine(); 
     if(entradaTeclado.length()<5 && entradaTeclado.substring(0,1).equals("a") || entradaTeclado.length()<5 && entradaTeclado.substring(0,1).equals("A"))
     {//Aqui  usamos el operador || para que en caso de no cumplirce la 1ra condicion de este if, se evalue la 2da condicion (la que esta despues del operador ||)
       System.out.println("La Cadena Tiene Menos De 5 Caracteres y Comienza Por La Letra: " + entradaTeclado.substring(0,1)); //Aqui concatenamos la primera letra de la cadena escrita, sea "a" o "A"
     }
      else if(entradaTeclado.length()>=5 && entradaTeclado.length()<=15 && entradaTeclado.substring(0,1).equals("a") || entradaTeclado.length()>=5 && entradaTeclado.length()<=15 &&
      entradaTeclado.substring(0,1).equals("A"))
     {
        System.out.println("La cadena tiene entre 5 y 15 caracteres y comienza con la letra: " + entradaTeclado.substring(0,1));
     }
      else if(entradaTeclado.length()>15 && entradaTeclado.substring(0,1).equals("a") || entradaTeclado.length()>15 && entradaTeclado.substring(0,1).equals("A"))
     {
        System.out.println("La cadena tiene mas de 15 caracteres y comienza con la letra: " + entradaTeclado.substring(0,1));
     }
  }
}

153
Aprender a programar desde cero / Re:Ejercicio CU00649B
« en: 04 de Septiembre 2014, 18:17 »
 Todo ok!  ;)
Saludos!

154
Aprender a programar desde cero / Re:ENTREGA:CU00644B
« en: 02 de Septiembre 2014, 21:39 »
Hola momo!
He revisado tu código. Funciona y cumple con el ejercicio, pero se puede mejorar.

Siempre que programemos debemos optar por diseñar un código lo mas simple posible, debemos evitar cosas como hacer un código largo y rustico, cuando se puede hacer corto y simple (Simplificación)

1ro: Tienes una variable innecesaria, (double totalMultiplicacionDieces) puedes aplicar una sintaxis directa al return sin necesidad de crear esta variable, el return quedaría así:
Código: [Seleccionar]
return m * valor10;
2do: Si le pasas como parametros a tu metodo MultiplicadorPorDieces(double m, int n) los numeros (2.55, 2) en el return nos devuelve 254.99999999999997 cuando en el ejemplo del ejercicio devuelve 255.00

Para esto podrías usar un return como este:
Código: [Seleccionar]
return Math.round(m * valor10 * 100000) / 100000;
Esto es lo que de mi parte podrías mejorar.

Saludos!

155
 Pensar antes de actuar! como tu bien dices he ilustras en tu cuento (inventado  ;D) aplicar este concepto antes  de comenzar a diseñar un código (programa, app, ect...) nos hará el trabajo mas fácil a la hora de extender un proyecto. Pulgar arriba (like) para tu cuento inventado  ;D

En cuanto al switch en el main: cuando lo inserte al código, lo contemple y me pregunte: no habrá alguna otra forma mas genérica para esto  :-\ ?? trate de hacer algo mas eficiente por el mismo motivo que tu planteas (si fuese una cantidad muy grande de productos?).

Ahora que me sugieres el operador "instanceof" también he podido usar algo mas eficiente que el switch dada las circunstancias, como lo es el método "contains()" tal y como se muestra en el siguiente fragmento de código:
Código: [Seleccionar]
    while(copia.hasNext())
    {
      Producto producto = copia.next();
      if(producto.toString().contains("ProdFresco"))
      {
        tipoDeProd = "Producto fresco";
      }
      else if(producto.toString().contains("ProdRefrigerado"))
      {
        tipoDeProd = "Producto refrigerado";
      }
      else if(producto.toString().contains("PCongeladoPorAgua"))
      {
        tipoDeProd = "Producto congelado por agua";
      }
      else if(producto.toString().contains("PCongeladoPorAire"))
      {
        tipoDeProd = "Producto congelado por aire";
      }
      else if(producto.toString().contains("PCongeladoPorNitrogeno"))
      {
        tipoDeProd = "Producto congelado por nitrogeno";
      }
      else{}
      System.out.println("____________________________________________");
      System.out.println("\n" + i++ + ": " + tipoDeProd );
      System.out.println("____________________________________________");
      producto.verInfoDelProducto();
    }
Aun así, si me tocara elegir elegiria usar "instanceof"

Nuevamente: muchas gracias por tu aporte dongo

Saludos!

156
Aprender a programar desde cero / Re:Ejercicio! entrega CU00688B
« en: 02 de Septiembre 2014, 01:13 »
 Hola dongo!

Tanto el comentario de Mario Rancel (en mi anterior ejercicio CU00687B):
Citar
Pero aquí vemos que tenemos un atributo común entre refrigerados y congelados: temperatura de mantenimiento. Para evitar la duplicidad de atributos y métodos relacionados podemos crear una clase que agrupe a estas dos categorías, por ejemplo la llamaríamos ProdRefrigeradoOcongelado, y ahí dejaríamos el atributo temperatura de mantenimiento recomendada y sus métodos relacionados.
Como tu comentario:
Citar
Lo primero comentarte que ni tu esquema, ni tu forma de llevarlo a cabo  están mal, pero creo que las características comunes entre un producto Refrigerado y uno congelado son tan mínimas que no merece la pena crear una clase para que solo 2 objetos hereden de ella, si hubiera la posibilidad a lo mejor de que fueran 40, entonces si, merecería la pena crear esta clase. Esto solo es mi opinión, pero esto también dependerá mucho de lo que quieras hacer y de lo que te pidan.
Ambos me han servido de mucho provecho, aunque a simple vista estos dos comentarios parecieran contradecirse, es todo lo contrario! según lo e asimilado y con la ayuda de tu comentario, entiendo que agrupar atributos y métodos en común para diferentes clases, seria circunstancial.

Sobre lo que comentas a cerca de la clase ListaDeProductosParaEnviar y su cantidad de métodos "innecesarios"  también e asimilado el concepto de polimorfismo aplicado en esa clase, al conseguir sustituir el trabajo de todos esos métodos en un solo método tal y como me recomendaste.

Otro punto a corregir, y que se me escapo tanto a mi como a ti  ;D es que al ejecutar el main si te fijas las fechas (packingDate y expirationDate) no aparecen  como se espera según los parámetros que se le aplican para cada producto, en su lugar devuelve la fecha exacta actual. Esto también ya lo he corregido.

y nada! darte las gracias por tu continua disposición a colaborar con los que estamos comenzando a gatear, para que en un futuro caminemos con pasos mas firmes en java ;D

adjunto el archivo.rar con las mejoras recomendadas aplicadas.

Nota: he mantenido la clase ProdRefrigeradoOcongelado en el código, pero estoy totalmente de acuerdo con tu punto de vista:
Citar
creo que las características comunes entre un producto Refrigerado y uno congelado son tan mínimas que no merece la pena crear una clase para que solo 2 objetos hereden de ella, si hubiera la posibilidad a lo mejor de que fueran 40, entonces si, merecería la pena crear esta clase.
y lo tomare en cuenta para mis próximos códigos.

Saludos!

157
Concepto de polimorfismo y variables polimorficas en java.
Jerarquía de tipos.

Nota: Indicaciones a seguir para el correcto funcionamiento del código.
 1: Descargar y descomprimir el archivo.rar.
 2: Crear un package con nombre: CU00688B.
 3: Copiar los 10  archivos.java dentro de dicho package.
 4: ejecutar el método main de la clase TestHerencia4 mediante el IDE de su preferencia  ;D
Saludos!

158
Aprender a programar desde cero / Re:Ejercicio CU00639B curso java
« en: 31 de Agosto 2014, 17:48 »
 Te aclaro BelCrow.
haces una correcta referencia sobre lo que pide el enunciado del ejercicio de la entrega CU00640B, pero si te fijas, el ejercicio publicado en este hilo por momo, corresponde al ejercicio de la entrega CU00639B, donde solo pide un constructor.
Citar
Define una clase Bombero considerando los siguientes atributos de clase: nombre (String), apellidos
(String), edad (int), casado (boolean), especialista (boolean). Define un constructor que reciba los
parámetros necesarios para la inicialización y los métodos para poder establecer y obtener los valores
de los atributos. Compila el código para comprobar que no presenta errores, crea un objeto y
comprueba que se inicializa correctamente consultando el valor de sus atributos después de haber
creado el objeto.
Saludos!

159
Aprender a programar desde cero / Re:Ejercicio CU00639B
« en: 31 de Agosto 2014, 04:57 »
  Hola momo!

He revisado tu código y he notado que contrario a lo que pide el enunciado del ejercicio   
(pide un parámetro por cada variable)
has decidido  pasar al constructor de la clase solo algunos parámetros, los cuales inicializaran 3 de las 5 variables de la clase,  lo que no es problema si así lo has decidido. Los puntos que si serian conveniente corregir son los siguientes:

1: Todas las variables se deben declarar privadas, ejemp: private String nombre, private String apellidos, private ...ect.

2: Lo correcto es inicializar variables tipo boolean con valor false. Ejemp: casado = false; especialista = false.

3: Omites 3 de los 5 setters que requiere la clase. Esto no es conveniente,  las 3 variables que reciben su valor mediante parámetros en el constructor, son justo las 3 variables que se corresponderían con los setters faltantes. un parámetro en un constructor no sustituye el trabajo de un método setter, puesto que un método setter cambiaría el valor de la variable en cualquier momento, contrario a un parámetro en el constructor que solo asigna un valor a la variable cuando se crea un objeto.

Mediante un metodo setter para variables como casado y/o especialista, entonces podrías asignar como valor, true.

Que harías si tuvieses que cambiar el nombre del bombero luego de haber creado el objeto, o su apellido, o su edad?

Tu código compila y trabaja correctamente, pero mencionadas las debilidades anteriores, le falta eficiencia al diseño.

Saludos!

160
Aprender a programar desde cero / Re:practica CU00636B
« en: 27 de Agosto 2014, 18:10 »
 Al parecer te estas confundiendo y no has captado la idea:
Citar
De momento te recomiendo declarar todas las variables (solo las variables) de clase como private, para los métodos (setter, getters, otros...) de momento te recomiendo continuar declarándolos como public.
Ten en cuenta que las variables de clase, son las que declaras luego de "public class Rueda" por ejemplo, las variables de tu clase Rueda son: String tipo; double grosor; double diametro; y String marca.

Los métodos son algo diferente a las variables, en tu clase Rueda se pueden observar los métodos getters, los métodos setters y un método mas (comprobarDimensiones)

A continuación he editado tu codigo con el aspecto de diseño que debería llevar:
public class Rueda
Código: [Seleccionar]
public class Rueda
{
    private String tipo;
    private double grosor;
    private double diametro;
    private String marca;
    //Constructor
    public Rueda ()
    {
        tipo = "";
        grosor = 0.0;//Si es double, su valor debe de ser decimal, por eso se inicializa a 0.0.
        diametro = 0.0;
        marca = "";
    }
    //Setters
    public void setTipo (String valorTipo)
    {
        tipo=valorTipo;
    }

    public  void setGrosor (double valorGrosor)
    {
        grosor=valorGrosor;
    }

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

    public void setMarca (String valorMarca)
    {
        marca=valorMarca;
    }
    //Getters
    public   String getTipo () {return tipo;}

    public  double getGrosor () {return grosor;}

    public  double getDiamtro () {return diametro;}

    public  String getMarca () {return marca;}

    //aqui se agregan los If y Else en la practica.
    public  void comprobarDimensiones ()
    {
        if (diametro>1.4){
            System.out.println ("La rueda es para un vehículo grande");
        }
        else if (diametro<=1.4 && diametro>0.8) {
            System.out.println ("La rueda es para un vehículo mediano");
        }
        else {
            System.out.println ("La rueda es para un vehículo pequeño");
        }

        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");
        }
        else{}
    }
}
mira y compara tu código con este, fijate donde e recolocado los private y public.
y nada, no te detengas mucho a pensar el porque de esto, mas adelante aprenderas a dominar el tema
(todo a su tiempo)
Espero que ahora si captes la idea.
Saludos!

Páginas: 1 ... 3 4 5 6 7 [8] 9 10 11 12 13

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