Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Erik_Escriche

Páginas: [1] 2 3 4
1
¡Hola Ogramar!

Te agradezco mucho la observación. He estado pensando de nuevo el ejercicio y he unido los métodos en uno solo. También he modificado el main para que baste con un switch. El código se ha reducido notablemente. Ha quedado así:

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="";

        while (respuesta.equalsIgnoreCase("S")){
            System.out.println ("¿Qué cadena desea analizar?");
            cadena=entrada.nextLine();
            String textoPorPantalla="";
            char[] array = {'a','e','i','o','u'};
            for (int i=0; i<array.length; i++) {
                switch (analizarVocal(cadena,array[i])){
                    case 1: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es par. "; break;
                    case -1: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es impar. "; break;
                    case 0: textoPorPantalla=textoPorPantalla+"El número de letras "+array[i]+" es cero. "; break;
                }
            }
                System.out.println (textoPorPantalla);
                System.out.print ("¿Desea analizar otra cadena? (S/N) ");
                respuesta = entrada.nextLine();           
        }
    }

    public static int analizarVocal (String cadena, char vocalParaAnalizar) {
        Stack<String> pila = new Stack<String>(); char v=vocalParaAnalizar; String vocal=String.valueOf(vocalParaAnalizar);
        int i=0; int auxiliar=0;
        while (i<cadena.length()) {
            if (Character.toLowerCase(cadena.charAt(i))==v&&pila.empty()) {pila.push(vocal); auxiliar++;}
            else if (Character.toLowerCase(cadena.charAt(i))==v&&!pila.empty()) {pila.pop();}
            i++;
        }
        if (auxiliar==0) {return 0;} else { if (pila.empty()) {return 1;} else {return -1;}}     
    }

}

De nuevo, muchas gracias por tus revisiones. Son siempre muy acertadas.
¡Un saludo!

2
Antes de nada, muchas gracias por revisar mis tres ejercicios. Es verdad, la fórmula no encaja. Si quiero que saque valores entre 150 y 40 creo que debería escribir rnd.nextInt(111)+40.

Dejo de nuevo la clase TestHotel corregida:
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(111)+40;
            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;
        }
    }
}

¡Un saludo y gracias!

5
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!

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

7
¡Hola Damian!
Tu ejercicio funciona bien. Solo cambiaría el nombre de RaizCuadrada por raizCuadrada para seguir la convención de empezar los nombres de los métodos con minúscula y el de miniCalculadoraEjemplo por MiniCalculadoraEjemplo para seguir la convención de empezar los nombres de las clases con mayúscula.
Saludos.

8
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!

9
Es posible que no te funcionara por lo del constructor. Prueba a crear los objetos en el constructor de la clase Casa. A mí me compiló correctamente cuando hice los cambios.

¡Suerte!

10
Hola Jesu.
Parece que está todo bien : )
¡Un saludo!

11
Hola Damian.

Solo quiero corregir dos cosas. La primera es que normalmente los objetos empiezan por minúscula para distinguirlos de las clases, que empiezan por mayúscula. Así, en vez de declarar un objeto "SalonCasa SalonCasa" y un objeto "CocinaCasa CocinaCasa", yo declararía un "SalonCasa salonCasa" y un "CocinaCasa cocinaCasa".

Por otra parte, en el constructor de la clase Casa se deben crear los objetos salonCasa y cocinaCasa:

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

En el enunciado se explicaba así:
Citar
Define un constructor para la clase Casa que establezca unos valores de defecto para los atributos simples y que cree nuevos objetos si se trata de atributos objeto.

Espero que te sirva. ¡Saludos!

12
Hola Jesu.

La parte del valor absoluto está bien, pero fíjate que en vez de hacer la raíz cuadrada de un número has hecho la potencia. El método para obtener la raíz cuadrada podría escribirse así:

Código: [Seleccionar]
public double getRaiz(double a) {return Math.sqrt(a);}
¡Un saludo!

13
Buenas Ogramar.

Muchas gracias por tu reflexión; es totalmente acertada. He modificado la clase y ahora los cuadrúpedos se crean, cuentan e imprimen en un solo bucle, ahorrando iteraciones y líneas de código. Así es como lo he hecho:

Código: [Seleccionar]
import java.util.List;
import java.util.ArrayList;
import java.util.Random;
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;
        System.out.println ("Cuadrúpedos cuyo ID es múltiplo de 1000:");
                for (int i=0; i<10000; i++) {
            int numeroRandom = r.nextInt(4);
            switch (numeroRandom) {
                case 0: tipo="Elefante"; sumaElefantes++; break;
                case 1: tipo="Perro"; sumaPerros++; break;
                case 2: tipo="Gato"; sumaGatos++; break;
                case 3: tipo="Leon"; sumaLeones++; break;
            }
            if ((i+1)%1000==0) {
                temporal = new Cuadrupedo(i+1, tipo); System.out.print(temporal); lista.add(temporal);
            } else {
                lista.add(new Cuadrupedo(i+1, tipo));
            }
        }
        System.out.println ("Resumen: hay "+sumaLeones+" leones, "+sumaGatos+" gatos, "+sumaPerros+" perros y "+sumaElefantes+" elefantes.\n");           
    }
}

¡Un saludo y gracias de nuevo!

14
Hola Damian.

Está perfecto. ¡Un saludo!

15
Así está ya todo bien : )

Para seguir el convenio de programación Java, es recomendable que en el constructor inicialices estadoCivil a false en vez de a true.

16
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!

17
Hola gary.

El ejercicio funciona correctamente. Respecto a tu duda, el operador == no puede usarse para comparar el contenido de dos objetos (en una entrega posterior se explica el porqué). Para comprobar si el contenido de dos Strings es el mismo puedes usar el método equals() o el método equalsIgnoreCase(). El segundo, a la hora de comparar, no tiene en cuenta ni las mayúsculas ni los acentos.

En tu ejercicio quedaría así:

Código: [Seleccionar]
public String comienzaConA(String texto){       
        System.out.println("la primera letra es: "+texto.substring(0,1));//Prueba
        if(texto.substring(0,1).equalsIgnoreCase("a")){
            return "comienza por 'a'";
        }else{
            return "no comienza por 'a'";
        }
    }

He modificado algunas cosas de tu código porque había variables que no eran necesarias, pero no son cambios importantes:

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
//Código de nuestra clase principal ejemplo aprenderaprogramar.com
public class TestPrograma1 {
 
    public static void main (String [ ] args) {
        System.out.println ("Empezamos el programa");
        System.out.println ("Por favor introduzca una cadena por teclado:");
        String entradaTeclado = "";
        Scanner entradaEscaner = new Scanner (System.in); //Creación de un objeto Scanner
        entradaTeclado = entradaEscaner.nextLine (); //Invocamos un método sobre un objeto Scanner
       
        TestPrograma1 tp1=new TestPrograma1();       
        System.out.println ("Entrada recibida por teclado es: \"" + entradaTeclado +"\"");
        System.out.println (tp1.intervaloCaracteres(entradaTeclado)+" y "+tp1.comienzaConA(entradaTeclado));
    } //Cierre del main
   
    public String intervaloCaracteres(String texto){       
        String result="La cadena tiene ";
        if(texto.length()<5){
            return result+"menos de 5 caracteres";
       
        }else if (texto.length()>15){
                    return result+"mas de 15 caracteres";
           
              }else{
                    return result+"entre 5 y 15 caracteres";
              }
    }
   
    public String comienzaConA(String texto){       
        System.out.println("la primera letra es: "+texto.substring(0,1));//Prueba
        if(texto.substring(0,1).equalsIgnoreCase("a")){
            return "comienza por 'a'";
        }else{
            return "no comienza por 'a'";
        }
    }
} //Cierre de la clase

Espero que te sirva. ¡Saludos!

18
Hola Damian.

Me parece que solo hay una cosa que corregir. No puedes usar el mismo campo (estadoCivil) para establecer tres cosas distintas. Si quisieras saber si está casado, si está soltero y si está separado, tendrías que crear tres atributos de tipo booleano en tu código.

Por ejemplo:
Código: [Seleccionar]
private boolean casado;
private boolean soltero;
private boolean separado;

Más adelante, en el constructor, darías a los tres atributos el valor inicial false (se hace así por convenio):
Código: [Seleccionar]
casado=false;
soltero=false;
separado=false;

Para cada uno de los atributos tendrías que crear un método tipo set y un método tipo get.

No has puesto a qué entrega corresponde tu ejercicio. Me parece que es este:

Citar
EJERCICIO

Considera estás desarrollando un programa Java donde necesitas trabajar con objetos de tipo Persona. Define una clase Persona análoga a la que hemos visto para taxis, pero en este caso considerando los siguientes atributos de clase: nombre (String), apellidos (String), edad (int), casado (boolean), numeroDocumentoIdentidad (String). Define un constructor y los métodos para poder establecer y obtener los valores de los atributos. Compila el código para comprobar que no presenta errores. Para comprobar la corrección de tu solución puedes consultar en los foros aprenderaprogramar.com.

Este ejercicio te pide que utilices simplemente un atributo boolean casado, con lo que basta con escribir lo siguiente:

Código: [Seleccionar]
/*Ejemplo - aprenderaprogramar.com */
/*Clasificacion de personas
 */
public class Clasificacion{
    private String nombre;                //Nombre
    private String apellido;              //Apellido
    private int edad;                     //Edad
    private boolean casado;               //Casado true/false
    private String numeroIdentificacion;  //Numero de documento

    //Constructor
    public Clasificacion(){
        nombre= "";
        apellido= "";
        edad= 0;
        casado=false;
        numeroIdentificacion= "No establecido aun";
    } //Cierre del constructor

    //Método para establecer sus características
    //Nombre
    public void setNombre (String valorNombre){
        nombre= valorNombre;
    }
    //Apellido
    public void setApellido (String valorApellido) {
        apellido= valorApellido;
    }
    //Edad
    public void setEdad (int valorEdad) {
        edad= valorEdad;
    }
    //Estado civil
    public void setCasado (boolean valorCasado) {
        casado= valorCasado;
    }
    //Número de documento
    public void setNumeroIdentificacion (String valorNumeroIdentificacion) {
        numeroIdentificacion= valorNumeroIdentificacion;
    }//Cierre del método

    //Obtener sus características
    //Nombre
    public String getNombre () { return nombre;}
    //Apellido
    public String getApellido () {return apellido;}
    //Edad
    public int getEdad () {return edad;}
    //Estado Civil
    public boolean getCasado () {return casado;}
    //Número de identificación
    public String getNumeroIdentificacion () {return numeroIdentificacion;}

}//Cierre de la clase

Por cierto, para copiar código, busca en el menú de edición el símbolo # y pega el texto entre el [code ] y el [/code ] que te aparecerán al pulsarlo.

Espero que te sirva. ¡Un saludo!

19
Hola maxplanck.

El programa funciona correctamente. Solo puedo decirte que has puesto un cero de más aquí, jeje:

Código: [Seleccionar]
System.out.print ("Intente adivinar el número secreto, teclee un número entre 1 y 1000:");
¡Saludos!

20
Aprender a programar desde cero / Re:Condicional switch 637
« en: 06 de Enero 2017, 16:33 »
Hola Jesu.

Parece que todo está correcto. ¡Saludos!

Páginas: [1] 2 3 4

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