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

22
Buah, yo cuando tuve que hacer este ejercicio también me hice un lío enorme. Luego, al ir avanzando, parece que las cosas van encontrando ellas solas su lugar en la mente y es más sencillo.

23
Gracias por la revisión, Ogramar. Sí, es verdad. Aquí está la solución del ejercicio usando StringBuffer:

Código: [Seleccionar]
package javaAvanzado;
public class HolaCaracola2 {
    public static void main (String [] args) {
        StringBuffer cadena = new StringBuffer("Hola Caracola");
        System.out.println (cadena);
        System.out.println ("Capacidad del StringBuffer: "+cadena.capacity()+". Longitud del StringBuffer: "+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 StringBuffer: "+cadena.capacity()+". Longitud del StringBuffer: "+cadena.length()+".");
    }
}

¡Un saludo!

24
¡Hola maxplanck!

El ejercicio funciona correctamente, pero hay algunas cosas que puedes cambiar para mejorarlo.

Has hecho una cosa que yo también hacía al principio: cada vez que quieres leer un mensaje de teclado, creas un objeto Scanner; esto no es necesario, basta con crear uno. Lo he puesto en la parte de arriba, donde se declaran los atributos de la clase, para que puedas usarlo en todos los métodos.

En segundo lugar, no necesitas escribir while (it.hasNext()==true) cuando usas un iterador porque it.hasNext() ya te devuelve un booleano. Es decir, bastaría con poner while (it.hasNext()). Para hacerlo más sencillo, he cambiado un poco el código del método preguntar() y he puesto que la condición sea while (ent.equalsIgnoreCase("S")) (así te ahorras la variable booleana si).

He borrado el null del iterador, porque no es necesario. También he eliminado la palabra static de los métodos.

ListaCantantesFamosos
Código: [Seleccionar]
import java.util.*;
public class ListaCantantesFamosos {
    private static ArrayList<CantanteFamoso> lista1;
    private Scanner tec;

    public ListaCantantesFamosos () {
        lista1 = new ArrayList<CantanteFamoso>();
        tec = new Scanner (System.in);

    }

    public void listaInicial ()  {
        CantanteFamoso cantorA = new CantanteFamoso ("Siniestro Total" , "¿Cuándo se come aquí?");
        lista1.add(cantorA);
        CantanteFamoso cantorb = new CantanteFamoso ("The Smiths" , "¿The Queen is dead?");
        lista1.add(cantorb);
    }
    //public static String getDisc1 (int poss2) {return (lista1.get(poss2)).getDisco();}
    public void listar() {
        CantanteFamoso cantorX;
        Iterator<CantanteFamoso> it = lista1.iterator();
        while (it.hasNext()) {
            cantorX = it.next();
            System.out.println ("Nombre del cantante/grupo: " + cantorX.getNombre() + ";    Nombre del disco: " + cantorX.getDisco());
        }
       
    }

    public void preguntar(){
        String ent = "S";
        while (ent.equalsIgnoreCase("S")){
            System.out.println ("¿Desea añadir otra entrada?: S/N");           
            ent = tec.nextLine();
            while (!ent.equalsIgnoreCase("N")&&!ent.equalsIgnoreCase("S")) {
                System.out.println ("Entrada no válida.");
                ent = tec.nextLine();
            }               
            if (ent.equalsIgnoreCase ("S")) {
                nuevo();
            }
            else if (ent.equalsIgnoreCase ("n")) {
                System.out.println ("Fin del programa, gracias por colaborar.");
                System.out.println ("La lista definitiva es:");
                listar();
            }
        }
    }

    public void nuevo () {
        CantanteFamoso cantorX;
        String ent1 = "";
        System.out.println ("Introduzca nuevo nombre de cantante/grupo.");       
        ent1 = tec.nextLine();
        String ent2 = "";
        System.out.println ("Introduzca nuevo nombre disco.");
        ent2 = tec.nextLine();           
        cantorX = new CantanteFamoso(ent1,ent2);
        lista1.add(cantorX);
        System.out.println ("La nueva lista  es:");
        listar();
    }
}

En la clase main, has hecho una cosa un poco rara, y creo que por eso te has visto obligado luego a poner static en los métodos de ListaCantantesFamosos. Has creado un objeto de tipo ListaCantantesFamosos al que has llamado listaT, pero luego, en vez de aplicar los métodos a este objeto, has escrito ListaCantantesFamosos.listar(), etc. Yo lo haría así:

TestLista
Código: [Seleccionar]
import java.util.*;
public class TestLista {

   public static void main (String[] args) {
       ListaCantantesFamosos listaT = new ListaCantantesFamosos ();
       listaT.listaInicial();
       System.out.println ("La lista actual contiene las siguientes entradas:");
       listaT.listar();
       listaT.preguntar();
       
    }
}

Espero que te sirva. ¡Un saludo!

25
Hola Jesu.

En primer lugar, me gustaría explicarte que hay una herramienta en el menú de edición de mensajes para escribir código. Cuando vayas a copiar un ejercicio, pulsa en el botón con el icono # y pega el texto entre el [code ] y el [/code ].

Quedaría así:

Clase Medico.
Código: [Seleccionar]
public class Medico
{
   
   private String nombre;
   private String apellido;
   private int edad;
   private boolean casado;
   private String id;
   private String especialidad;

       
      // Metodo constructor con valores por defecto
        public Medico()
        {
           nombre="";
           apellido="";
           edad=0;
           casado=false;
           id="desconocido";
           especialidad="desconocida";
           
        }

      public String getNombre() {
         return nombre;
      }

      public void setNombre(String nombre) {
         this.nombre = nombre;
      }

      public String getApellido() {
         return apellido;
      }

      public void setApellido(String apellido) {
         this.apellido = apellido;
      }

      public int getEdad() {
         return edad;
      }

      public void setEdad(int edad) {
         this.edad = edad;
      }

      public String isCasado() {
         
         if(casado){
         return "El médico está casado";
         }else{
            return "El médico no está casado";
         }
      }

      public void setCasado(String casado) {
         if(casado.equalsIgnoreCase("si")){
            this.casado=true;
         }else{
            this.casado=false;
         }
      }

      public String getId() {
         return id;
      }

      public void setId(String id) {
         this.id = id;
      }

      public String getEspecialidad() {
         return especialidad;
      }

      public void setEspecialidad(String especialidad) {
         this.especialidad = especialidad;
      }
      public void setFaltante(){
         int div,falta;
         div=edad%5;
         falta=5-div;
         System.out.print("El médico "+nombre+" tiene "+edad+" años. Para tener una edad multiplo de 5 le faltan "+falta+" años.");
      }
       
       
     
    }

Clase ejeMedico.
Código: [Seleccionar]
import java.util.Scanner;
public class ejeMedico {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
             Medico medico1=new Medico();
             Scanner lee=new Scanner(System.in);
             String nombre,apellido,id,especialidad;
             int edad;
             String casado;
             
             System.out.print("Introduce Nombres del médico: ");
             nombre=lee.nextLine();
             System.out.print("Introduce Apellidos del médico: ");
             apellido=lee.nextLine();
             System.out.print("Introduce su ID: ");
             id=lee.next();
             System.out.print("Introduce su especialidad: ");
             especialidad=lee.next();
             System.out.print("¿Es casado? ");
             casado=lee.next();
             System.out.print("Introduce EDAD: ");
             edad=lee.nextInt();
             
                  medico1.setNombre(nombre);
                  medico1.setApellido(apellido);
                  medico1.setId(id);
                  medico1.setEspecialidad(especialidad);
                  medico1.setCasado(casado);
                  medico1.setEdad(edad);                 
                  medico1.setFaltante();
   }

}

Usando esta herramienta, el mensaje resulta más claro.

El ejercicio funciona correctamente. No obstante, en la clase Medico te recomendaría cambiar el nombre del método setFaltante() por otro (por ejemplo, calcularCuantoFalta()). Lo digo porque con setFaltante() no estás adjudicando un valor a un atributo de la clase, como sí sucede con los otros métodos de tipo set. También cambiaría el nombre del método isCasado() por el de getCasado() para mantener un estilo uniforme. Para comprobar que tus métodos set y get funcionan correctamente podrías incluir un método que imprima por pantalla los datos del médico. Podría ser algo así:

Código: [Seleccionar]
public void mostrarDatosPorPantalla() {
          System.out.println ("Datos del médico. Nombre: "+nombre+" "+apellido+". ID: "+id+". Especialidad: "+especialidad+". Estado civil: "+this.getCasado()+".");         
    }

Por otro lado, en el main no es necesario que crees tantas variables. Basta con declarar un String respuesta y un int edad e ir cambiando el valor de respuesta del siguiente modo:

Código: [Seleccionar]
import java.util.Scanner;
public class ejeMedico {

   public static void main(String[] args) {
      // TODO Auto-generated method stub
             Medico medico1=new Medico();
             Scanner lee=new Scanner(System.in);
             String respuesta;
             int edad;
                         
             System.out.print("Introduce Nombres del médico: ");
             respuesta=lee.nextLine(); medico1.setNombre(respuesta);
             System.out.print("Introduce Apellidos del médico: ");
             respuesta=lee.nextLine(); medico1.setApellido(respuesta);
             System.out.print("Introduce su ID: ");
             respuesta=lee.nextLine(); medico1.setId(respuesta);
             System.out.print("Introduce su especialidad: ");
             respuesta=lee.nextLine(); medico1.setEspecialidad(respuesta);
             System.out.print("¿Es casado? ");
             respuesta=lee.nextLine(); medico1.setCasado(respuesta);
             System.out.print("Introduce EDAD: ");
             edad=lee.nextInt(); medico1.setEdad(edad);
                             
             medico1.mostrarDatosPorPantalla(); //Este es el metodo que te he propuesto arriba.
             medico1.calcularCuantoFalta();             
   }

}

Espero que te sirva. ¡Saludos!

26
Agradezco tu comentario, ESOJ. Me parecen buenas simplificaciones.

¡Un saludo!

27
Aprender a programar desde cero / Re:Error con el comando "javac"
« en: 30 de Diciembre 2016, 19:45 »
Genial : )

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

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

30
Buenas maxplanck.

Creo que el warning te sale por esta línea:

Código: [Seleccionar]
ArrayList<String> lista3 = new ArrayList();
Me ha pasado algunas veces y siempre es porque en un Iterador, en un List o en un ArrayList me he dejado la parte de <E>. Escribe en tu código new ArrayList<String>();.

¡Saludos y Feliz Navidad!

31
Aprender a programar desde cero / Re:Error con el comando "javac"
« en: 28 de Diciembre 2016, 12:51 »

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

33
Gracias por lo del sort (). Modificaré el código para probar a hacerlo usando ese método. Parece muy útil.

Sí, sé que solo he implementado el método compareTo() para resolver la parte de las alturas. No sabía cómo comparar dos cosas distintas con un solo método hasta que vi tu resolución del ejercicio.

Muchas gracias por responder.

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

35
ESOJ, me gusta como has resuelto el compareTo() de la clase Persona. A mí no se me ocurría una forma de meter ambas comparaciones en el mismo método y tuve que crear dos distintos.

Hay algo que no comprendo. Veo que en la clase principal creas dos listas con el for. ¿Cómo puede saber el programa cuál de las dos tiene que ordenar por altura y cuál por edad? Sé que has introducido una variable condicionDeComparacion, pero la usas solo en el compareTo(). ¿El método compareTo() está relacionado de alguna forma con el sort() y por eso no necesitas invocar al primero en la clase principal?

Lealivan009, al principio intenté usar, como tú, los ArrayList para resolver el ejercicio, pero no encontraba la forma de decirle al programa dónde situar a cada elemento dentro de la lista, así que al final lo he hecho con arrays estáticos. Te dejo mi solución, pero no estoy satisfecho porque, aunque con los datos del ejemplo funciona bien, si una persona tiene la misma altura o peso que otra el programa falla:

Código: [Seleccionar]
package javaAvanzado;
public class Persona3 implements Comparable <Persona3> {
    //Atributos.
    private int altura;
    private int peso;
    private String nombre;
    //Constructor.
    public Persona3 (String nombre, int altura, int peso) {
        this.nombre=nombre;
        this.altura=altura;
        this.peso=peso;
    }
   
    public int compareTo (Persona3 persona) {
        int resultadoAltura;
        if (this.altura>persona.altura) { resultadoAltura = 1; }
        else if (this.altura<persona.altura) { resultadoAltura = -1; }
        else { resultadoAltura = 0; }       
        return resultadoAltura;
    }

    public int compareToPeso (Persona3 persona) {
        int resultadoPeso;
        if (this.peso>persona.peso) { resultadoPeso = 1; }
        else if (this.peso<persona.peso) { resultadoPeso = -1; }
        else {resultadoPeso=0;}
        return resultadoPeso;
    }
   
    public String toString() {
        String resultado;
        resultado = "Nombre: "+nombre+". Altura: "+altura+". Peso: "+peso+".";
        return resultado;
    }
}

Código: [Seleccionar]
package javaAvanzado;
public class MainPersona3 {
    public static void main (String [] args) {
        Persona3 [] listaSinOrdenar = new Persona3 [6];
        Persona3 [] listaAltura = new Persona3 [6];
        Persona3 [] listaPeso = new Persona3 [6];
        listaSinOrdenar[0] = new Persona3 ("Mario", 187, 89);
        listaSinOrdenar[1] = new Persona3 ("Pepe", 173, 60);
        listaSinOrdenar[2] = new Persona3 ("Manuel", 158, 70);
        listaSinOrdenar[3] = new Persona3 ("David", 164, 79);
        listaSinOrdenar[4] = new Persona3 ("Alberto", 184, 55);
        listaSinOrdenar[5] = new Persona3 ("Luis", 174, 56);
       
        System.out.println ("1. Lista sin ordenar.");
        for (int i = 0; i <listaSinOrdenar.length; i++) {           
            System.out.println (listaSinOrdenar[i].toString());
        }
       
        int posicion=5;
        for (int j = 0; j <listaSinOrdenar.length; j++) {
            for (int i = 0; i<listaSinOrdenar.length; i++) {
                if (listaSinOrdenar[j].compareTo(listaSinOrdenar[i])>0) {posicion=posicion-1;}
            }           
            listaAltura[posicion]=listaSinOrdenar[j];
            posicion=5;}       
       
        for (int j = 0; j <listaSinOrdenar.length; j++) {
            for (int i = 0; i<listaSinOrdenar.length; i++) {
                if (listaSinOrdenar[j].compareToPeso(listaSinOrdenar[i])>0) {posicion=posicion-1;}
            }           
            listaPeso[posicion]=listaSinOrdenar[j];
            posicion=5;}
           
        System.out.println ("2. Lista ordenada por altura.");
        for (int i = 0; i <listaAltura.length; i++) {
            System.out.println (listaAltura[i].toString());
        }
       
        System.out.println ("3. Lista ordenada por peso.");
        for (int i = 0; i <listaPeso.length; i++) {
            System.out.println (listaPeso[i].toString());
        }
    }
}

36
Confusión solucionada. He revisado la entrega en la que se explicaban ambos conceptos y ya me he dado cuenta de que también se diferencian en que los arrays pueden almacenar ambos tipos de datos, pero los ArrayList solo objetos.

37
Me ha resultado muy útil consultar tu ejercicio. Pensaba que los arrays se usaban para almacenar tipos primitivos y los ArrayList para almacenar objetos. ¿Entonces la única diferencia entre unos y otros es que los primeros tienen un número fijo de espacios disponibles mientras que los segundos se amplían según se introducen nuevos elementos?
¡Un saludo!

38
Lo veo todo bien. Podrías ahorrar un poco de código en la parte de los intentos si en el último else if (...) usas simplemente else:

Código: [Seleccionar]
import java.util.Scanner;
import java.util.Random;
/**
 * Testea el funcionamiento de Adivinar
 *
 * @author Chompy129
 * @version 1.0
 */
public class Adivinar{
    public static void main(String [] args){
        Random aleatorio= new Random();
        int numeroMaquina= aleatorio.nextInt(100);
        Scanner entradaS= new Scanner(System.in);
        int numeroUsuario= 0;
        int intentos= 0;
       
        System.out.println("Inicia el juego. Tienes 10 intentos.");
        System.out.print("Elige un número: ");
        while(numeroUsuario != numeroMaquina && intentos < 10){
            numeroUsuario= Integer.parseInt(entradaS.nextLine());           
            intentos++;

            if(intentos == 10){
System.out.println("Ha superado el número de intentos.");
}   
            else if(numeroUsuario == numeroMaquina){
                System.out.println("¡Has acertado!");
            }
            else if(numeroUsuario > numeroMaquina){
                System.out.print("El número es muy alto. Intente con uno mas bajo: ");
            }
            else {
                System.out.print("El número es muy bajo. Intente con uno mas alto: ");
            }           
        }
System.out.println("Gracias por jugar");
    }
}

¡Saludos!

39
Hola Chompy129.
Parece que está todo bien. ¡Saludos!

40
Claro, ayudaré a responder a los temas en los que me sienta más o menos seguro de lo que estoy diciendo, jeje. ¡Feliz Navidad!

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