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.


Temas - Lorenzo31

Páginas: 1 2 3 [4] 5 6
61
Buenas tardes a todos :) , quiero dejar mi ejercicio modificado para hacer una pregunta, porque en este caso se usa la interface Iterator pero no la Iterable, como en el ejercicio 912?? dejo link del 912.

https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=589:interface-iterable-y-metodo-iterator-api-java-recorrer-colecciones-ejercicio-y-ejemplo-resuelto-cu00912c&catid=58:curso-lenguaje-programacion-java-nivel-avanzado-i&Itemid=180

La razón puede ser que en ese ejemplo se usaba como campo de clase donde agregar Personas un  array[] y no ArrayList y por lo tanto ArrayList ya implementa Iterable ?

Perdonad la pregunta (tengo un poco de lio) pero intento asimilar los conceptos poniendolo en practica, aclarar que hice mi ejercicio antes de leer el ejercicio resuelto, aunque el remove() me costó, ahora lo entiendo.

Gracias de antemano como siempre por el tiempo y las molestias.

62
Buenas noches, quería consultar este tema, primero porque por su complejidad me gustó pero a la vez me dejo dudas.

https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=589:interface-iterable-y-metodo-iterator-api-java-recorrer-colecciones-ejercicio-y-ejemplo-resuelto-cu00912c&catid=58:curso-lenguaje-programacion-java-nivel-avanzado-i&Itemid=180

La primera es, que diferencia hay entre usar el import java.util.Iterator; y invocar el metodo iterator() como haciamos siempre en el curso "java desde cero" y implementar la Interface Iterable y Iterator.
La respuesta es que permite un trato mas "personalizado" de los metodos next() hasNext()... ? es lo que se me ocurre a botepronto.


Después he observado que en el for-each interviene tambien la Interface Iterator.

Hay algun ejercicio que pueda realizar para practicar este tema ? o documentación adicional clarificadora que alguien sepa que hay por la red?

Gracias de antemano como siempre. Es un tema que me ha dejado un poco el culo torcio, no por no entenderlo sino porque es complejo de replicar y saber cuando usarlo.

63
Buenos días, a la espera de la corrección del ejercicio CU00697B, di por finalizado el curso "Java desde cero" de aprenderaprogramar. Comentar que pasados estos dias de puente empezaré el avanzado, no me iré! jeje

Y bueno empezaré a ayudar más activamente a los que inicien el curso.

Ha sido un curso excelente, mis agradecimientos a todos desde Mario, Ogramar, Alex, Javi, Toni ...(seguro que me dejo muchos) pero, un agradecimiento infinito y sigo aquí con vosotros no desaparezco, gracias por el tiempo dedicado y los conocimientos transmitidos.

;) La semana que viene os doy la lata con el avanzado ya.

64
Buenas dejo mi solución del ejercicio. Comentar que he modificado algo, he creado una clase abstracta intermedia, entre la interface Edificio y los dos tipos actuales de edificios, clase llamada Edificacion. El resto creo que hago todo lo que pide el ejercicio.

Mil gracias tienes razón, adjunto el correcto ;)


65
Buenas tardes, interesantisimo el tema de interface, aunque me temo que costará asimilarlo todo.

Antes de nada dos erratas en el texto que vi, la segunda me trajo un poco loco hasta que entendí.

Citar
Una clase puede implementar uno o varios interfaces en Java (se indica con extends NombreInterface1, NombreInterface2, …etc.), pero sólo puede extender una clase. Implementar varios interfaces en una sola clase es lo más parecido que tiene Java a la herencia múltiple.
ahí es implements.

Citar
c) En algunos casos es igual de viable definir una clase como interfaz que como clase abstracta, pero puestos en esta situación preferiremos optar por una interfaz porque es más flexible y extensible: nos va a permitir que muchas clases implementen la interfaz (aprovechamos la herencia múltiple de las interfaces). En cambio, una clase abstracta sólo nos permite que una clase herede de ella.
sería; una clase solo puede heredar una clase, abstracta (o no) no varías, cosa que si puede implementar varias interfaces. Me obligó a buscar porque clase abstracta, la pueden extender varias clases ;)

Dicho esto, mis respuestas que alguna, no tengo segura del todo.

Pregunta
a) ¿Una clase puede heredar de dos clases en Java?
Respuesta
No, una clase solo puede extender una clase, heredar de ella.

Pregunta
¿Una interface Java puede tener métodos que incluyan una sentencia while? ¿Una interface Java puede tener métodos que incluyan una sentencia System.out.println?
Respuesta
No y no, solo definen metodos, que deben ser sobreescritos (o en este caso escritos) por las clases que implemente la interface.

Pregunta
¿Un objeto Java puede ser del tipo definido por una interface? ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que no implementa la interface? ¿Un objeto Java puede ser al mismo tiempo del tipo definido por una interface y del tipo definido por una clase que implementa la interface?
Respuesta
Sí, definido si, inicializado debe ser con una clase concreta.

 La segunda pregunta;
Pensandolo diría que no, pues si haces List <String> miLista; luego debe ser inicializada con alguna que implemente List. Pero, y si la clase extiende de ese tipo? aunque no implemente la interface, aunque claro entonces no podria tener las propiedades o metodos de la interfaz. La respuesta es NO.

Y la ultima es sí, como el ejemplo anterior List <String> miLista = new ArrayList <String>();

66
Citar
Declara una clase abstracta Legislador que herede de la clase Persona, con un atributo provinciaQueRepresenta (tipo String) y otros atributos. Declara un método abstracto getCamaraEnQueTrabaja. Crea dos clases concretas que hereden de Legislador: la clase Diputado y la clase Senador que sobreescriban los métodos abstractos necesarios. Crea una lista de legisladores y muestra por pantalla la cámara en que trabajan haciendo uso del polimorfismo.

Buenas tardes, dejo aquí la solución a mi ejercicio (para descargar pulsar en el icono del archivo estando logado en el foro), comentar que distingo entre años de senador y años de congresista, porque así en una ampliación del programa se podria distinguir si esa persona concreta a llevado X como senador y X como congresista.

Descarté al final usar enums para la camara que representan pues al seleccionar 1 o 2 ya sabía si era senador o congresista en el modelo que planteo de menu.



67
Buenas dejo aquí mi solución del ejercicio. Sin más y muy interesante lo de sobreescribir equals, y cualquier método, que en tiempo de ejecución busca si la instancia a la que apunta en ese momento tiene sobreescrito X método del contenedor.

Por cierto no he sido capaz de detectar con esta configuración de ejercicio ningun elemento comun en la clase Figura, si fuera mas extenso supongo que saldría algo.

Clase Figura

Código: [Seleccionar]

/**
 * Clase Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Figura{
   
    public Figura(){ /*vacio*/ }

}


Clase Circulo

Código: [Seleccionar]

/**
 * Clase Circulo extiende a Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Circulo extends Figura {

    private double radio;
    private final static double PI = 3.1416;

    //Constructor
    public Circulo(double radio){
        this.radio = radio; }

    //Setter   
    public void setRadio(double radio){ this.radio = radio; }

    //Getters
    public double getRadio(){ return radio; }

    public double getPi() { return PI; }

    //Método calcular area
    public double calcularArea(){ return PI * Math.pow(radio,2); }

    //Método sobreEscrito Equals

    public boolean equals(Object obj){
        if (obj instanceof Circulo){ Circulo temp = (Circulo) obj;
            if( this.radio == temp.getRadio() ) { return true; } else { return false; }
        }else { return false; }
    }


}


Clase Cuadrado

Código: [Seleccionar]


/**
 * Clase Cuadrado extiende a Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Cuadrado extends Figura {

    private double lado;

    //Constructor
    public Cuadrado(double lado){
        this.lado = lado; }

    //Getter
    public double getLado(){ return lado; }

    //Setter
    public void setLado(double lado){ this.lado = lado; }

    //Método calcular area
    public double calcularArea(){ return Math.pow(lado,2); }   

    //Método equals sobreescrito
    public boolean equals(Object obj){
        if(obj instanceof Cuadrado){ Cuadrado temp = (Cuadrado) obj;

            if (this.lado == temp.getLado() ){ return true; } else { return false; }

        }else { return false; }
    }   
}


Clase TestIgualdad

Código: [Seleccionar]

/**
 * Clase TestIgualdad.  Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */
public class TestIgualdad {
   
    public static void main (String [] args) {
       
        Circulo circulo1 = new Circulo(5.5);
       
        Circulo circulo2 = new Circulo (6.5);
       
        Circulo circulo3 = new Circulo(5.5);
       
       
        Cuadrado cuadrado1 = new Cuadrado(4.1);
       
        Cuadrado cuadrado2 = new Cuadrado(4.1);
       
        Cuadrado cuadrado3 = new Cuadrado(4.3);
       
       
        System.out.println("Son iguales el cuadrado1 y el cuadrado2: " + cuadrado1.equals(cuadrado2));
        System.out.println("Son el mismo objeto cuadrado1 y cuadrado2: " + (cuadrado1 == cuadrado2));
       
        System.out.println("Son iguales el cuadrado1 y el cuadrado3: " + cuadrado3.equals(cuadrado1) );
       
        System.out.println("Son iguales el circulo1 y el circulo2: " + circulo2.equals(circulo1) );
       
        System.out.println("Son iguales el circulo1 y el circulo3: " + circulo1.equals(circulo3) );
    }
}

68
Buenas, dejo aquí mi solución al ejercicio. Simple el ejercicio pero interesante lo de protected para metodos y constructores, que pueden ser nombrados como propios por las subclases o mismo package.

Clase Profesor

Código: [Seleccionar]


/**
 * Clase Profesor. Ejercicio 692
 *
 * @author Lorenzo31
 * @version 22.04.2015
 */
public class Profesor {
   
    protected String nombre;
    protected int edad;
    protected int yearsConsolidados;
   
    //Constructor
    public Profesor(String nombre, int edad, int yearsConsolidados){
        this.nombre = nombre;
        this.edad = edad;
        this.yearsConsolidados = yearsConsolidados; }
       
    //Getters
    public String getNombre(){ return nombre; }
    public int getEdad(){ return edad; }
    public int getYearsConsolidados(){ return yearsConsolidados; }
   
    //Setters
    public void setNombre(String nombre) { this.nombre = nombre; }
    public void setEdad(int edad){ this.edad = edad; }
    public void setYearsConsolidados(int yearsConsolidados){ this.yearsConsolidados = yearsConsolidados; }
   
    //Método calculo salario base
    //public double obtenerSalarioBase(){ return (725 + (yearsConsolidados * 33.25)); }
   
    //Método mostrar datos
    public String mostrarDatos(){ return ("El nombre del profesor es: " + nombre + "\n su edad es: " + edad
                                          + "\n sus años consolidados son: " + yearsConsolidados); }

}//cierre clase
       


Clase ProfesorEmerito

Código: [Seleccionar]


/**
 * clase ProfesorEmerito extiende a Profesor. Ejercicio 693
 *
 * @author Lorenzo31
 * @version 22.04.2015
 */
public class ProfesorEmerito extends Profesor {
   
    private int yearsEmerito;
   
    //Constructor
    public ProfesorEmerito(String nombre, int edad, int yearsConsolidados, int yearsEmerito){
        super(nombre, edad, yearsConsolidados);
        this.yearsEmerito = yearsEmerito; }
         
    //Setter
    public void setYearsEmerito(int yearsEmerito){ this.yearsEmerito = yearsEmerito; }
   
    //Getter
    public int getYearsEmerito(){ return yearsEmerito; }
   
    //Método sobreEscrito obtener salario base
    public double obtenerSalarioBase(){ return (925 + (yearsConsolidados * 33.25) + ( yearsEmerito * 47.80 )); }
   
    //Método mostrar datos
    public String mostrarDatos(){ return (super.mostrarDatos() + "\n los años de profesor Emérito son: " + yearsEmerito); }
   
} //cierre clase


Clase TestProtected

Código: [Seleccionar]

/**
 * Clase test ejercicio 693
 *
 * @author Lorenzo31
 * @version 22.04.2015
 */
public class TestProtected {
   
    public static void main (String [] args) {
       
        Profesor profesor1 = new Profesor("Pedro Lopez", 50, 10);
        ProfesorEmerito profesor2;
       
        profesor2 = new ProfesorEmerito("Juan Gomez", 60, 20, 6);
       
       
       
       
        System.out.println(profesor1.mostrarDatos());
       
        System.out.println(profesor2.mostrarDatos());
        System.out.println(profesor2.obtenerSalarioBase());
    }
}


Pregunta ¿Es posible sin utilizar una invocación a super ni un método get?

Respuesta

Pregunta ¿Qué ocurre si el atributo en la superclase lo declaras private?

Respuesta Dá error al compilar, indica que el acceso es private en la variable.

69
Buenas noches, dejo mi respuesta al ejercicio, no tenía mas cosa (ni menos) que comprobar como actua java con los metodos sobreescritos.

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



Clase Profesor

Código: [Seleccionar]


/**
 * Clase Profesor. Ejercicio 692
 *
 * @author Lorenzo31
 * @version 22.04.2015
 */
public class Profesor {
   
    private String nombre;
    private int edad;
    private int yearsConsolidados;
   
    //Constructor
    public Profesor(String nombre, int edad, int yearsConsolidados){
        this.nombre = nombre;
        this.edad = edad;
        this.yearsConsolidados = yearsConsolidados; }
       
    //Getters
    public String getNombre(){ return nombre; }
    public int getEdad(){ return edad; }
    public int getYearsConsolidados(){ return yearsConsolidados; }
   
    //Setters
    public void setNombre(String nombre) { this.nombre = nombre; }
    public void setEdad(int edad){ this.edad = edad; }
    public void setYearsConsolidados(int yearsConsolidados){ this.yearsConsolidados = yearsConsolidados; }
   
    //Método calculo salario base
    public double obtenerSalarioBase(){ return (725 + (yearsConsolidados * 33.25)); }
   
    //Método mostrar datos
    public String mostrarDatos(){ return ("El nombre del profesor es: " + nombre + "\n su edad es: " + edad
                                          + "\n sus años consolidados son: " + yearsConsolidados); }

}//cierre clase
       



Clase ProfesorEmerito

Código: [Seleccionar]


/**
 * clase ProfesorEmerito extiende a Profesor. Ejercicio 692
 *
 * @author Lorenzo31
 * @version 22.04.2015
 */
public class ProfesorEmerito extends Profesor {
   
    private int yearsEmerito;
   
    //Constructor
    public ProfesorEmerito(String nombre, int edad, int yearsConsolidados, int yearsEmerito){
        super(nombre, edad, yearsConsolidados);
        this.yearsEmerito = yearsEmerito; }
         
    //Setter
    public void setYearsEmerito(int yearsEmerito){ this.yearsEmerito = yearsEmerito; }
   
    //Getter
    public int getYearsEmerito(){ return yearsEmerito; }
   
    //Método sobreEscrito obtener salario base
    public double obtenerSalarioBase(){ return (super.obtenerSalarioBase() + ( yearsEmerito * 47.80 )); }
   
    //Método mostrar datos
    public String mostrarDatos(){ return (super.mostrarDatos() + "\n los años de profesor Emérito son: " + yearsEmerito); }
   
} //cierre clase



Clase TestSobreescrito

Código: [Seleccionar]


/**
 * Clase test ejercicio 692
 *
 * @author Lorenzo31
 * @version 22.04.2015
 */
public class TestSobreescrito {
   
    public static void main (String [] args) {
       
        Profesor profesor1 = new Profesor("Pedro Lopez", 50, 10);
        Profesor profesor2;
       
        profesor2 = new ProfesorEmerito("Juan Gomez", 60, 20, 6);
       
        System.out.println(profesor1.mostrarDatos());
        System.out.println(profesor1.obtenerSalarioBase());
       
        System.out.println(profesor2.mostrarDatos());
        System.out.println(profesor2.obtenerSalarioBase());
    }
}

70
Buenas tardes, dejo mi solución del ejercicio (archivo adjunto, pulsar en el icono para descargar estando logados en el foro),  hay solo una flecha que no me cuadraba, la de listinProfesores que no usaba ProfesorInterino y yo si, es debido a que yo llamo a (temp instanceof ProfesorInterino) para distinguir los unos de los otros.

Pero hay algo que me ha descolocado un poco, y quizá ahora mismo estoy espeso, si alguien me arroja un poco de luz;

si un objeto inicialmente declarado como Profesor, en un momento dado tiene un ProfesorInterino y llamas a su método mostrarDatos(), ejecuta el mostrar datos de ProfesorInterino, sin necesidad de casting, yo creia que era ahí donde habia que hacer un cast necesariamente.

(si lo haces no da error pero el resultado es el mismo en ejecucion aparentemente al menos)

Con Iterator pasaria exactamente igual? o habría que hacer un cast al ser una copia del array.

71
Buenas tardes, dejo la respuesta a mi ejercicio. Llevo tres días algo acatarrado de ahí mi ausencia :-)

Supongamos la superclase Vehiculo que representa a cualquier tipo de vehículo y la subclase Taxi que representa a un tipo de vehículo concreto.

Pregunta a) ¿Un objeto de tipo estático declarado Taxi puede contener a un objeto Vehiculo en tiempo de ejecución?

Respuesta No.

Pregunta b) ¿Un objeto de tipo estático declarado Vehiculo puede contener a un objeto Taxi en tiempo de ejecución?

Respusta Si.

Pregunta c) Clase Vehiculo

Código: [Seleccionar]

/**
 * Clase Vehiculo. Ejercicio 690B
 *
 * @author Lorenzo31
 * @version 19.04.2015
 */
public class Vehiculo {

    private String matricula;
    private int numeroDeRuedas;

    //Constructor
    public Vehiculo(String matricula, int numeroDeRuedas){ 
        this.matricula = matricula;
        this.numeroDeRuedas = numeroDeRuedas;
    }

    //Setters
    public void setMatricula(String matricula){ this.matricula = matricula; }

    public void setNumeroDeRuedas(int numeroDeRuedas){ this.numeroDeRuedas = numeroDeRuedas; }

    //Getters
    public String getMatricula(){ return matricula; }

    public int getNumeroDeRuedas(){ return numeroDeRuedas; }

    //Método toString devuelve un String
    public String toString(){ return ("La matricula del vehiculo es: " + matricula +
            "\n El numero de ruedas es: " + numeroDeRuedas); }
}


Pregunta d) Clase Taxi

Código: [Seleccionar]

/**
 * Clase Taxi extiende de Vehiculo. Ejercicio 690B
 *
 * @author Lorenzo
 * @version 19.04.2015
 */

public class Taxi extends Vehiculo {
   
    private String nombreDelConductor;
    private int numeroDePlazas;
   
    //Constructor
    public Taxi(String matricula, int numeroDeRuedas, String nombreDelConductor, int numeroDePlazas){
        super(matricula, numeroDeRuedas);
        this.nombreDelConductor = nombreDelConductor;
        this.numeroDePlazas = numeroDePlazas;
    }
   
    //Setters
    public void setNombreDelConductor (String nombreDelConductor){ this.nombreDelConductor = nombreDelConductor; }
    public void setNumeroDePlazas (int numeroDePlazas) { this.numeroDePlazas = numeroDePlazas; }
   
    //Getters
    public String getNombreDelConductor() { return nombreDelConductor; }
    public int getNumeroDePlazas() { return numeroDePlazas; }
   
    //Método toString
    public String toString(){ return ("\n El nombre del conductor es: " + nombreDelConductor + "\n El numero de plazas es: " + numeroDePlazas); }
       
}


Pregunta e-1) Clase TestVehiculo1

Código: [Seleccionar]

/**
 * Clase main ejecución ejercicio 690B
 *
 * @author Lorenzo31
 * @version 19.04.2015
 */
public class TestVehiculo1 {
   
    public static void main(String [] args) {
       
        Vehiculo coche;
       
        coche = new Taxi("B2345ELF",4,"Pedro Lopez", 5);
       
        System.out.println(coche.toString());
    }
}


Pregunta e-2)  ¿Qué método toString() resulta de aplicación, el propio de la clase Vehiculo o el propio de la clase Taxi? ¿Por qué?

Respuesta El metodo toString() que se aplica es el propio de la clase Taxi, ya que en el momento de llamar a la función toString la instancia apunta a un objeto de tipo Taxi.

72
Buenas tardes, dejo aquí la solución del ejercicio, es el 687B pero solucionando el Calendar mucho mejor, con una interclase entre Refrigerados y Congelados ( no me di cuenta de la variable temperatura comun y sus metodos) y rectificar es lo que toca cuando se es novato.

Sin mas ahí va, solo decir que

a) Una clase EnvioDeProductos que represente un envío de productos como colección de objetos que admite el polimorfismo.

Sustituí EnvioDeProductos por Operar y ahi listo y otras cosas. Una clase mas completa.

Añado un .zip con el ejercicio porque sino aquí pegando clases...

73
Buenas tardes,

Dejo mi solución para el ejercicio, puesto que era una adaptación del anterior y lo importante era tratar la Herencia, he adaptado el del 86, donde ya usaba Calendar.

Comentar que me preparo para los comentarios pues he hecho supuestos que no han aumentado las clases sino disminuido, pero me he ceñido al enunciado del ejercicio.

Primero, debido a que Producto Fresco viene a ser un Producto y no tenia ninguna característica propia (todas comunes) lo eliminé como clase. (Soy consciente que solo que cambiara un nuevo atributo o dos en Producto Fresco ya cambiaria).

Segundo, Congelado por Aire, Agua y Hidrogeno, tenian como propio simplemente una descripción propia del producto que a nivel de programación he simplificado (demasiado pero es una práctica) en un String ya que no daba mas detalles el ejercicio.
Así puse la descripcion en común en la clase PCAireAguaHidrogeno y simplemente unos ENUM con las tres opciones AIRE, AGUA, HIDROGENO.
Les di una clase para los tres. Diferente a congelado aunque podria haber ido dentro porque las descripciones eran distintas en función del enum.

No lo hice por ahorrar tiempo, pues crear una clase son diez minutos, sino porque la información que iba a guardar me parecia... no necesitaba una clase nueva. (en este ejercicio claro)

Sin más, una vez planteadas mis premisas... dejo mi código. Esperando críticas que siempre leo como constructivas y tomo muy en cuenta.

Clase Producto

Código: [Seleccionar]
import java.util.Calendar;
import java.text.SimpleDateFormat;

/**
 * Clase Producto - Consta de los atributos comunes de todo producto y los getters y setters
 * necesarios para establecer las variables de instancia.
 * @author Lorenzo31
 * @version 10.04.2015
 */

public class Producto {

    private Calendar fechaCaducidad;
    private int numeroLote;
    private Calendar fechaEnvasado;
    private String origen;
    private boolean frescoOno;

    //Calendar empieza en Enero = 0 por eso le resto un 1 al mes introducido por el usuario.
 
    public Producto(int yearEnvasado, int monthEnvasado,int dayEnvasado, String origen, int yearCad, int monthCad, int dayCad, int numeroLote, boolean frescoOno){
        fechaCaducidad = Calendar.getInstance();
        fechaCaducidad.set(yearCad, monthCad - 1, dayCad);
        fechaEnvasado = Calendar.getInstance();
        fechaEnvasado.set(yearEnvasado, monthEnvasado - 1,dayEnvasado);
        this.origen = origen;
        this.numeroLote = numeroLote;
        this.frescoOno = frescoOno;
    }

    //Getters
    public String getFechaCaducidad() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        return dateFormat.format(fechaCaducidad.getTime()); }

    public int getNumeroLote(){ return numeroLote; }
    public boolean getFrescoOno(){return frescoOno; }
    public String getOrigen(){ return origen; }
 
    public String getFechaEnvasado() {
        SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
        return formato.format(fechaEnvasado.getTime()); }

    //Setters
    public void setFechaCaducidad(int year, int month, int day) { fechaCaducidad.set(year, month - 1, day); }
    public void setFechaEnvasado(int year, int month, int day) { fechaEnvasado.set(year, month -1, day); }
    public void setOrigen(String origen){ this.origen = origen; }
    public void setNumeroLote(int numeroLote) { this.numeroLote = numeroLote; }

    //Método mostrar atributos

    public void mostrarDatos(){
       
              System.out.println("\n El número de lote es: "+ numeroLote + " su fecha de envasado es: "+ getFechaEnvasado() +
              "\n su fecha de caducidad es: " + getFechaCaducidad() + " su origen es: " + origen);
    }
} //cierre clase


Clase PRefrigerado

Código: [Seleccionar]

/**
 * Clase Productos Refrigerados hereda de Producto
 *
 * @author Lorenzo31
 * @version 10.4.2015
 */

public class PRefrigerado extends Producto{
   
    private String codigoSupervisor;
    private int temperaturaRecomendada;
   
    public PRefrigerado(int yearCad, int monthCad, int dayCad, String codigoSupervisor, int numeroLote, int yearEnvase, int monthEnvase, int dayEnvase, String origen, int temperaturaRecomendada, boolean frescoOno){
        super(yearEnvase,monthEnvase,dayEnvase, origen,yearCad, monthCad, dayCad, numeroLote, frescoOno);
        this.codigoSupervisor = codigoSupervisor;
        this.temperaturaRecomendada = temperaturaRecomendada;
    }
   
    //Getters
    public String getCodigoSupervisor() { return codigoSupervisor; }
    public int getTemperaturaRecomendada(){ return temperaturaRecomendada; }
   
    //Setters
    public void setCodigoSupervisor(String codigoSupervisor){ this.codigoSupervisor = codigoSupervisor; }
    public void setTemperaturaRecomendada() { this.temperaturaRecomendada = temperaturaRecomendada; }
   
    //Metodo mostrarDatos
   
    public void mostrarDatos() {
        super.mostrarDatos();
        System.out.println(" su codigo de supervisor es: " + codigoSupervisor + "su temperatura recomendada es: " + temperaturaRecomendada + "\n");
    }

}


Clase PCongelado

Código: [Seleccionar]

/**
 * Clase Producto Congelado hereda de Producto
 *
 * @author (your name)
 * @version (a version number or a date)
*/

public class PCongelado extends Producto {
   
    private int temperaturaRecomendada;
   
    public PCongelado(int yearEnvase, int monthEnvase, int dayEnvase, String origen, int yearCad, int monthCad, int dayCad, int temperaturaRecomendada, int numeroLote, boolean frescoOno){
        super(yearEnvase, monthEnvase, dayEnvase, origen, yearCad, monthCad, dayCad, numeroLote, frescoOno);
        this.temperaturaRecomendada = temperaturaRecomendada;
    }
   
    public int getTemperatura() { return temperaturaRecomendada; }
   
    public void setTemperatura( int temperaturaRecomendada ){ this.temperaturaRecomendada = temperaturaRecomendada; }

    //Método para Mostrar temperaturaRecomendada
   
    public void mostrarDatos(){
        super.mostrarDatos();
        System.out.println(" su temperatura recomendada es: " + temperaturaRecomendada); }
}


Clase PCAireAguaHidro

Código: [Seleccionar]


/**
 * Clase PCAireAguaHidro describe el tipo de producto congelado extiende de PCongelado
 *
 * @author Lorenzo31
 * @version 13.4.2015
 */
enum TipoCongelado { AIRE, AGUA, HIDROGENO };

public class PCAireAguaHidro extends PCongelado{

   private String informacionAdicional;
   private TipoCongelado tipo;
   
   public PCAireAguaHidro(int yearEnvase, int monthEnvase, int dayEnvase, String origen, int yearCad, int monthCad, int dayCad, int temperaturaRecomendada,
   int numeroLote, boolean frescoOno, String informacionAdicional, TipoCongelado tipo){
       super(yearEnvase, monthEnvase, dayEnvase, origen, yearCad, monthCad, dayCad, temperaturaRecomendada, numeroLote, frescoOno);
       this.informacionAdicional = informacionAdicional;
       this.tipo = tipo;
    }
   
   //Getters
   public String getInformacionAdicional(){ return informacionAdicional; }
   public TipoCongelado getTipoCongelado(){ return tipo; }
   
   //Setters
   public void setInformacionAdicional(String informacionAdicional){ this.informacionAdicional = informacionAdicional; }
   public void setTipoCongelado(TipoCongelado tipo){ this.tipo = tipo; }
   
   //Método para mostrar información
   
   public void mostrarDatos(){
       super.mostrarDatos();
        if (tipo.toString().equals("AIRE") ){System.out.println("Congelado por " + tipo.toString() + " su composición es: \n" + informacionAdicional);
        }else if(tipo.toString().equals("AGUA") ){ System.out.println("Congelado por " + tipo.toString() + " Información sobre su salinidad en agua: \n" + informacionAdicional);
        }else if (tipo.toString().equals("HIDROGENO")) { System.out.println("Congelado por " + tipo.toString() + " Información de su metodo de congelación: \n" + informacionAdicional); }
    }
   
}


Clase EntradaDatos

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

public class EntradaDatos{

    public static int recogerEntero(){
        int numero = 1000;
        do{
            try{
                Scanner escaner = new Scanner(System.in);
                numero = escaner.nextInt();
                escaner.close();
            }catch (InputMismatchException e){ System.out.println("Introduce un valor numérico \n"); }
        }while (numero == 1000);
        return numero;
    }

    public static String recogerCadena(){
        String cadena = "";
        do{
            Scanner escaner = new Scanner(System.in);
            cadena = escaner.nextLine();
            escaner.close();
        }while(cadena == "");

        return cadena;   
    }
}


Clase Recoger

Código: [Seleccionar]

/**
 * Clase que agrupa todas las funciones de control de recogida de datos
 * para la introducción por el usuarios.
 *
 * @author Lorenzo31
 * @version 14.04.2015
 */
public class Recoger {

 
public static int menu(){ //método que controla la seleccion del menú
        int numero = 0;   
        do{
            System.out.println(" Elige una opción entre 1 y 5 \n ");
            numero = EntradaDatos.recogerEntero();   
        } while (numero < 1 || numero > 5);
        return numero;
    }

    public static int subMenu(){ //método que controla la seleccion del menú
        int numero = 0;   
        do{
            System.out.println(" Elige una opción entre 1 y 4 \n ");
            numero = EntradaDatos.recogerEntero();   
        } while (numero < 1 || numero > 4);
        return numero;
    }
   
    public static int año(boolean envaseOCaducidad){
        int numero = 0;   

        do{

            if (envaseOCaducidad){ System.out.println(" Introduce el año de envase ");
            }else { System.out.println(" Introduce el año de caducidad:"); }

            numero = EntradaDatos.recogerEntero();   
        } while (numero < 2015 || numero > 2100);
        return numero;
    }

    public static int mes(boolean envaseOCaducidad){
        int numero = 0;   

        do{
            if (envaseOCaducidad){ System.out.println(" Introduce el mes de envase ");
            }else { System.out.println(" Introduce el mes de caducidad:"); }

            numero = EntradaDatos.recogerEntero();   
        } while (numero < 1 || numero > 12);
        return numero;
    }

    public static int dia(boolean envaseOCaducidad){
        int numero = 0;   

        do{
            if (envaseOCaducidad){ System.out.println(" Introduce el dia de envase ");
            }else { System.out.println(" Introduce el dia de caducidad:"); }

            numero = EntradaDatos.recogerEntero();   
        } while (numero < 1 || numero > 31);
        return numero;
    }

    public static int numeroLote(){ System.out.println(" Introduce el número de Lote "); return EntradaDatos.recogerEntero(); }

    public static int temperatura() {
        int numero = 80;
        System.out.println("Introduce la temperatura");
        do{
            numero = EntradaDatos.recogerEntero();
        } while ( numero < -40 || numero > 50 );
        return numero;
    }
    public static String origen(){ System.out.println("Introduce el país de origen del producto "); return EntradaDatos.recogerCadena(); }
   
    public static String informacionAdicional(){ System.out.println("Introduce la composición del producto "); return EntradaDatos.recogerCadena(); }
   
    public static String codigoSupervisor(){ System.out.println("Introduce el código de supervisor del producto "); return EntradaDatos.recogerCadena();}

}

Clase TestHerencia2

Código: [Seleccionar]
import java.util.ArrayList;
/**
 * Main alternativo de productos. Agrega tantos productos como quieras, aunque lo limité a 10 aquí. Y los muestra.
 * @author Lorenzo31
 * @version 12.04.2015
 */
import java.util.Iterator;

public class TestHerencia2{

    public static void main(String[] args){

        int numeroMenu; int numeroSubMenu;
        boolean productoFresco = false;

        ArrayList<Producto> listaProductos = new ArrayList<Producto>();

        do{
            System.out.println(" 1.- Introducir nuevo producto FRESCO \n 2.- Introducir nuevo producto CONGELADO \n 3.- Introducir nuevo producto REFRIGERADO \n 4.- Mostrar productos \n 5.- Salir ");
            numeroMenu = Recoger.menu();

            switch(numeroMenu){
                case 1:
                productoFresco = true;
                System.out.println("Creando nuevo producto fresco... \n ");  //los true, false de los métodos es un boolean para distinguir si es fecha caducidad o fecha envase
                listaProductos.add( new Producto(Recoger.año(true),Recoger.mes(true),Recoger.dia(true),Recoger.origen(),Recoger.año(false),Recoger.mes(false),Recoger.dia(false), Recoger.numeroLote(), productoFresco));
                break;

                case 2:
                productoFresco = false;
                System.out.println("Creando nuevo producto congelado... \n "); 

               
                do{
                    System.out.println(" 1.- Introducir nuevo producto CONGELADO por AIRE \n 2.- Introducir nuevo producto CONGELADO por AGUA \n 3.- Introducir nuevo producto CONGELADO por HIDROGENO \n 4.- Salir de Menu CONGELADO");
                      numeroSubMenu = Recoger.subMenu();
                   
                    switch(numeroSubMenu){
                        case 1:  listaProductos.add( new PCAireAguaHidro(Recoger.año(true),Recoger.mes(true),Recoger.dia(true),Recoger.origen(),Recoger.año(false),Recoger.mes(false),Recoger.dia(false), Recoger.temperatura(), Recoger.numeroLote(), productoFresco, Recoger.informacionAdicional(), TipoCongelado.AIRE ) );
                        break;
                        case 2:  listaProductos.add( new PCAireAguaHidro(Recoger.año(true),Recoger.mes(true),Recoger.dia(true),Recoger.origen(),Recoger.año(false),Recoger.mes(false),Recoger.dia(false), Recoger.temperatura(), Recoger.numeroLote(), productoFresco, Recoger.informacionAdicional(), TipoCongelado.AGUA ) );
                        break;         
                        case 3: listaProductos.add( new PCAireAguaHidro(Recoger.año(true),Recoger.mes(true),Recoger.dia(true),Recoger.origen(),Recoger.año(false),Recoger.mes(false),Recoger.dia(false), Recoger.temperatura(), Recoger.numeroLote(), productoFresco, Recoger.informacionAdicional(), TipoCongelado.HIDROGENO ) );
                        break;
                    }
                }while(numeroSubMenu !=4);
                break;
               
                case 3:
                productoFresco = false;
                System.out.println("Creando nuevo producto refrigerado... \n ");
                listaProductos  .add( new PRefrigerado(Recoger.año(true),Recoger.mes(true),Recoger.dia(true),Recoger.codigoSupervisor(),Recoger.numeroLote(),Recoger.año(false),Recoger.mes(false),Recoger.dia(false),Recoger.origen(), Recoger.temperatura(), productoFresco ));
                break;
               

                case 4: System.out.println("La lista es \n");
                for(int x = 0; x < listaProductos.size(); x++){
                   
                    if (listaProductos.get(x).getFrescoOno() == true) { System.out.println("PRODUCTO FRESCO \n"); Producto temp = listaProductos.get(x); temp.mostrarDatos();
                    }else if (listaProductos.get(x) instanceof PRefrigerado){System.out.println("PRODUCTO REFRIGERADO \n"); PRefrigerado temp = (PRefrigerado)listaProductos.get(x); temp.mostrarDatos();
                    } else if(listaProductos.get(x) instanceof PCAireAguaHidro) {
                                   System.out.println("PRODUCTO CONGELADO");
                                   PCAireAguaHidro temp = (PCAireAguaHidro)listaProductos.get(x);
                                                   if (temp.getTipoCongelado().toString().equals("AIRE")) { temp.mostrarDatos();
                                                    }else if(temp.getTipoCongelado().toString().equals("AGUA")) {  temp.mostrarDatos();
                                                    }else if (temp.getTipoCongelado().toString().equals("HIDROGENO")) { temp.mostrarDatos(); }
                                                }
                                            } //cierre bucle for listado
                 break;   

               
                                               

            }
        }while(numeroMenu != 5);
    }

}





He intentado y no he sabido como;

en lugar de int Año, int mes int dia, que el contructor de Producto pidiera un Calendar, debido a que es una clase abstracta y su forma de creación es distinta,n o he sido capaz de hacerlo.
El control en datos si, con un return de un array pasaba los 3 int (año, mes, dia) pero no he visto como hacer para introducirlos, en fin un lio para el que me faltan recursos o conocimientos :)

P.D. intuyo que más que pedirlo por contructor debia haber cread un Producto no anónimo y despues cambiarle el Calendar con un nuevoProducto.Calendar.set(int,int,int);

P.D.2 He arreglado lo Producto.Calendar.set , lo pondré en el ejercicio 688B :) consigo pasar bien los Calendar.

74
Buenas tardes, dejo mi solución para el ejercicio.

Clase Producto

Código: [Seleccionar]
import java.util.Calendar;
import java.text.SimpleDateFormat;

/**
 * Clase Producto - Consta de los atributos comunes de todo producto y los getters y setters
 * necesarios para establecer las variables de instancia.
 * @author Lorenzo31
 * @version 10.04.2015
 */

public class Producto {
   
    private Calendar fecha;
    private int numeroLote;
   
    //Calendar empieza en Enero = 0 por eso le resto un 1 al mes introducido por el usuario.
   
    public Producto(int year, int month, int day, int numeroLote){
        fecha = Calendar.getInstance();
        fecha.set(year, month - 1, day);
        this.numeroLote = numeroLote;
}

//Getters
public String getFecha() {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
     return dateFormat.format(fecha.getTime()); }
 
public int getNumeroLote(){ return numeroLote; }
 
//Setters
public void setFecha(int year, int month, int day) { fecha.set(year, month - 1, day); }
public void setNumeroLote(int numeroLote) { this.numeroLote = numeroLote; }

//Método mostrar atributos

public void mostrarFechaYLote(){
    System.out.println("El número de lote es: "+ numeroLote + "\n su fecha de caducidad es: " + getFecha() );
}
} //cierre clase


Clase PFresco

Código: [Seleccionar]
import java.util.Calendar;
import java.text.SimpleDateFormat;

/**
 * Clase Producto Fresco - Hereda de Producto
 *
 * @author Lorenzo31
 * @version 10.9.2015
 */

public class PFresco extends Producto{

    private Calendar fechaEnvasado;
    private String origen;

    //Constructor
    public PFresco(int yearEnvasado, int monthEnvasado,int dayEnvasado, String origen, int yearCad, int monthCad, int dayCad, int numeroLote){
        super(yearCad,monthCad,dayCad,numeroLote);

        fechaEnvasado = Calendar.getInstance();
        fechaEnvasado.set(yearEnvasado, monthEnvasado,dayEnvasado);
        this.origen = origen;
    }

    //Getters

    public String getOrigen(){ return origen; }

    public String getFechaEnvasado() {
        SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yyyy");
        return formato.format(fechaEnvasado.getTime()); }

    //Método mostrar fecha envasado y origen
    public void mostrarFechaEnvasadoYOrigen(){
        System.out.println("su origen es: " + origen + "\n y su fecha de envasado es: " + getFechaEnvasado() );
    }
}


Clases PCongelado

Código: [Seleccionar]

/**
 * Clase Producto Congelado hereda de Producto
 *
 * @author (your name)
 * @version (a version number or a date)
*/

public class PCongelado extends Producto {
   
    private int temperaturaRecomendada;
   
    public PCongelado(int yearCad, int monthCad, int dayCad, int temperaturaRecomendada, int numeroLote){
        super(yearCad, monthCad, dayCad, numeroLote);
        this.temperaturaRecomendada = temperaturaRecomendada;
    }
   
    public int getTemperatura() { return temperaturaRecomendada; }
   
    public void setTemperatura( int temperaturaRecomendada ){ this.temperaturaRecomendada = temperaturaRecomendada; }

    //Método para Mostrar temperaturaRecomendada
   
    public void mostrarTemperaturaRecomendada(){
        System.out.println(" su temperatura recomendada es: " + temperaturaRecomendada); }
}


Clase PRefrigerados

Código: [Seleccionar]


/**
 * Clase Productos Refrigerados hereda de Producto
 *
 * @author Lorenzo31
 * @version 10.4.2015
 */

public class PRefrigerado extends Producto{
   
    private String codigoSupervisor;
   
    public PRefrigerado(int yearCad, int monthCad, int dayCad, String codigoSupervisor, int numeroLote){
        super(yearCad, monthCad, dayCad, numeroLote);
        this.codigoSupervisor = codigoSupervisor;
    }
   
    public String getCodigoSupervisor() { return codigoSupervisor; }
    public void setCodigoSupervisor(String codigoSupervisor){ this.codigoSupervisor = codigoSupervisor; }

    //Metodo mostrar codigoSupervisor
   
    public void mostrarCodigoSupervidor() {
        System.out.println(" su codigo de supervisor es: " + codigoSupervisor );
    }

}

Clase TestHerencia2

Código: [Seleccionar]

public class testHerencia2{

    public static void main(String[] args){

        //Creación de objetos
        PFresco producto1 = new PFresco(2015, 2, 20, "España", 2015, 5, 10, 2230);
        PRefrigerado producto2 = new PRefrigerado(2015, 6, 10, "X-102", 1234);
        PCongelado producto3 = new PCongelado(2016, 2, 25, -3, 3212);
       
        //Imprimimos los objetos
        System.out.println("\n Producto Fresco");
        producto1.mostrarFechaYLote();
        producto1.mostrarFechaEnvasadoYOrigen();
       
        System.out.println("\n Producto Refrigerado");
        producto2.mostrarFechaYLote();
        producto2.mostrarCodigoSupervidor();
       
        System.out.println("\n Producto Congelado");
        producto3.mostrarFechaYLote();
        producto3.mostrarTemperaturaRecomendada();
       
    }
}

75
Buenas tardes, ahi va mi respuesta

Citar
Intenta compilar el siguiente código:

public class Test {
    int atributo1;
    Test (int atrib) {atributo1 = 0;}
    public static void main (String[ ] Args) {
        System.out.println ("Mensaje 1");
        System.out.println ("Atributo 1 vale" + this.getAtrib1());
    } //Cierre del main

    public int getAtrib1() {return atributo1;}
} //Cierre de la clase



¿Qué mensaje de error se obtiene?

non static variable this cannot be referenced from a static context

¿Por qué se obtiene este mensaje de error?

Bueno el metodo main al ser static, solo puede acceder a variables y metodos de su clase si son static también, sino se entiende que son variables y metodos de instancia y no de clase.

En concreto el error en el this, aunque ponga en static la variable y el metodo sigue persistiendo.

Código: [Seleccionar]
    System.out.println ("Atributo 1 vale" + this.getAtrib1()); 
Al quitarlo compila y hace lo que queremos, deduzco que tiene que ver con que "this." hace referencia a la variable de instancia y no de Clase, aunque buscando no lo he podido confirmar cien por cien seguro.

Encontré esto para asegurarme de que no decía una barbaridad.

Citar
this

Al acceder a variables de instancia de una clase, la palabra clave this hace referencia a los miembros de la propia clase en el objeto actual; es decir, this se refiere al objeto actual sobre el que está actuando un método determinado y se utiliza siempre que se quiera hace referencia al objetoactual de la clase.

¿Cómo podemos solucionarlo para que se ejecute lo que pretendemos?

Código: [Seleccionar]

/**
 * Write a description of class Test here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class Test {
    static int atributo1;
   
    Test(int atrib) { atributo1 = 0; }

    public static void main (String [] args) {
        System.out.println ("Mensaje 1");
        System.out.println ("Atributo 1 vale" + getAtrib1() );
       
    } //cierre main

     static public int getAtrib1() { return atributo1; }
} //cierre clase

También me funciona añadiendo Test.getAtrib1() pero no con el this.getAtrib1 lo que me dio la idea de pensar que this se referia al metodo o variable de instancia y no de clase.
Código: [Seleccionar]
System.out.println ("Atributo 1 vale" + Test.getAtrib1() );

P.D. por lo que veo no acierto con mi deducción del this.getAtrib1, si se refiere a la clase no a instancia, pero aun así me da error y no comprendo porque, poniendo todo static, en cambio Test.getAtrib1 no da error, aunque deberian ser lo mismo. Si alguien puede ilustrarme lo agradeceré porque no lo veo.

76
Buenas tardes, aquí dejo mi ejercicio resuelto

Clase Enum TipoPiedra

Código: [Seleccionar]

/**
 * Enumeration class Piedras - Esta clase contiene los tipos de piedra y sus pesos especificos.
 *
 * @author Lorenzo31
 * @version 09-04-2015
 */

public enum TipoPiedra {

    CALIZA (1200f),

    MARMOL (1423.55f),

    PIZARRA (1325f),

    CUARZITA (1466.22f);

    private final float peso;

    TipoPiedra(float valorPeso) { peso = valorPeso; }

    public float getPeso() { return peso; }
   
    /**
     * Funcion que @return un float y calcula el peso de un palet fijandose en el peso unitario
     * y multiplicandolo por 2.27 que se daba por supuesto en el ejercicio anterior, era un palet
     */
    public float getPesoPalet() { return 2.27f * peso; }

}

Clase Main GestorPiedra

Código: [Seleccionar]
/**
 * Clase Main que recorre los tipos de Enumerados declarados en Enum TipoPiedra
 * @Author Lorenzo31
 */

public class GestorPiedra {
   
    public static void main (String [] args){
       
        System.out.println("Iniciamos el programa ");
       
       System.out.println(" TIPO PIEDRA \t PESO M3 \t PESO TOTAL PALET");
       
        for(TipoPiedra tmp: TipoPiedra.values()){
        System.out.println(tmp.toString()  + "\t \t" + tmp.getPeso() + "kg \t \t" + tmp.getPesoPalet() + "kg" );
    }
    }
}

77
Buenas, aquí dejo mi solución al ejercicio. Un poco laborioso lo de averiguar como recoger enum del usuario, supongo que despues compensa que ya queda todo controlado en los valores que tu deseas se entre.

Sin más ahí va.

Clase Enum MarcaDeVehiculo

Código: [Seleccionar]

/**
 * Enumeration class MarcaDeVehiculo - Tipos de Vehiculos que podran recogerse
 *
 * @author Lorenzo31
 * @version 09-04-2015
 */
public enum MarcaDeVehiculo { FORD, TOYOTA, SUZUKI, RENAULT, SEAT}

Clase Vehiculo

Código: [Seleccionar]

/**
 * Write a description of class Vehiculo here.
 *
 * @author Lorenzo31
 * @version 09-04-2015
 */
public class Vehiculo {
   
    private String matricula;
    private MarcaDeVehiculo marcaCoche;
   
    public Vehiculo(){ matricula = ""; }
   
    /**
     * Método que establece el valor de matricula
     */
   
    public void setMatricula(String valorMatricula){ matricula = valorMatricula; }
   
     /**
     * Método que establece el valor de marcaCoche
     */
    public void setMarcaCoche(MarcaDeVehiculo valorMarcaCoche){ marcaCoche = valorMarcaCoche; }
   
    /**
     * Metodo que devuelve el valor de @return matricula
     */
   
    public String getMatricula (){ return matricula; }
   
   
    /**
     * Metodo que devuelve el valor de @return marcaCoche
     */
    public MarcaDeVehiculo getMarcaCoche (){ return marcaCoche; }
}

Clase GestorVehiculo

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

/**
 * @Author Lorenzo31
 * Esta clase recoge datos de matricula y modelo de un Vehiculo y muestra los resultados
 */

public class GestorVehiculo{
   
    public static void main (String [] args){
        Vehiculo coche = new Vehiculo();
        boolean modeloValido = false;

        System.out.println("Iniciamos el programa ");
       
        //Recoge matricula
        System.out.println("Introduce una matricula (String)");
        Scanner entrada = new Scanner(System.in);
        coche.setMatricula(entrada.nextLine() );
       
        //Recoge modelo
        System.out.println("Introduce un nuevo modelo ");
        do{
            try{
                coche.setMarcaCoche(MarcaDeVehiculo.valueOf(entrada.nextLine().toUpperCase()));
                modeloValido = true;
            }catch(IllegalArgumentException e){ System.out.println("Introduce un modelo válido: FORD, TOYOTA, SUZUKI, RENAULT, SEAT"); }
        }while (modeloValido == false);
       
        //Muestra matricula y modelo por pantalla
        System.out.println("Matricula: " + coche.getMatricula() + " Modelo " + coche.getMarcaCoche() );
       
        System.out.println("Final del programa");
    }

}

78
Buenas tardes, dejo mi solución para este ejercicio.

Clase EscanerDatos

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

/**
 * Esta clase guarda los valores introducidos por el usuario a partir del teclado
 *
 * @author Lorenzo31
 * @version 08-04-2015
 */
public class EscanerDatos
{
    /**
     * Constructor vacio sin necesidad de parametros
     */
   
    public EscanerDatos(){ /*vacio*/ }

    /**
     * Método que recoge datos por consola y devuelve un double
     * @return devuelve un valor double introducido por el usuario
     */
    public double getDouble(){

        double valor = 0;
         System.out.println("Introduce un valor ");
          do{
           try{
                Scanner escaner = new Scanner(System.in);
                valor = escaner.nextDouble();
            }catch (InputMismatchException e){ System.out.println("Debes introducir un valor double");
            }
          } while (valor == 0);

        return valor;
    }
   
    /**
     * Método que recoge datos por consola y devuelve un entero
     * @return devuelve un valor int introducido por el usuario entre 1 y 4
     */
    public int getEntero(){
       int valor = 0;
       do{
           try{
                Scanner escaner = new Scanner(System.in);
                valor = escaner.nextInt();
            }catch (InputMismatchException e){ System.out.println("Debes introducir un valor entero");
            }
          } while (valor < 1 || valor > 4);
   
       return valor;   
    }
   
   
}


Clase MiniCalculadoraEjemplo

Código: [Seleccionar]
import java.lang.Math;

/**
 * Esta clase define operaciones matemáticas realizadas a partir
 * de unos valores por que determina el usuario previamente.
 * @author Lorenzo31
 * @version 08-04-2015
 */

public class MiniCalculadoraEjemplo{
   
    /**
     * Constructor sin parámetros ni inicializaciones
     */
   
    public MiniCalculadoraEjemplo(){ /*vacio*/ }
   
    /**
     * Método que calcula el valor absoluto de un número.
     * @param numero : el valor sobre el que se desea ejecutar la operación
     * @return valor absoluto resultante del cálculo
     */
   
    public double getValorAbsoluto(double numero){ return Math.abs(numero); }
   
    /**
     * Método que calcula la raiz cuadrada de un número.
     * @param numero : el valor sobre el que se desea ejecutar la operación
     * @return valor resultante del cálculo de la raiz cuadrada
     */
   
    public double getRaizCuadrada(double numero){ return Math.sqrt(numero); }
}

Clase GestorCalculo

Código: [Seleccionar]

/**
 * Esta clase contiene el main necesario para la ejecución de los calculos
 *
 * @author Lorenzo31
 * @version 08-04-2015
 */
public class GestorCalculo
{
    /**
     * Metodo main que ejecuta las opciones de calculo y pide valor al usuario
     * Con menu para elegir opciones
     * @see <a href = "https://www.aprenderaprogramar.es/index.php?option=com_content&view=article&id=646:documentar-proyectos-java-con-javadoc-comentarios-simbolos-tags-deprecated-param-etc-cu00680b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188" /> aprenderaprogramar.com – Didáctica en programación </a>
     */
    public static void main (String [] args){
        double numero;
        int valor;
       
        System.out.println("Iniciamos el programa \n ");
       
        MiniCalculadoraEjemplo operar = new MiniCalculadoraEjemplo();
       
        EscanerDatos entrada = new EscanerDatos();
        numero = entrada.getDouble();

       
        do{
            System.out.println(" 1.- Introducir nuevo número \n 2.- Calcular valor absoluto \n 3.- Calcular raiz cuadrada \n 4.-Salir \n");

            valor = entrada.getEntero();

            switch(valor){
                case 1: numero = entrada.getDouble(); break;
                case 2: System.out.println(operar.getValorAbsoluto(numero) ); break;
                case 3: System.out.println(operar.getRaizCuadrada(numero) ); break;
            }
        }while (valor != 4);
   
        System.out.println("Final del programa "); 
    } //final main

}//final clase

79
Aquí dejo mi respuesta al ejercicio, muy simple, creo hace lo que se pide, mi duda de si está bien es que solo añado un Objeto String al LinkedList.

Pero mirando no es posible añadir más pues toString(boolean [] a) solo acepta array de boolean, no primitivos por separado (para luego añadirlos uno a uno al LinkedList como Strings.

AsList funcionaria igual pero enviando una referencia o apuntador a un List, que luego habria que desenredar con un Iterator imagino, así que lo deje así.

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

public class BooleanosArray{
   
    public static void main (String[] args){

        boolean [] arrayBooleanos = {true, true, false, false, true, false};

        LinkedList <String> listaUnida = new LinkedList <String>();

        listaUnida.add(Arrays.toString(arrayBooleanos));

        System.out.println(listaUnida);
    }
}

He visto soluciones con asList pero declarando Boolean el array, Clase no boolean primitivos que entendia pide el enunciado.

Si los declaro como Objetos de clase Boolean efectivamente si se puede pasar como List a LinkedList y los asigna uno a uno en la LinkedList.

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

public class BooleanosArray{
   
    public static void main (String[] args){

        Boolean [] arrayBooleanos = {true, true, false, false, true, false};

        LinkedList <Boolean> listaUnida = new LinkedList <Boolean>(Arrays.asList(arrayBooleanos));

        //listaUnida.add(Arrays.toString(arrayBooleanos));

        System.out.println(listaUnida);
    }
}


Cuanta información de golpe espero poco a poco con la práctica se me vaya ordenando en la cabeza todo esto que voy pez :-)

80
Buenas tardes, dejo la solución de mi ejercicio aunque no estoy nada satisfecho.

No se si es la vuelta de Semana Santa pero he encontrado especialmente complicado el ejercicio ( lo cual no es malo ) la razón de que no me convenza es que saco por pantalla los contenidos de los objetos en conjunto y no la información concreta que alberga cada uno. El resultado es el mismo pero en conjunto [ 2, 8,5 ] [ sol, luna,saturno ].

Clase Estrellas

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

public class Estrellas{
   
    private HashSet <String> stars = new HashSet <String>();
   
    public Estrellas(){  //constructor inicializado por defecto
        stars.add("sol");
        stars.add("luna");
        stars.add("saturno");
    }//cierre contructor
   
    public HashSet <String> getEstrellas() { return stars; }
} //cierre clase

Clase Numeros

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

public class Numeros {
   
    private TreeSet <Integer> numbers = new TreeSet <Integer>();
   
    public Numeros(){  //contructor crea por defecto los objetos
        numbers.add(2);
        numbers.add(8);
        numbers.add(5);
    }
   
    public TreeSet<Integer> getNumeros(){ return numbers; }
}

Clase ConjuntoSet

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

public class ConjuntoSet {

    private ArrayList <Set> conjuntoObjetos = new ArrayList <Set>();

    public ConjuntoSet(){
        //Creo objeto Estrellas y lo añado al conjuntoObjetos
        Estrellas estrella1 = new Estrellas();
        conjuntoObjetos.add(estrella1.getEstrellas());
        //Creo objeto Numeros y lo añado al conjuntoObjetos
        Numeros numero1 = new Numeros();
        conjuntoObjetos.add(numero1.getNumeros());
    }

    public ArrayList<Set> getConjunto(){return conjuntoObjetos; }
}

Clase GestorIterador

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


public class GestorIterador {

    public static void main (String [] args){

        ConjuntoSet prueba = new ConjuntoSet();

        Iterator iter = prueba.getConjunto().iterator();

        while(iter.hasNext()){
            System.out.print(iter.next());}

    }
}

Quizás si en la clase ConjuntoSet, creara fuera del contructor los new Estrellas y Numeros, podria llamarlos en el main con un get que los devolviera y hacer un Iterador independiente de cada uno, pero no me convence demasiado tampoco.

Después de mirar un poco algun ejercicio de compañeros añado la clase GestorIterador con lo que creo soluciona mi problema, que imprimia en conjunto y no por separado los elementos.

Clase GestorIterador (Mejorada creo)

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


public class GestorIterador {

    public static void main (String [] args){

        ConjuntoSet prueba = new ConjuntoSet();

        Iterator <Set> iterConjunto = prueba.getConjunto().iterator();

        while(iterConjunto.hasNext()){
            Iterator iterObjetos = iterConjunto.next().iterator();
                 
              while(iterObjetos.hasNext()){
                  System.out.print(iterObjetos.next() + ", "); }
               
        }

    }
}

Veo no es lo mismo Iterador iter, que Iterador <Set> iter, le avisas que dentro del iter habra nuevos Objetos de tipo Set que puedes volver a iterar, eso creo, este ejercicio es algo lío

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

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