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

Páginas: [1]
1
Buenas. Dejo mi solución al ejercicio de la entrega CU00924C del curso Lenguaje de Programación Java Nivel Avanzado I.

Citar
Crea una clase denominada Hotel con los atributos idHotel (int), zona(String), y precio (int). Los valores para zona podrán ser "playa","montaña" o "rural". El precio supondremos que es un dato en euros que podrá tomar valores entre 40 y 150.

Crea una clase con el método main donde se cree un conjunto sin ordenar de 12 hoteles. El programa nos mostrará por consola este conjunto de hoteles y nos preguntará en qué zona queremos el hotel.

Tras ésto el programa creará un conjunto ordenado por precio con los hoteles cuya zona corresponda con la zona elegida y los mostrará por consola.

Clase Hotel.
Código: [Seleccionar]
import java.util.Objects;
public class Hotel implements Comparable<Hotel>{
    //Atributos.
    private int idHotel;
    private String zona;  //Playa, montaña o rural.
    private int precio;
    public Hotel (int idHotel, String zona, int precio) {
        this.idHotel=idHotel;
        this.zona=zona;
        this.precio=precio;
    }

    @Override
    public String toString () {return "Hotel -> ID: "+idHotel+" Zona: "+zona+" Precio: "+precio; }

    @Override
    public int compareTo (Hotel o) {return this.precio-o.precio;}

    @Override
    public int hashCode() {return idHotel+zona.hashCode()+precio;}

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {return false;}
        if (getClass()!=obj.getClass()) {return false;}
        final Hotel other = (Hotel) obj;
        if (this.idHotel!=other.idHotel) {return false;}
        if (!Objects.equals(this.zona, other.zona)) {return false;}
        if (this.precio != other.precio) {return false;}
        return true;
    }
}

Clase TestHotel.
Código: [Seleccionar]
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.HashSet;
import java.util.Set;
import java.util.Scanner;
import java.util.Random;
public class TestHotel {
    public static void main (String [] args) {
        Scanner entrada = new Scanner (System.in);
        Random rnd = new Random();
        int respuesta = 0;
        Set<Hotel> listaCompleta = new HashSet <Hotel>();
        SortedSet<Hotel> listaPlaya = new TreeSet<Hotel>();
        SortedSet<Hotel> listaMontana = new TreeSet<Hotel>();
        SortedSet<Hotel> listaRural = new TreeSet<Hotel>();
        for (int i=0; i<12; i++) {
            int precio = rnd.nextInt(151)+50;
            int numR = rnd.nextInt(3);
            if (numR==0) {Hotel hotel = new Hotel (i+1, "playa", precio);
                listaCompleta.add(hotel);
                listaPlaya.add(hotel);
            }
            else if (numR==1) {Hotel hotel = new Hotel (i+1, "montaña", precio);
                listaCompleta.add(hotel);
                listaMontana.add(hotel);
            }
            else {Hotel hotel = new Hotel (i+1, "rural", precio);
                listaCompleta.add(hotel);
                listaRural.add(hotel);
            }           

        }           
        System.out.println ("Conjunto de hoteles disponibles: ");
        System.out.println(listaCompleta);
        System.out.println ("Elige el tipo de zona donde quieres reservar el hotel.");
        System.out.println ("(1) Playa. (2) Montaña. (3) Rural.");
        respuesta= entrada.nextInt();
        switch (respuesta) {
            case 1: System.out.println ("Hoteles en el conjunto para la sección playa ordenados por precio: "+listaPlaya); break;
            case 2: System.out.println ("Hoteles en el conjunto para la sección montaña ordenados por precio: "+listaMontana); break;
            case 3: System.out.println ("Hoteles en el conjunto para la sección rural ordenados por precio: "+listaRural); break;
        }
    }
}

¡Saludos!

2
Buenas a todos.

Esta es mi solución al ejercicio de la entrega CU00923C del curso Lenguaje de Programación Java Nivel Avanzado I.

Citar
Crea una clase denominada VerificadorVocales con un método capaz de recibir una cadena y una vocal y devolver un resultado que será 1 si el número de la vocal pasada como parámetro es par (hay equilibrio en esa vocal), -1 si el número de la vocal pasada como parámetro es impar (no hay equilibrio en esa vocal) ó 0 (no existe esa vocal en la cadena). Para ello debes utilizar una pila (Stack).

Crea una clase con el método main donde se pida al usuario una cadena y se le devuelva un mensaje informativo sobre si el números de a’s, e’s, i’s, o’s, u’s es par o impar. El programa debe dar opción al usuario a seguir introduciendo cadenas si lo desea.

Clase VerificadorVocales.
Código: [Seleccionar]
import java.util.Stack;
import java.util.Scanner;
public class VerificadorVocales {
    public static void main (String [] args) {
        Scanner entrada = new Scanner(System.in);
        String respuesta = "S";
        String cadena="";
        String numeroA="";
        String numeroE="";
        String numeroI="";
        String numeroO="";
        String numeroU="";

        while (respuesta.equalsIgnoreCase("S")){
            System.out.println ("¿Qué cadena desea analizar?");
            cadena=entrada.nextLine();
            switch (analizarA(cadena)){
                case 1: numeroA="par"; break;
                case -1: numeroA="impar"; break;
                case 0: numeroA= "cero"; break;
            }
            switch (analizarE(cadena)){
                case 1: numeroE="par"; break;
                case -1: numeroE="impar"; break;
                case 0: numeroE= "cero"; break;
            }
            switch (analizarI(cadena)){
                case 1: numeroI="par"; break;
                case -1: numeroI="impar"; break;
                case 0: numeroI= "cero"; break;
            }
            switch (analizarO(cadena)){
                case 1: numeroO="par"; break;
                case -1: numeroO="impar"; break;
                case 0: numeroO= "cero"; break;
            }
            switch (analizarU(cadena)){
                case 1: numeroU="par"; break;
                case -1: numeroU="impar"; break;
                case 0: numeroU= "cero"; break;
            }
            System.out.println ("El número de letras a es "+numeroA+", el número de letras e es "+numeroE+", el número de letras i es "+numeroI+", el número de letras o es "+numeroO+" y el número de letras u es "+numeroU+".");
            System.out.print ("¿Desea analizar otra cadena? (S/N) ");
            respuesta = entrada.nextLine();
        }
    }

    public static int analizarA (String cadena) {
        Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
        while (i<cadena.length()) {
            if (cadena.charAt(i)=='a'&&pila.empty()) {pila.push("a"); auxiliar++;}
            else if (cadena.charAt(i)=='a'&&!pila.empty()) {pila.pop();}
            i++;
        }
        if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}     
    }

    public static int analizarE (String cadena) {
        Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
        while (i<cadena.length()) {
            if (cadena.charAt(i)=='e'&&pila.empty()) {pila.push("e"); auxiliar++;}
            else if (cadena.charAt(i)=='e'&&!pila.empty()) {pila.pop();}
            i++;
        }
        if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
    }

    public static int analizarI (String cadena) {
        Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
        while (i<cadena.length()) {
            if (cadena.charAt(i)=='i'&&pila.empty()) {pila.push("i"); auxiliar++;}
            else if (cadena.charAt(i)=='i'&&!pila.empty()) {pila.pop();}
            i++;
        }       
        if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
    }

    public static int analizarO (String cadena) {
        Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
        while (i<cadena.length()) {
            if (cadena.charAt(i)=='o'&&pila.empty()) {pila.push("o"); auxiliar++;}
            else if (cadena.charAt(i)=='o'&&!pila.empty()) {pila.pop();}
            i++;
        }
        if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}     
    }

    public static int analizarU (String cadena) {
        Stack<String> pila = new Stack<String>(); int i=0; int auxiliar=0;
        while (i<cadena.length()) {
            if (cadena.charAt(i)=='u'&&pila.empty()) {pila.push("u"); auxiliar++;}
            else if (cadena.charAt(i)=='u'&&!pila.empty()) {pila.pop();}
            i++;
        }
        if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}
    }
}

Un saludo.

3
Buenas tardes a todos.

Dejo mi respuesta al ejercicio de la entrega CU00922C del curso Lenguaje de Programación Java Nivel Avanzado I.

Citar
Crea una clase denominada Paquete con los atributos idPaquete (int) y pesoPaquete (int), donde pesoPaquete supondremos que es un dato en kg que podrá tomar valores entre 80 y 150.

Crea una clase con el método main donde se cree una lista de tipo Vector que tendrá una capacidad inicial de 5 y un incremento de 1. Esta lista será “el contenedor” donde guardaremos los paquetes. Este contenedor podrá cargar un peso máximo de 100 kilos multiplicado por su capacidad (capacity de Vector). Es decir, el contenedor inicialmente podrá cargar 500 kilos. Este dato lo calcularemos y lo denominaremos cargaMaximaContenedor.

Introduciremos 50 paquetes en la lista. El atributo pesoPaquete debe establecerse para  cada objeto de forma aleatoria. Al introducir los paquetes la capacidad (capacity) del contenedor se ampliará a 50, por lo que calcularemos de nuevo el valor de cargaMaximaContenedor. Ahora deberemos obtener que se  podrá cargar hasta 5000 kilos, ya que la nueva capacidad (capacity) será 50. Muestra un mensaje por consola informando de la capacidad del contenedor, de su carga máxima y del número de paquetes que contiene y el peso total de estos paquetes.

Si el peso total de los paquetes resulta superior al peso máximo que puede  cargar el contenedor deberemos aumentar la capacidad (capacity) del contenedor en tantos elementos como fuera necesario para que el peso  total de los paquetes sea inferior al peso máximo que puede cargar el contenedor y mostrar un mensaje informando de ello.

Clase Paquete.
Código: [Seleccionar]
public class Paquete {
    //Atributos.
    private int idPaquete;
    private int pesoPaquete;
    //Constructor.
    public Paquete (int idPaquete, int pesoPaquete) {
        this.idPaquete=idPaquete;
        this.pesoPaquete=pesoPaquete;
    }
    //Métodos.
    public void setIdPaquete (int idPaquete) {this.idPaquete=idPaquete;}
    public void setPesoPaquete (int pesoPaquete) {this.pesoPaquete=pesoPaquete;}
    public int getIdPaquete () { return idPaquete; }
    public int getPesoPaquete () {return pesoPaquete; }
    @Override
    public String toString () {
        return "Paquete con ID: "+idPaquete+". Peso: "+pesoPaquete+" kilogramos.";
    }
}

Clase TestPaquete.
Código: [Seleccionar]
import java.util.Vector;
import java.util.Random;
public class TestPaquete {
    public static void main (String [] args) {
        Vector <Paquete> v = new Vector <Paquete> (5,1);
        int cargaMaximaContenedor=100*v.capacity();
        System.out.println("Carga máxima inicial: "+cargaMaximaContenedor);
        Random r = new Random();
        int numRandom;
        int i =0;
        while (i<50) {
            numRandom = r.nextInt(71)+80;
            v.add(new Paquete(i, numRandom));
            i++;
        }
        v.trimToSize();
        cargaMaximaContenedor=100*v.capacity();
        int pesoTotal=0;       
        for (Paquete tmp: v) {
            pesoTotal=pesoTotal+tmp.getPesoPaquete();
        }
        System.out.println("Capacidad del contenedor: "+v.capacity()+". Carga máxima: "+cargaMaximaContenedor+". Número de paquetes: "+v.capacity()+". Peso total de los paquetes: "+pesoTotal+"." );
        if (pesoTotal<=cargaMaximaContenedor) {System.out.println ("No ha sido necesario aumentar la capacidad del contenedor.");
        }
        while (pesoTotal>cargaMaximaContenedor) {
            v.ensureCapacity(v.capacity()+1);
            cargaMaximaContenedor=100*v.capacity();
            if (pesoTotal<=cargaMaximaContenedor) {
                System.out.println ("Se ha aumentado la capacidad a "+v.capacity()+", lo que permite cargar hasta "+cargaMaximaContenedor+" kilogramos.");
            }
        }
    }
}

¡Saludos!

4
Buenas a todos. Esta es mi solución al ejercicio de la entrega CU00921C del curso Lenguaje de programación Java Nivel Avanzado I. Me he hecho bastante lío al principio porque pensaba que lo que se elimina en un iterador no afecta a la lista original y cuando trataba de suprimir los elementos en la lista original me aparecía el error ConcurrentModificationException. Creo que ahora ya está bien, pero agradezco vuestras posibles correcciones.

Citar
Crea una clase denominada Vehiculo con los atributos idVehiculo (int) y tipo (String), donde tipo podrá tomar los valores Coche, Camión, Furgoneta o Moto.

Crea una clase con el método main donde se introduzcan 5000 vehículos en una lista de tipo estático List. El atributo tipo debe establecerse para cada objeto de forma aleatoria. A continuación, el programa debe mostrar un resumen de cuántos vehículos hay de cada tipo. A continuación, debe recorrerse la lista y eliminarse todos los vehículos que no sean de tipo Coche. Por otro lado, deberán añadirse tantos vehículos de tipo Coche como se hayan eliminado, al final de la lista, de modo que los nuevos ids comenzarán a partir del último existente en la lista anterior. Además deberá mostrarse de nuevo el resumen de cuántos vehículos hay de cada tipo y el tiempo empleado desde que comenzó la eliminación de elementos hasta que terminó la inserción de elementos. Responde a estas preguntas:

a) Implementa el programa usando ArrayList. ¿Cuál es el resultado que obtienes?

b) Implementa el programa usando LinkedList ¿Cuál es el resultado que obtienes?

c) Haz varias ejecuciones y compara los resultados. ¿Observas diferencias entre la ejecución con ArrayList y con LinkedList? Si observas diferencias, ¿cuáles son y a qué crees que se deben?

Realizando varias ejecuciones, he obtenido unos tiempos que oscilan entre 10666090 y 15979824 nanosegundos utilizando un ArrayList y entre 1721098 y 6345220 nanosegundos utilizando un LinkedList. Usar un LinkedList, en consecuencia, resulta más eficiente. Creo que esta diferencia se debe a que LinkedList es más rápido en las inserciones de elementos al comienzo y al final de una lista y en las supresiones.

Vehiculo
Código: [Seleccionar]
package javaAvanzado;
public class Vehiculo {
    //Atributos
    private int idVehiculo;
    private String tipo;
    //Constructor
    public Vehiculo (int idVehiculo, String tipo) {
        this.idVehiculo=idVehiculo;
        this.tipo=tipo;
    }
    //Setters y getters
    public void setIdVehiculo (int idVehiculo) {this.idVehiculo=idVehiculo;}
    public void setTipo (String tipo) {this.tipo=tipo;}
    public int getIdvehiculo () { return idVehiculo; }
    public String getTipo() { return tipo; }
}

ListaDeVehiculos
Código: [Seleccionar]
package javaAvanzado;
import java.util.List;
import java.util.LinkedList;
import java.util.Random;
import java.util.Iterator;

public class ListaDeVehiculos {
    public static void main (String [] args) {
        List<Vehiculo> lista = new LinkedList<Vehiculo>();
        Random r = new Random();     
        int sumaCoches=0;
        int sumaCamiones=0;
        int sumaFurgonetas=0;
        int sumaMotos=0;
        int vehiculosEliminados=0;
        long inicio=0;
        long fin=0;
        //Se llena la lista con 5000 elementos de tipo aleatorio.
        for (int i=0; i<5000; i++) {
            String tipo="";
            switch (r.nextInt(4)) {
                case 0: tipo="Coche"; break;
                case 1: tipo="Camión"; break;
                case 2: tipo="Furgoneta"; break;
                case 3: tipo="Moto"; break;
            }
            lista.add(new Vehiculo(i+1, tipo));
        }
        //Se recorre la lista con un iterador para obtener el número de vehículos de cada tipo.
        Iterator<Vehiculo> it = lista.iterator();
        while (it.hasNext()) {
            Vehiculo tmp = it.next();
            if (tmp.getTipo().equals("Coche")) {sumaCoches++;}
            else if (tmp.getTipo().equals("Camión")) {sumaCamiones++;}
            else if (tmp.getTipo().equals("Furgoneta")) {sumaFurgonetas++;}
            else {sumaMotos++;}
        }
        System.out.println ("Resumen: hay "+sumaCoches+" coches, "+sumaCamiones+" camiones, "+sumaFurgonetas+" furgonetas y "+sumaMotos+" motos.");
        //Se eliminan todos los vehículos que no son coches en el iterador.
        inicio = System.nanoTime();
        it = lista.iterator();
        while (it.hasNext()) {
            Vehiculo tmp = it.next();
            if (!tmp.getTipo().equals("Coche")) {it.remove(); vehiculosEliminados++;}
        }       
        //Se añade un número de coches igual al de coches eliminados.
        for (int i=0; i<vehiculosEliminados; i++) {
            lista.add(new Vehiculo (sumaCoches+i+1, "Coche"));
        }
        fin = System.nanoTime();       
        //Se recorre nuevamente el iterador para calcular el número de vehículos de cada tipo.
        sumaCoches=0; sumaCamiones=0; sumaFurgonetas=0; sumaMotos=0;
        it = lista.iterator();
        while (it.hasNext()) {
            Vehiculo tmp = it.next();
            if (tmp.getTipo().equals("Coche")) {sumaCoches++;}
            else if (tmp.getTipo().equals("Camión")) {sumaCamiones++;}
            else if (tmp.getTipo().equals("Furgoneta")) {sumaFurgonetas++;}
            else {sumaMotos++;}
        }
        System.out.println ("Resumen: hay "+sumaCoches+" coches, "+sumaCamiones+" camiones, "+sumaFurgonetas+" furgonetas y "+sumaMotos+" motos.");
        System.out.println ("Nanosegundos empleados en el proceso de eliminación e inserción: "+(fin-inicio)+".");
    }
}               

¡Un saludo!

5
Buenas a todos.

Esta es mi solución al ejercicio de la entrega CU00920C del curso Lenguaje de Programación Java Nivel Avanzado I.

Clase Cuadrupedo.
Código: [Seleccionar]
package javaAvanzado;
public class Cuadrupedo {
    private int idCuadrupedo;
    private String tipo;
   
    public Cuadrupedo (int idCuadrupedo, String tipo) {
        this.idCuadrupedo=idCuadrupedo;
        this.tipo=tipo;
    }
   
    public void setIdCuadrupedo (int idCuadrupedo) {
        this.idCuadrupedo=idCuadrupedo;
    }
   
    public void setTipo (String tipo) {
        this.tipo=tipo;
    }
   
    public int getIdCuadrupedo() {return idCuadrupedo;}
   
    public String getTipo() {return tipo;}
   
    @Override
    public String toString() {
        return "Cuadrupedo -> ID: "+idCuadrupedo+". Tipo: "+tipo+".\n";
    }
   
}       

Clase TestCuadrupedo (main)
Código: [Seleccionar]
package javaAvanzado;
import java.util.List;
import java.util.ArrayList;
import java.util.Random;
import java.util.Iterator;
public class TestCuadrupedo {
    public static void main (String [] args) {
        List<Cuadrupedo> lista = new ArrayList<Cuadrupedo>();
        Random r = new Random();
        String tipo="";
        Cuadrupedo temporal;
        int sumaLeones=0;
        int sumaGatos=0;
        int sumaPerros=0;
        int sumaElefantes=0;
        for (int i=0; i<10000; i++) {
            int numeroRandom = r.nextInt(4);
            switch (numeroRandom) {
                case 0: tipo="Elefante"; break;
                case 1: tipo="Perro"; break;
                case 2: tipo="Gato"; break;
                case 3: tipo="Leon"; break;
            }
            lista.add(new Cuadrupedo(i+1, tipo));
        }
        Iterator<Cuadrupedo> it = lista.iterator();
        while (it.hasNext()) {
            temporal=it.next();
            if(temporal.getIdCuadrupedo()%1000==0) {System.out.print(temporal);}
            if(temporal.getTipo().equals("Elefante")) {
                sumaElefantes++;
            }
            else if(temporal.getTipo().equals("Perro")) {
                sumaPerros++;
            }
            else if(temporal.getTipo().equals("Gato")) {
                sumaGatos++;
            }
            else {
                sumaLeones++;
            }
        }       
        System.out.println ("Resumen: hay "+sumaLeones+" leones, "+sumaGatos+" gatos, "+sumaPerros+" perros y "+sumaElefantes+" elefantes.");           
    }
}

¡Saludos!

6
Buenas.

Creo que no se trata de erratas muy importantes, pero por si acaso abro este hilo.

En la entrega CU00915C se menciona varias veces a la clase Persona cuando, me parece, la explicación se está refiriendo a la clase ConjuntoPersonas:

Citar
Para poder devolver un objeto de tipo Iterator (que es algo a lo que al fin y al cabo nos obliga la interface Iterable) necesitamos instanciar un objeto Iterator y esto no podemos hacerlo directamente. Para resolver este problema, recurrimos a definir una clase interna dentro de la clase Persona denominada MiIteratorPersona, que implementará la interface Iterator, y que por tanto nos permitirá devolver una instancia de Iterator para nuestra clase Persona.

El acceso elegido para crear la clase MiIteratorPersona es protected. ¿Por qué? Porque esta clase no tiene interés que sea visible desde otras clases. Unicamente nos interesa que sea visible desde la clase Persona o subclases de la clase Persona.

En el siguiente párrafo, donde pone "para implementar la interface iterator" creo que debería poner "para implementar la interfaz Iterable":

Citar
A nivel de términos es un poco confuso, pero cuando te acostumbres y realices unos cuantos ejercicios te resultará más fácil. Decimos que es confuso porque parece un trabalenguas: para implementar la interface iterator hemos de sobreescribir el método iterator(), y para ello hemos de poder devolver un objeto Iterator, lo cual logramos creando una clase interna que implementa la interface Iterator. Como decimos, una especie de trabalenguas.

¡Saludos!

7
Buenas.

Esta es mi solución al ejercicio de la entrega CU00915C del curso Lenguaje de Programación Java Nivel Avanzado I.

Citar
Crea una clase denominada AvesEnZoo con 4 atributos. Uno será de tipo String (tipoDeAve) y los otros tres serán de tipo int (numeroAves, numeroMachos, numeroHembras).

Crea una clase GruposDeAvesZoos que implemente la interface Iterable. Crea varios objetos de tipo AvesEnZoo y añádelos a un objeto GruposDeAvesEnZoos.

Utilizando un iterador, muestra los datos de los objetos presentes en el objeto GruposDeAvesZoos.

Clase AvesEnZoo.
Código: [Seleccionar]
package javaAvanzado;
public class AvesEnZoo {
    //Atributos de clase.
    private String tipoDeAve;
    private int numeroAves;
    private int numeroHembras;
    private int numeroMachos;
    //Constructor.
    public AvesEnZoo (String tipo, int total, int machos, int hembras) {
        tipoDeAve=tipo;
        numeroAves=total;
        numeroHembras=hembras;
        numeroMachos=machos;
    }
    //Métodos.
    public String getTipoDeAve () {return tipoDeAve;}
    public int getNumeroAves () {return numeroAves;}
    public int getNumeroHembras () {return numeroHembras;}
    public int getNumeroMachos () {return numeroMachos;}
    @Override
    public String toString() {
        String result;
        return result= tipoDeAve+"   "+numeroAves+"    "+numeroMachos+"   "+numeroHembras+"   ";
    }
}


Clase GrupoDeAvesZoo.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Iterator;
public class GrupoDeAvesZoo implements Iterable <AvesEnZoo> {
    //Atributo de la clase.
    public AvesEnZoo[] grupoDeAvesZoo;
    //Constructor.
    public GrupoDeAvesZoo (AvesEnZoo[] grupoDeAvesZoo) {
        this.grupoDeAvesZoo=grupoDeAvesZoo;
    }
    //Método.
    public Iterator<AvesEnZoo> iterator() {
        Iterator <AvesEnZoo> it = new MiIteradorGrupoDeAvesZoo();
        return it;
    }
    //Clase interna.
    protected class MiIteradorGrupoDeAvesZoo implements Iterator <AvesEnZoo> {
        //Atributo de la clase.
        protected int posicion;
        //Constructor.
        public MiIteradorGrupoDeAvesZoo() {
            posicion=0;
        }
        //Métodos.
        public boolean hasNext() {
            boolean result;
            if (posicion<grupoDeAvesZoo.length) {result=true;}
            else {result=false;}
            return result;
        }
        public AvesEnZoo next() {
            AvesEnZoo ave = grupoDeAvesZoo[posicion];
            posicion++;
            return ave;
        }
        public void remove() {
            throw new UnsupportedOperationException ("No soportado.");
        }
    }
}

Clase con el método main.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Iterator;
public class MainGrupoDeAvesZoo {
    public static void main (String [] args) {
        AvesEnZoo aves1 = new AvesEnZoo ("Águilas ", 35, 10, 25);
        AvesEnZoo aves2 = new AvesEnZoo ("Buitres", 100, 55, 45);
        AvesEnZoo aves3 = new AvesEnZoo ("Halcones", 80, 25, 55);
        AvesEnZoo [] avesEnZoo = {aves1, aves2, aves3};
        GrupoDeAvesZoo grupoDeAvesZoo = new GrupoDeAvesZoo (avesEnZoo);
        Iterator<AvesEnZoo> it = grupoDeAvesZoo.iterator();
        System.out.println ("TIPO   TOTAL|MACHOS|HEMBRAS");
        while (it.hasNext()) {
            AvesEnZoo tmp = it.next();
            System.out.println (tmp.toString());
        }
    }
}   

¡Saludos!

8
Buenas a todos.

Esta es mi solución al ejercicio de la entrega CU00919C del curso Lenguaje de Programación Java Nivel Avanzado I.

Citar
Crea una clase denominada Animal con los atributos especie (String), nombre (String), peso (double) y patas (int).

Crea una clase ListaDeAnimales que permita crear una colección de animales y que permita el recorrido de la colección usando un iterador.

Crea una clase con el método main donde se introduzcan 4 animales en la lista y se muestren por pantalla usando el iterador e indicando el número que ocupan en la lista y el total de animales en la lista.

Tras esto, debe solicitarse al usuario que indique un número de la lista a eliminar. Usando el método remove() debe eliminarse ese animal de la lista y volver a mostrarse la lista indicando el nuevo número que ocupa cada animal en la lista y el total de animales en la lista.

Clase Animal.
Código: [Seleccionar]
package javaAvanzado;
public class Animal {
    //Atributos.
    private String especie;
    private String nombre;
    private double peso;
    private int patas;
    //Constructor.
    public Animal (String especie, String nombre, double peso, int patas) {
        this.especie=especie;
        this.nombre=nombre;
        this.peso=peso;
        this.patas=patas;
    }
    //Setters y getters.
    public void setEspecie (String especie) {this.especie=especie;}
    public void setNombre (String nombre) {this.nombre=nombre;}
    public void setPeso (double peso) {this.peso=peso;}
    public void setPatas (int patas) {this.patas=patas;}
    public String getEspecie() {return especie;}
    public String getNombre() {return nombre;}
    public double getPeso() {return peso;}
    public double getPatas() {return patas;}
    @Override
    public String toString() {
        return "Especie: "+especie+". Nombre: "+nombre+". Peso: "+peso+". Patas: "+patas+".\n";
    }
}

Clase ListaAnimales.
Código: [Seleccionar]
package javaAvanzado;
import java.util.ArrayList;
import java.util.Iterator;
public class ListaAnimales {
    //Atributo.
    private ArrayList<Animal> listaAnimales;
    //Constructor.
    public ListaAnimales () {listaAnimales= new ArrayList<Animal> ();}
    //Métodos.
    public Animal getAnimal(int lugar) {return listaAnimales.get(lugar);}
    public int getLongitud() {return listaAnimales.size();}
    public void addAnimal(Animal animal) {listaAnimales.add(animal);}
    @Override
    public String toString() {return listaAnimales.toString();}
    public Iterator<Animal> iterator() {return new MiIteradorListaAnimales();}
    //Clase Interna.
    public class MiIteradorListaAnimales implements Iterator<Animal> {
        //Atributos.
        protected int posicion;
        protected boolean sepuedeeliminar;
        //Constructor.
        public MiIteradorListaAnimales () {
            posicion=0;
            sepuedeeliminar=false;
        }
        //Método.
        public int getPosicion() {return posicion;}
        //Métodos sobrescritos.       
        @Override
        public boolean hasNext() {return posicion<listaAnimales.size();}
        @Override
        public Animal next() {Animal nextAnimal = listaAnimales.get(posicion);
            posicion++;
            sepuedeeliminar=true;
            return nextAnimal;}
        @Override
        public void remove() {if(sepuedeeliminar) {
            listaAnimales.remove(posicion-1);
            posicion--;
            sepuedeeliminar=false;}
        }
    }
}

Clase principal.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Iterator;
import java.util.Scanner;
public class MainAnimal {
    public static void main (String [] args) {
        Scanner entrada= new Scanner(System.in);
        int respuesta;
        int contador = 1;
        ListaAnimales miLista = new ListaAnimales();
        miLista.addAnimal(new Animal("pantera", "Penélope", 98.55, 4));
        miLista.addAnimal(new Animal("loro", "Juan", 3.00, 2));
        miLista.addAnimal(new Animal ("perro", "Arthur", 37.66, 4));
        miLista.addAnimal(new Animal ("orangután", "Monje", 40.10, 2));       
        System.out.println ("Los animales de la lista son los siguientes: ");       
        Iterator<Animal> it;
        it = miLista.iterator();
        while (it.hasNext()) {
            Animal auxiliar = it.next();
            System.out.print ("Número "+(contador)+". "+auxiliar.toString());
            contador++;
        }
        System.out.println ("Número total de animales: "+miLista.getLongitud()+".");
        System.out.println ("¿A qué animal quieres sacar de la lista? Introduce el número.");
        respuesta = entrada.nextInt();       
        contador=1;
        Iterator <Animal> it2;
        it2= miLista.iterator();
        while(it2.hasNext()){
            Animal auxiliar = it2.next();       
            if (contador==respuesta) {it2.remove();}
            contador++;
        }
        System.out.println ("Los animales de la lista son los siguientes: ");
        contador=1;
        Iterator<Animal> it3;
        it3 = miLista.iterator();
        while (it3.hasNext()) {
            Animal auxiliar = it3.next();
            System.out.print ("Número "+(contador)+". "+auxiliar.toString());
            contador++;
        }
        System.out.println ("Número total de animales: "+miLista.getLongitud()+".");
    }
}       

¡Saludos!

9
Buenas.

Esta es mi solución al ejercicio de la entrega CU00914C de Java Nivel Avanzado I sobre el uso de StringBuilder y StringBuffer.

Código: [Seleccionar]
package javaAvanzado;
public class HolaCaracola {
    public static void main (String [] args) {
        StringBuilder cadena = new StringBuilder("Hola Caracola");
        System.out.println (cadena);
        System.out.println ("Capacidad del StringBuilder: "+cadena.capacity()+". Longitud del StringBuilder: "+cadena.length()+".");
        System.out.println (cadena.replace(cadena.indexOf("ola Caracola"), cadena.indexOf(" Caracola"),"ay").append("s"));
        int cantidadDeCaracolas =5000;
        cadena.append(5000);
        cadena.delete(cadena.indexOf("Caracolas"), cadena.indexOf("5000"));
        cadena.append(" Caracolas");
        System.out.println (cadena);
        System.out.println (cadena.append(" en el mar"));       
        String otraCadena = cadena.substring(cadena.indexOf(" mar"));
        System.out.println (otraCadena);
        System.out.println ("Capacidad del StringBuilder: "+cadena.capacity()+". Longitud del StringBuilder: "+cadena.length()+".");
    }
}

Un saludo.

10
Buenas a todos.

Dejo aquí mi respuesta al ejercicio de la entrega CU00908C sobre generación de números aleatorios con Java por si hubiera algo que mejorar.

Clase donde genero los números aleatorios:

Código: [Seleccionar]
package javaAvanzado;
import java.util.Random;
public class GeneradorAleatorio {
    //Atributos.
    private int numeroInicial;
    private int numeroFinal;
    private int rndEntero;   
    //Constructor.
    public GeneradorAleatorio () {
        numeroInicial=0;
        numeroFinal=0;
        rndEntero=0;
    }
    //Setters.
    public void setNumeroInicial (int valorNumeroInicial) {
        numeroInicial = valorNumeroInicial;
    }

    public void setNumeroFinal (int valorNumeroFinal) {
        numeroFinal = valorNumeroFinal;
    }

    public int generar() {
        Random rnd = new Random(); 
        int cantidadNumerosRango;
        if (numeroFinal<0&&numeroInicial<0) {
            //Intervalo de enteros negativos.
            if (numeroFinal<=numeroInicial) {
                cantidadNumerosRango = -((-numeroFinal)+numeroInicial+1);
                rndEntero =(int) ((rnd.nextDouble()*cantidadNumerosRango)+numeroInicial);               
            } else {
                cantidadNumerosRango = -((-numeroInicial)+numeroFinal+1);
                rndEntero =(int) ((rnd.nextDouble()*cantidadNumerosRango)+numeroFinal);
            }
        } else {
            //Intervalo de enteros positivos o de positivos y negativos.
            cantidadNumerosRango =numeroFinal-numeroInicial+1;
            rndEntero = (int) ((rnd.nextDouble()*cantidadNumerosRango)+numeroInicial);           
        }
        return rndEntero;
    }     

    public int getRandom () {
        return rndEntero;
    }
}

Clase con el método main.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Scanner;
public class MainGenerarAleatorio {
    public static void main (String [] args) {
        Scanner entrada = new Scanner (System.in);
        GeneradorAleatorio generador = new GeneradorAleatorio();
        int recibido;

        System.out.println ("Introduce el número inicial del rango.");     
        recibido = entrada.nextInt();
        generador.setNumeroInicial(recibido);
        System.out.println ("Introduce el número final del rango.");
        recibido = entrada.nextInt();
        generador.setNumeroFinal(recibido);
        System.out.println ("Introduce el número de intentos.");
        int intentos = entrada.nextInt();
        int contadorAciertos = 0;
        int contadorFallos = 0;
        int[] resultados = new int[intentos];
        for (int i=0; i<intentos; i++) {           
            System.out.println ("¿En qué número estoy pensando?");
            recibido = entrada.nextInt();           
            if (recibido==generador.generar()) {
                System.out.println ("¡Has acertado! Enhorabuena.");
                contadorAciertos=contadorAciertos+1;
            } else {System.out.println ("No es ese.");
                contadorFallos=contadorFallos+1;
            }
            resultados[i] = generador.getRandom();
        }
        System.out.println ("Has acertado "+contadorAciertos+" veces y has fallado "+contadorFallos+".");
        System.out.print ("Solución: ");
        for (int i=0; i<resultados.length; i++) {System.out.print(resultados[i]+" ");}       
        String seguir="s";     
        while (seguir.equalsIgnoreCase("s")) {
            entrada.nextLine();
            System.out.println ("¿Quieres probar de nuevo? (s/n)");           
            seguir = entrada.nextLine();
            if (seguir.equalsIgnoreCase("s")) {
                System.out.println ("Introduce el número inicial del rango.");     
                recibido = entrada.nextInt();
                generador.setNumeroInicial(recibido);
                System.out.println ("Introduce el número final del rango.");
                recibido = entrada.nextInt();
                generador.setNumeroFinal(recibido);
                System.out.println ("Introduce el número de intentos.");
                intentos = entrada.nextInt();
                contadorAciertos = 0;
                contadorFallos = 0;
                resultados = new int[intentos];
                for (int i=0; i<intentos; i++) {           
                    System.out.println ("¿En qué número estoy pensando?");
                    recibido = entrada.nextInt();           
                    if (recibido==generador.generar()) {
                        System.out.println ("¡Has acertado! Enhorabuena.");
                        contadorAciertos=contadorAciertos+1;
                    } else {System.out.println ("No es ese.");
                        contadorFallos=contadorFallos+1;
                    }
                    resultados[i] = generador.getRandom();
                }
                System.out.println ("Has acertado "+contadorAciertos+" veces y has fallado "+contadorFallos+".");
                System.out.print ("Solución: ");
                for (int i=0; i<resultados.length; i++) {System.out.print(resultados[i]+" ");}
            } else {System.out.println ("¡Hasta la próxima!"); break;}
        }
    }
}

¡Un saludo!

11
Buenos días.

Escribo para informar de dos erratas que he detectado en la entrega CU00906C de Java (Nivel Avanzado I). Ambas están en la tabla de funciones de Math.

La primera es esta:
Citar
abs
 Valor absoluto
 int x = Math.abs(2.3);
 x = 2;

En vez de obtener un valor absoluto, se ha hecho un redondeo. Pienso que debería ser algo como double x = Math.abs(-2.3); x = 2.3 o int x = Math.abs(-2); x = 2.

En la misma tabla, más adelante, pone lo siguiente:
Citar
pow
 Potencia
 double x = Math.pow(2.3);
 x = 8.0;

Creo que debería ser Math.pow(2,3) en vez de Math.pow(2.3).

Eso es todo. ¡Saludos!

12
Buenos días.

Haciendo el segundo ejercicio de la entrega CU00903C del curso de programación java nivel avanzado, me ha surgido una duda relacionada con el Scanner.

Esta fue mi primera versión del ejercicio. Al ejecutar el programa, la consola no me permitía introducir el nombre del segundo alumno y almacenaba una cadena vacía.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Scanner;
public class NotasAlumnos {
    public static void main (String [] args) {
        String [] alumno = new String [2];
        String [] notaTexto = {"Suspenso", "Bien", "Notable", "Sobresaliente"};
        double [] nota = new double [2];
        String calificacion;
       
        //Primer alumno.
        System.out.println ("Introduce el nombre del primer alumno.");
        Scanner entrada = new Scanner (System.in);
        String respuesta = entrada.nextLine();
        alumno[0]=respuesta;
        System.out.println ("Introduce la nota de "+respuesta+".");       
        double respuestaNota = entrada.nextDouble();
        if (respuestaNota<0||respuestaNota>10) { System.out.println (respuestaNota + "no es un valor válido. Introduce una nota de 0 a 10.");
            respuestaNota = entrada.nextDouble();}
        nota[0]=respuestaNota;
       
        //Segundo alumno.
        System.out.println ("Introduce el nombre del segundo alumno.");       
        respuesta= entrada.nextLine();
        alumno[1] = respuesta;
        System.out.println ("Introduce la nota de "+respuesta+".");
        respuestaNota = entrada.nextDouble();
        if (respuestaNota<0||respuestaNota>10) { System.out.println (respuestaNota + " no es un valor válido. Introduce una nota de 0 a 10.");
            respuestaNota = entrada.nextDouble();}
        nota[1] = respuestaNota;
       
        //Calificaciones.
        System.out.println ("Calificaciones:");
        for (int i=0; i<=1; i++) {
            if (nota[i]<5) {calificacion=notaTexto[0];}
            else if (nota[i]>=5 && nota[i]<7) {calificacion = notaTexto[1];}
            else if (nota[i]>=7&& nota[i]<9) {calificacion = notaTexto[2];}
            else {calificacion=notaTexto[3];}
            System.out.println (alumno[i]+" : "+nota[i]+ " ("+calificacion+").");
        }
    }
}

Código: [Seleccionar]
Introduce el nombre del primer alumno.
Mario
Introduce la nota de Mario.
9,99
Introduce el nombre del segundo alumno.
Introduce la nota de .
7
Calificaciones:
Mario : 9.99 (Sobresaliente).
 : 7.0 (Notable).

Al introducir un segundo Scanner para el segundo alumno, el problema se solucionó, pero no entiendo el porqué. En otras partes del programa he podido reutilizar la variable "entrada" para recoger la nota escribiendo entrada.nextDouble(), sin necesidad de crear un nuevo objeto Scanner.

Esta es la versión que funciona.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Scanner;
public class NotasAlumnos {
    public static void main (String [] args) {
        String [] alumno = new String [2];
        String [] notaTexto = {"Suspenso", "Bien", "Notable", "Sobresaliente"};
        double [] nota = new double [2];
        String calificacion;
       
        //Primer alumno.
        System.out.println ("Introduce el nombre del primer alumno.");
        Scanner entrada = new Scanner (System.in);
        String respuesta = entrada.nextLine();
        alumno[0]=respuesta;
        System.out.println ("Introduce la nota de "+respuesta+".");       
        double respuestaNota = entrada.nextDouble();
        if (respuestaNota<0||respuestaNota>10) { System.out.println (respuestaNota + "no es un valor válido. Introduce una nota de 0 a 10.");
            respuestaNota = entrada.nextDouble();}
        nota[0]=respuestaNota;
       
        //Segundo alumno.
        System.out.println ("Introduce el nombre del segundo alumno.");     
        Scanner entrada2 = new Scanner (System.in);
        respuesta= entrada2.nextLine();
        alumno[1] = respuesta;
        System.out.println ("Introduce la nota de "+respuesta+".");
        respuestaNota = entrada.nextDouble();
        if (respuestaNota<0||respuestaNota>10) { System.out.println (respuestaNota + " no es un valor válido. Introduce una nota de 0 a 10.");
            respuestaNota = entrada.nextDouble();}
        nota[1] = respuestaNota;
       
        //Calificaciones.
        System.out.println ("Calificaciones:");
        for (int i=0; i<=1; i++) {
            if (nota[i]<5) {calificacion=notaTexto[0];}
            else if (nota[i]>=5 && nota[i]<7) {calificacion = notaTexto[1];}
            else if (nota[i]>=7&& nota[i]<9) {calificacion = notaTexto[2];}
            else {calificacion=notaTexto[3];}
            System.out.println (alumno[i]+" : "+nota[i]+ " ("+calificacion+").");
        }
    }
}

Gracias de antemano por vuestras respuestas.

13
¡Buenos días!

Dejo mi respuesta al ejercicio CU00686B de Aprender programación Java desde cero.

Superclase Producto:
Código: [Seleccionar]
package empresaAgroalimentaria;

/**
 * Código de la clase Producto.
 * @author Erik Escriche
 */
public class Producto {
    String fechaCaducidad;
    int numeroLote;
    /**
     * Constructor de objetos de clase Producto.
     */
    public Producto(String fechaCaducidad, int numeroLote){
       this.fechaCaducidad= fechaCaducidad;
       this.numeroLote= numeroLote;
    }

    /**
     * Métodos para obtener los datos.
     */
    public String getFechaCaducidad () { return fechaCaducidad; }
    public int getNumeroLote() {return numeroLote;}
   
    public void mostrarInformacionProducto () {
        System.out.print ("Fecha de caducidad: "+getFechaCaducidad()+". Número de lote: "+getNumeroLote()+". ");
    }
}

Subclase ProductoFresco:
Código: [Seleccionar]
package empresaAgroalimentaria;

/**
 * Código de la subclase ProductoFresco de la superclase Producto.
 * @author Erik Escriche
 */
public class ProductoFresco extends Producto {
   String fechaEnvasado;
   String paisOrigen;
   
    /**
     * Constructor de objetos de la clase ProductoFresco.
     */
    public ProductoFresco(String fechaCaducidad, int numeroLote) {
        super(fechaCaducidad, numeroLote);
        fechaEnvasado = "";
        paisOrigen= "";
    }
   
    public void setFechaEnvasado (String fechaEnvasado) {this.fechaEnvasado=fechaEnvasado;}
   
    public void setPaisOrigen (String paisOrigen) {this.paisOrigen=paisOrigen;}
   
    public String getFechaEnvasado() {return fechaEnvasado;}
   
    public String getPaisOrigen() {return paisOrigen;}
   
    public void mostrarInformacionProductoFresco () {
        System.out.print ("Datos del producto fresco. ");
        mostrarInformacionProducto();
        System.out.print ("Fecha de envasado: " + fechaEnvasado + ". País de origen: " + paisOrigen + ".\n");
    }
}

Subclase ProductoRefrigerado:
Código: [Seleccionar]
package empresaAgroalimentaria;

/**
 * Código de la subclase ProductoRefrigerado de la superclase Producto.
 * @author Erik Escriche
 */
public class ProductoRefrigerado extends Producto {
   String codigoOrganismoSupervisionAlimentaria;
     
    /**
     * Constructor de objetos de la clase ProductoRefrigerado.
     */
    public ProductoRefrigerado(String fechaCaducidad, int numeroLote) {
        super(fechaCaducidad, numeroLote);
        codigoOrganismoSupervisionAlimentaria="";
    }
       
    public void setCodigoOrganismoSupervisionAlimentaria (String codigoOrganismoSupervisionAlimentaria) {this.codigoOrganismoSupervisionAlimentaria=codigoOrganismoSupervisionAlimentaria;}
   
    public String getCodigoOrganismoSupervisionAlimentaria() {return codigoOrganismoSupervisionAlimentaria;}
   
    public void mostrarInformacionProductoRefrigerado () {
        System.out.print ("Datos del producto refrigerado. ");
        mostrarInformacionProducto();
        System.out.print ("Código del organismo de supervisión alimentaria: "+codigoOrganismoSupervisionAlimentaria+".\n");
    }
}

Subclase ProductoCongelado:
Código: [Seleccionar]
package empresaAgroalimentaria;

/**
 * Código de la subclase ProductoCongelado de la superclase Producto.
 * @author Erik Escriche
 */
public class ProductoCongelado extends Producto{
    int temperaturaCongelacionRecomendada;

    /**
     * Constructor de objetos de la clase ProductoCongelado
     */
    public ProductoCongelado(String fechaCaducidad, int numeroLote){
        super(fechaCaducidad,numeroLote);
        temperaturaCongelacionRecomendada=0;
    }
 
    public void setTemperaturaCongelacionRecomendada (int temperaturaCongelacionRecomendada) {
        this.temperaturaCongelacionRecomendada=temperaturaCongelacionRecomendada;
    }
   
    public int getTemperaturaCongelacionRecomendada () {return temperaturaCongelacionRecomendada;}
   
    public void mostrarInformacionProductoCongelado() {       
        System.out.print ("Datos del producto congelado. ");
        mostrarInformacionProducto();
        System.out.print ("Temperatura de congelación recomendada: " + temperaturaCongelacionRecomendada + " grados.\n");
    }
}

Clase TestEmpresaAgroalimentaria:
Código: [Seleccionar]
package empresaAgroalimentaria;

/**
 * Código de la clase TestEmpresaAgroalimentaria que nos va a servir para comprobar el correcto funcionamiento de la superclase Producto y sus subclases.
 * @author Erik Escriche
 */
public class TestEmpresaAgroalimentaria {
    public static void main (String [] Args) {
        ProductoFresco productoFresco = new ProductoFresco ("07/07/07",456);
        productoFresco.setFechaEnvasado ("02/02/02");
        productoFresco.setPaisOrigen ("Panamá");
        productoFresco.mostrarInformacionProductoFresco();
       
        ProductoRefrigerado productoRefrigerado = new ProductoRefrigerado ("08/08/08", 987);
        productoRefrigerado.setCodigoOrganismoSupervisionAlimentaria ("487693562810");
        productoRefrigerado.mostrarInformacionProductoRefrigerado();
       
        ProductoCongelado productoCongelado = new ProductoCongelado ("09/09/09", 123);
        productoCongelado.setTemperaturaCongelacionRecomendada(-10);
        productoCongelado.mostrarInformacionProductoCongelado();
    }
}

¡Saludos!

14
Hola de nuevo.

Dejo aquí mi respuesta al ejercicio propuesto en la entrega CU00681B de Aprender programación Java desde cero.

Clase Vehiculo:
Código: [Seleccionar]
public class Vehiculo {
    enum MarcaDeVehiculo {FORD, TOYOTA, SUZUKI, RENAULT, SEAT};
    private String matricula;
    private MarcaDeVehiculo marca;
   
    public Vehiculo () {
        matricula = "desconocida";
        marca = MarcaDeVehiculo.SUZUKI;
    }
   
    public void setMatricula (String valorMatricula) {
        matricula= valorMatricula;
    }

    public void setMarca (String valorMarca) {
        String marcaCoche = valorMarca;
        if (marcaCoche.equalsIgnoreCase("FORD")) {
            marca = MarcaDeVehiculo.FORD;
        } else if (marcaCoche.equalsIgnoreCase ("TOYOTA")) {
            marca = MarcaDeVehiculo.TOYOTA;
        } else if (marcaCoche.equalsIgnoreCase ("SUZUKI")) {
        } else if (marcaCoche.equalsIgnoreCase ("RENAULT")) {
            marca = MarcaDeVehiculo.RENAULT;
        } else if (marcaCoche.equalsIgnoreCase ("SEAT")) {
            marca = MarcaDeVehiculo.SEAT;
        }     
    }

    public String getMatricula () { return matricula; }

    public String getMarca () {
        return marca.toString().toLowerCase();
    }
}

Clase TestVehiculo:
Código: [Seleccionar]
import java.util.Scanner;
/**
 * Clase para comprobar que los métodos de la clase Vehiculo funcionan correctamente. *
 * @author Erik Escriche
 */
public class TestVehiculo {
    public static void main (String [] args) {
        Vehiculo coche = new Vehiculo ();
        System.out.println ("Datos por defecto: matrícula " + coche.getMatricula () + " y marca " + coche.getMarca() + ".");
        System.out.println ("¿Cuál es la matrícula del coche?");
        Scanner entrada1 = new Scanner (System.in);
        String respuesta = entrada1.nextLine();
        coche.setMatricula(respuesta);
        System.out.println ("Matrícula actualizada a " + coche.getMatricula() + ".");
        System.out.println ("¿Cuál es la marca del coche?");
        Scanner entrada2 = new Scanner (System.in);
        String respuesta2 = entrada2.nextLine();
        while (!respuesta2.equalsIgnoreCase("FORD")&&!respuesta2.equalsIgnoreCase("SUZUKI")&&!respuesta2.equalsIgnoreCase("TOYOTA")&&!respuesta2.equalsIgnoreCase("RENAULT")&&
        !respuesta2.equalsIgnoreCase("SEAT")) { System.out.println ("La marca introducida no es una marca válida. Introduzca una marca de las siguientes: FORD, TOYOTA, SUZUKI, RENAULT, SEAT.");
            Scanner otraEntrada = new Scanner (System.in);
            respuesta2 = otraEntrada.nextLine();
        }
        coche.setMarca (respuesta2);
        System.out.println ("Marca actualizada a " + coche.getMarca() + ".");
    }
}

¡Un saludo!

15
¡Buenas!

Haciendo el ejercicio CU00679B del curso de programación java desde cero me ha surgido una duda. El código que escribí inicialmente es este:

Código: [Seleccionar]
import java.util.LinkedList;
import java.util.Arrays;
public class TestLinkedList {
    public static void main (String [] args) {
        Boolean [] miArray = {true, true, false, false, true, false};       
        LinkedList <Boolean> miLinkedList = new LinkedList <Boolean> ();
        miLinkedList = Arrays.asList(miArray);       
        System.out.println ("Contenido del LinkedList: " + miLinkedList);
    }
}

Al compilarlo, me daba error porque los tipos son incompatibles. Revisé la teoría y me di cuenta de que el método asList crea un tipo List, así que entiendo que salte el error. Sin embargo, no comprendo por qué no aparece el mismo error de compilación cuando se escribe lo siguiente:

Código: [Seleccionar]
import java.util.LinkedList;
import java.util.Arrays;
import java.util.List;
public class TestLinkedList {
    public static void main (String [] args) {
        Boolean [] miArray = {true, true, false, false, true, false};       
        List <Boolean> miLinkedList = new LinkedList <Boolean> ();
        miLinkedList = Arrays.asList(miArray);       
        System.out.println ("Contenido del LinkedList: " + miLinkedList);
    }
}

¿Cuál es la diferencia entre escribir
Código: [Seleccionar]
List<Boolean> miLinkedList = new LinkedList <Boolean> () y escribir
Código: [Seleccionar]
LinkedList<Boolean> miLinkedList = new LinkedList<Boolean>()? ¿No se crea en ambos casos un LinkedList?

Muchas gracias de antemano.

16
Buenos días.

Tratando de hacer el ejercicio de la entrega CU00666B del curso básico de Java de aprender a programar, me ha surgido un problema con el for extendido. Cuando compilo la clase, me aparece el siguiente mensaje: "for-each not applicable to expression type required: array or java.lang.Iterable; found: ListaCantantesFamosos".

Esta es la parte que me da error:
Código: [Seleccionar]
public static void main (String []args) {
        ListaCantantesFamosos prueba = new ListaCantantesFamosos();
        int i=0;
        System.out.println ("Esta es la lista que tenemos por ahora:");
        for (String z:prueba) {
                System.out.println ((i+1) + ".- " + z);
                i++;
            }

Esta es la clase completa.
Código: [Seleccionar]
public class TestCantantes2 {
    public static void main (String []args) {
        ListaCantantesFamosos prueba = new ListaCantantesFamosos();
        int i=0;
        System.out.println ("Esta es la lista que tenemos por ahora:");
        for (String z:prueba) {
                System.out.println ((i+1) + ".- " + z);
                i++;
            }
        System.out.println ("Introduce un nuevo cantante.");
        EntradaDeTeclado entrada1 = new EntradaDeTeclado();
        prueba.addCantante(entrada1.getEntrada());
        System.out.println ("Has introducido al cantante " + prueba.getCantante((prueba.getTamaño())-1) + ".");
        System.out.println ("Esta es la lista que tenemos por ahora:");
        i=0;
        for (String z:prueba) {
                System.out.println ((i+1) + ".- " + z);
                i++;
            }
       
        while (true) {
            System.out.println ("¿Quieres introducir más cantantes? Si quieres salir del programa, escribe No. Si quieres continuar, introduce el nombre de un cantante");
            EntradaDeTeclado j= new EntradaDeTeclado();
            prueba.addCantante(j.getEntrada());
            if((j.getEntrada()).equalsIgnoreCase("No")) {break;}
            System.out.println ("Esta es la lista que tenemos por ahora:");
            i=0;
            for (String z:prueba) {
                System.out.println ((i+1) + ".- " + z);
                i++;
            }
            ;
        }
    }
}


Por si fuera necesaria, dejo también aquí la clase ListaCantantesFamosos.
Código: [Seleccionar]
import java.util.ArrayList;
public class ListaCantantesFamosos {
    public ArrayList<String> listacantantes;
    //Constructor.
    public ListaCantantesFamosos () {
        listacantantes= new ArrayList<String>();
        listacantantes.add ("Harry");
        listacantantes.add("Hermione");
        listacantantes.add("Ron");
    }
    //Método para añadir mas cantantes.
    public void addCantante (String cantante) { listacantantes.add(cantante);}
   
    public int getTamaño () { return listacantantes.size();}

    public String getCantante (int posicion) {
        if (posicion>=0&&posicion<listacantantes.size()) {
            return listacantantes.get(posicion);
        } else {return "No hay tantos cantantes, tío.";}
    }
}

Cuando elimino los for extendidos, el código parece funcionar correctamente. ¿Alguien sabe dónde está el error?

Muchas gracias de antemano.

17
Buenos días.
Esta es mi propuesta para el ejercicio de la entrega CU00657B de "Aprender programación Java desde cero".

Código: [Seleccionar]
/* Este clase te dice la longitud de la cadena y si esta cadena comienza por la letra a. */
import java.util.Scanner;
public class DescribeCadena {
    public static void main (String [] args) {
        System.out.println ("Introduce un texto.");
        String entradaTeclado = "";
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine (); // Crea un String que se corresponde con el texto introducido.
        int numeroCaracteres = entradaTeclado.length();
        if (numeroCaracteres<5) {
            System.out.print ("La cadena introducida tiene menos de 5 caracteres");
        } else if (numeroCaracteres>=5&&numeroCaracteres<=15) {
            System.out.print ("La cadena introducida tiene entre 5 y 15 caracteres");
        } else {
            System.out.print ("La cadena introducida tiene más de 15 caracteres");
        }
        String primeraLetra = entradaTeclado.substring(0,1);
        if (primeraLetra.equals ("a") || primeraLetra.equals ("A") || primeraLetra.equals ("á") || primeraLetra.equals ("Á") ) {
            System.out.print (" y comienza por a.\n");
        } else {
            System.out.print (" y no comienza por a.\n");
        }
    }
}

He visto que no puedo usar un código tipo primeraLetra == "a". ¿El operador == solo puede usarse con tipos primitivos?

18
Buenos días.

Dejo aquí el código que he escrito para el método combinadoSiempre y la respuesta a las preguntas. Muchas gracias de antemano por las correcciones y comentarios.

Código: [Seleccionar]
//Método que combina las cadenas con cualesquiera caracteres disponibles.
    public String combinadoSiempre (String valor_texto1, String valor_texto2) {
        String combinacionSiempre = "";
        if (valor_texto1.length()>=3&&valor_texto2.length()>=3) {
            combinacionSiempre = valor_texto1.substring (0,3) + " " + valor_texto2.substring(0,3);
        } else if (valor_texto1.length()<3&&valor_texto2.length()>=3) {
            combinacionSiempre = valor_texto1.substring (0) + " " + valor_texto2.substring (0,3);
        } else if (valor_texto1.length()>=3&&valor_texto2.length()<3) {
            combinacionSiempre = valor_texto1.substring (0,3) + " " + valor_texto2.substring(0);
        } else {
            combinacionSiempre = valor_texto1.substring (0) + " " + valor_texto2.substring (0);
        }
        System.out.println ("El resultado de la combinación es " + combinacionSiempre + ".");
        return combinacionSiempre;
    }

Fíjate en el resultado que ofrece el método CombinadoSiempre cuando se le pasan como parámetros dos cadenas vacías. ¿Te parece lógico el resultado? Sí, me parece lógico, ya que hemos pedido en el código que aparezca un espacio en blanco entre las dos cadenas.

En la clase tenemos definidos dos atributos o campos. ¿Tienen utilidad conocida a la vista del código de la clase? ¿Se usan en los métodos que tenemos definidos? No, los atributos no tienen utilidad en el código que hemos escrito. No se usan en los métodos que tenemos definidos. Se pueden omitir y el programa funciona igual.

Páginas: [1]

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