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

Páginas: [1] 2 3 4 5 6 ... 13
1
Exacto.
Lo mejor es un buen diseño desde el principio y aun con todo  y con eso se cometen muchos errores.
De hay que los equipos de programadores tengan que estar actualizando los sistemas operativos cada dos por tres.

Unas veces porque se queda obsoleto el software y otras por los errores que se detectan.
De todas la maneras no somos maquinas y tenemos todo el derecho del mundo a equivocarnos ya que nos hicieron para eso.
Lo mejor es un buen diseño y ceñirse a el lo mas apretadito posible.
Un Saludo. ;)

2
Hola settezza.

Ejercicio bien resuelto.

Mismo problema que en los anteriores.
Debemos colgar en el foro todo el código de los ejercicios, en este también faltan los import.

Un saludo. ;)

3
Hola settezza.
El ejercicio esta bien resuelto pero como en el ejercicio CU000905C te falta poner los import.

Un saludo. ;)

4
Hola settezza. Te falta poner en el código que envías el import.

Citar
import java.util.Scanner;

Por lo demás veo que el código hace lo que se pide en el ejercicio.
El array lo tendrías que haber nombrado de otra manera ya que el nombre solo hace mención a las Ciudades cuando el array contiene los países y las ciudades.
Yo creo que debería haber sido algo como paisesCiudades o paisesYCiudades.

Todo correcto. Un saludo. ;)

5
Hola Ogramar .

No me fije a la hora de crear la variable y se me fue el santo al cielo.
En un programa con un montón de fallos  a la hora de observar este "error" no se debería de corregir, se debería de dejar como esta ya que no sabemos si esa variable se utiliza en algún sitio mas y podríamos liar un caos en el código.

Por eso es importantisimo fijarnos a la hora de nombrar las variables.

Gracias.
Un saludo.  ;)

6
Hola dejo el ejercicio CU00920C Interface List api java Clases ArrayList LinkedList Stack Vector.pdf) del tutorial de programación avanzada Java de aprenderaprogramar.com

Citar
EJERCICIO

Crea una clase denominada Cuadrupedo con los atributos idCuadrupedo (int) y tipo (String), donde tipo podrá tomar los valores León, Gato, Perro o Elefante.
Crea una clase con el método main donde se introduzcan 10000 cuadrúpedos en una lista de tipo estático List y tipo dinámico ArrayList. El atributo tipo debe establecerse para cada objeto de forma aleatoria. A continuación, el programa debe mostrar por consola los datos de los objetos con idCuadrupedo múltiplo de 1000 y mostrar un resumen de cuántos cuadrúpedos hay de cada tipo.

Ejemplo de ejecución:
Cuadrúpedo-> ID: 1000 Tipo: Leon
Cuadrúpedo-> ID: 2000 Tipo: Elefante
Cuadrúpedo-> ID: 3000 Tipo: Gato
Cuadrúpedo-> ID: 4000 Tipo: Gato
Cuadrúpedo-> ID: 5000 Tipo: Perro
Cuadrúpedo-> ID: 6000 Tipo: Perro
Cuadrúpedo-> ID: 7000 Tipo: Gato
Cuadrúpedo-> ID: 8000 Tipo: Gato
Cuadrúpedo-> ID: 9000 Tipo: Perro
Cuadrúpedo-> ID: 10000 Tipo: Leon
 Resumen: hay 2470 Leones, 2511 Gatos, 2575 Perros y 2444 Elefantes


Clase Cuadrupedo

Código: [Seleccionar]
public class Cuadrupedo{
    private int idCuadrupedo;
    private String tipo;
   
    public Cuadrupedo(int idCuadrupedo, String tipo) {
        this.idCuadrupedo = idCuadrupedo;
        this.tipo = tipo;
        }
 
    public int getIdCuadrupedo() { return idCuadrupedo; } //Omitimos otros métodos get y set para simplificar
    public String getTipo() { return tipo; }
   
    public void setIdCuadrupedo(int idCuadrupedo){
        this.idCuadrupedo=idCuadrupedo;
            }
    public void setTipo(String tipo){
    this.tipo=tipo;
    }   
   
    @Override
    public String toString() {
        return "ID -> Cuadrupedo: "+idCuadrupedo+" Nombre: "+tipo+"\n";
   }
}


Clase TestCuadrupedos

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

public class TestCuadrupedos {
    public static void main(String arg[]) {
        List<Cuadrupedo> lstCua= new ArrayList<Cuadrupedo>(); // El tipo es List y lo implementamos con ArrayList
        String[] tipoCua={"Leon","Gato","Perro","Elefante"};
        Random rnd = new Random();

        for(int i=1;i<=10000;i++)
        {
            lstCua.add(new Cuadrupedo(i,tipoCua[rnd.nextInt(4)]));
        }

        Iterator<Cuadrupedo> it = lstCua.iterator();
        int leones=0, gatos=0, perros=0, elefantes=0;
        String tipoCuadrupedo;
        Cuadrupedo temp = null;

        while(it.hasNext())
        {
            temp = it.next();
            tipoCuadrupedo=temp.getTipo();
            if(temp.getIdCuadrupedo()%1000==0){
                System.out.print(temp);
            }
            switch (tipoCuadrupedo) {
                case "Leon":
                leones++;
                break;
                case "Gato":
                gatos++;
                break;
                case "Perro":
                perros++;
                break;
                default:
                elefantes++;
                break;
            }
        }
 System.out.println("\nTotal Cuadrupedos por tipos\n "+
                    leones+" Leones\n "+
                    gatos+" Gatos\n "+
                    perros+" Perros\n "+
                    elefantes+" Elefantes\n===============");
  System.out.print((leones+gatos+perros+elefantes)+" <= Total Cuadrupedos");
    }
}


Adios. Un saludo ;)

7
Hola lcanciani. Es un poco lioso de entender al principio pero una vez  se coge el "tranquillo" es facil de entender.

int i,j; Creamos dos variable para los bucles for
       
 for(i = 0; i < matriz.length; i++) el for i se ejecutara mientras se menor que la longitud de la matriz
        {
            for(j = 0; j < i; j++) El for j se ejecuta mientras sea menor que i

Ahora viene la mama del corderito.

          Si (matriz.compareToPersona(matriz[j],comparePor)>0 ( si es 1) entra en el bucle
                    if(matriz.compareToPersona(matriz[j],comparePor)>0){
         

                    buffer[0] = matriz[j]; Se copia el valor de matriz[j] en buffer[0]
                    matriz[j] = matriz[ i ]; Se copia el valor de matriz[ i ] en matriz[j]
                    matriz[ i ] = buffer[0];Se copia el valor de buffer[0] an matriz[ i ] y se hace el intercambio
                     del mayor con el menor
                }
            }
        }
 Te dejo el mismo código modificado para que veas el funcionamiento del intercambio.
Si cambias el operador > en el if  "if(matriz.compareToPersona(matriz[j],comparePor)>0) por < se aprecia mejor el intercambio.

Código: [Seleccionar]
import java.util.*;
import java.util.Scanner;
/**
 * Write a description of class TestCompareTo here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class TestCompareTo2
{

    public static void main(String arg[]) {   
        Persona2[] persona=new Persona2[5];
        //Variable para utilizar en el metodo de burja y en el comparador
        //Seleccionamos la ordenacion por Edad o Altura
        String comparePor;

        persona[0] = new Persona2("Mario",187,22);
        persona[1] = new Persona2("Pepe",176,52); 
        persona[2] = new Persona2("Manuel",158,27); 
        persona[3] = new Persona2("David",164,25); 
        persona[4] = new Persona2("Alberto",184,80); 
        System.out.println(" Array desordenado");
        for(int i=0;i < persona.length;i++){
            System.out.println(persona[ i ]);
        }
        comparePor="Altura";//Ordenar y comparar por altura
        burbuja(persona,comparePor);
        System.out.print ("\n\nArray Ordenado por altura de mas altura a menos altura\n");
        for(int i=0;i < persona.length;i++){
            System.out.println(persona[i]);
        }
       

    }// Fin del main
    //*****************************************************
    //Metodo de ordenacion por burbuja 
    public static void burbuja(Persona2[]matriz,String comparePor){
        Persona2[] buffer=new Persona2[5];
         String entradaTeclado;
        int i,j;
        System.out.println("Intercambio por altura");
         Scanner entradaEscaner = new Scanner (System.in);
        for(i = 0; i < matriz.length; i++)
        {
            for(j = 0; j < i; j++)
            {
                 System.out.println("Antes de intercambio "+matriz[i].getAltura()+
                 " matriz j["+j+"]= "+matriz[j].getAltura());
               
                 //entradaTeclado = entradaEscaner.nextLine ();
                if(matriz[i].compareToPersona(matriz[j],comparePor)<0){
                    buffer[0] = matriz[j];
                    matriz[j] = matriz[i];
                    matriz[i] = buffer[0];
                   
                }
                System.out.print("Intercambio "+matriz[i].getNombre()+"  "+ matriz[i].getAltura()+"\n"+
                                 "Por         "+matriz[j].getNombre()+"  "+ matriz[j].getAltura()+"\n");
                 
                for(int z=0; z<matriz.length;z++){System.out.println(matriz[z]);}
            }
            entradaTeclado = entradaEscaner.nextLine ();
        }
    }//Fin metodo Burbuja

}//Fin de la Clase




Código: [Seleccionar]

public class Persona2 implements Comparable<Persona2>{
    public String nombre;
    public int edad, altura;

    //Constructor
    public Persona2( String nom,int al, int ed){
        this.nombre=nom;
        this.altura = al;
        this.edad = ed;
    }

    //Metodos set
    public String getNombre(){ return nombre;}

    public int getAltura(){ return altura;}

    public int getEdad(){ return edad;}
    //Metodos get
    public void setNombre(){ this.nombre=nombre;}

    public void  setAltura(){ this.altura=altura;}

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

    public String toString(){
        String msg="";
        msg="Nombre:\t"+nombre+"\tAltura:\t "+altura+"\tedad:  "+edad;
        return msg;
    }

    @Override //Anulamos el error y creamos otro compareTo
    // Asi evitamos crear un metodo para cada comparacion
    public int compareTo(Persona2 o ) {

        int resultado=0;
        if (this.edad<o.edad) {  resultado = 1;    }// Cambio el valor de resultado para no crear otro metodo de ordenacion
        else if (this.edad>o.edad) {   resultado = -1;   }
        else {   resultado = 0;   }
        return resultado;
    }
    //Comparar por edad y altura
    //Se le pasa la variable cadena para ejecutar la comparacion por edad o por altura
    public int compareToPersona(Persona2 o,String cadena ) {
        int resultado=0;
        if (cadena.equals("Edad")){
            if (this.edad<o.edad) {  resultado = 1;    }// Cambio el valor de resultado para no crear otro metodo de ordenacion
            else if (this.edad>o.edad) {   resultado = -1;   }
            else {   resultado = 0;   }
        }
        if (cadena.equals("Altura")){
            if (this.altura<o.altura) {   resultado = -1;      }
            else if (this.altura>o.altura) {    resultado = 1;      }
            else {   resultado = 0;   }
        }
        if (cadena.equals("Nombre")){

        }
        return resultado;
    }
}


Espero que la respuesta te aclare las dudas.
Un saludo  ;)

8
Hola lcanciani.

El primer problema que tienes son los paréntesis al crear el numero aleatorio tu lo tienes asi:
Citar
   if(npensando==(x=(int)rnd.nextDouble()*nfinal+ninicial))
Te faltan los parentesis para crear el numero entero de toda la sentencia (rnd.nextDouble()*n+n).
  if(npensando==(x= (int) ( (rnd.nextDouble()*nfinal+ninicial) ) ))
De la forma que tu lo tienes se evalúa según la prioridad de los operadores y por eso siempre sale el mismo numero.
Poniendo los paréntesis se convierte a entero después  de hacer los cálculos de multiplicación y suma.  Lo puedes comprobar poniendo este bucle for después de introducir la horquilla de números ninicial, nfinal y nintentos.
Código: [Seleccionar]
for(int i=1; i<=10;i++){
           System.out.print("Sin parentesis "+(int)rnd.nextDouble()*nfinal+ninicial+"   ");
           System.out.print("Con parentesis "+(int)(rnd.nextDouble()*nfinal+ninicial)+"\n");
        }

Me remito a el tema : https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=240:generacion-de-numeros-aleatorios-en-java-rangos-clase-random-ejemplos-ejercicios-resueltos-cu00906c&catid=58&Itemid=180

En el apartado nº 3.
3. Llamar a una de las funciones miembro que generan un número aleatorio:
Debajo del código de ejemplo se comenta esto:
Citar
En el caso de necesitar números aleatorios enteros en un rango determinado, podemos trasladarnos a un intervalo distinto, simplemente multiplicando, aplicando la siguiente fórmula general:

(int) (rnd.nextDouble() * cantidad_números_rango + término_inicial_rango)
.
Si te fijas la sentencia rnd va envuelta entre parentesis.

Citar
Otro problema es cual seria la forma correcta de hacer que al ingresar por teclado un caracter se convierta a mayusculas.

Para la segunda duda la solucion podria se esta:
System.out.println("Quieres probar otra vez? (S/N)");
     c=Character.toUpperCase (en.next().charAt(0));
     

Espero que te sirva.
Un saludo. ;)

P.D.
Tenemos que intentar a la hora de poner en los foros las soluciones de los ejercicios nombrar en el Asunto : de que ejercicio se trata.
Poner algo como esto :
Citar
Java Avanzado Ejercicio CU00919C Interface Iterator api java hasNext remove
Así cuando los miramos sabemos a que ejercicio en concreto se refiere  :D

9
Hola dejo el ejercicio de java Avanzado CU00919C Interface Iterator api java hasNext remove 

Clase Animal
Código: [Seleccionar]
/**
 * Write a description of class a here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class Animal
{
    // instance variables - replace the example below with your own
     private String especie;
     private String nombre;
     private double peso;
     private int patas;
    //Constructores
   
   
    public Animal(String especie, String nombre,double peso, int patas)
    {
    this.especie=especie;
    this.nombre=nombre;
    this.peso=peso;
    this.patas=patas;
    }
   
    //metodos get y set
    public String getEspecie(){return especie;}
    public String getNombre(){return nombre;}
    public double getPeso(){return peso;}
    public int getPatas(){return patas;}
    @Override
    public String toString(){
     return "Animal ==>: especie "+especie+" Nombre: "+nombre+" Peso: "+peso+" Patas: "+patas+"\n";
    }
}//Fin de la clase

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

public class ListaDeAnimales {
    public ArrayList<Animal> listaAnimales = null;  // Campo de la clase
    public ListaDeAnimales() {listaAnimales= new ArrayList<Animal>();}  // Constructor de la clase
    public ArrayList<Animal> getListaDeAnimales(){return listaAnimales;} //Omitimos otros métodos
    public Iterator<Animal> iterator() {return new MiIteradorListaAnimales();} // Método de la clase

    @Override
    public String toString() {return listaAnimales.toString();}  // Método de la clase

    protected class MiIteradorListaAnimales implements Iterator<Animal>  // Clase interna
    {
        public int posicion = 0;    public boolean sepuedeeliminar = false;  // Campos
       
        @Override
        public boolean hasNext() {return posicion < listaAnimales.size();}  // Método
       
        @Override
        public Animal next() {  // Método
           Animal res = listaAnimales.get(posicion); // Creamos un objeto Animal igual al que recorremos
            posicion ++;
            sepuedeeliminar = true;
            return res;}
       
        @Override
        public void remove() {
            if (sepuedeeliminar) {
                listaAnimales.remove(posicion-1);
                posicion--;
                sepuedeeliminar = false; }
        } // Cierre del método remove
    } // Cierre de la clase interna
}  // Cierre de la clase

Clase Programa
Código: [Seleccionar]
import java.util.Iterator;
import java.util.Scanner;
public class Programa {
   
    public static void main(String arg[]) {
        ListaDeAnimales la = new ListaDeAnimales();
        iniciarLista(la);
        presentarLista(la);
        numeroAnimalEliminar(la);
       }

    public static void iniciarLista(ListaDeAnimales la){
        la.getListaDeAnimales().add(new Animal("Pantera         ","Penelope",98.55,4));
        la.getListaDeAnimales().add(new Animal("Loro Amazonico  ","Juanito ",3.67,2));
        la.getListaDeAnimales().add(new Animal("Perro Gran Danes","Artur   ",38.77,4));
        la.getListaDeAnimales().add(new Animal("Mono de Tanzania","Monk    ",55.32,4));
    }

    public static void presentarLista(ListaDeAnimales la){
        Iterator<Animal> it;
        Animal e; // Este objeto lo usaremos para almacenar temporalmente objetos Animal
         System.out.println("Los animales en la lista son: " );
        System.out.print("Numero Especie            Nombre  \tPeso  Patas\n");
        it = la.iterator();
        int i=1;
        while (it.hasNext() ) {
            e = it.next();
            System.out.print( "  " +(i++)+"\t"+
                            e.getEspecie()+"  "+
                            e.getNombre()+"\t"+
                            e.getPeso()+"\t"+
                            e.getPatas()+"\n");

        }
    }
    public static void numeroAnimalEliminar(ListaDeAnimales la){
    Scanner x = new Scanner (System.in);    //Creación de un objeto Scanner
        String scTeclado;
        //Convertir cadena a numero entero
        int numEliminar=0;
        while(numEliminar<1 || numEliminar>4){
            System.out.print("Introduzca el numero de Animal a eliminar: ");
            scTeclado = x.nextLine ();
            numEliminar= Integer.parseInt(scTeclado);
            if(numEliminar<1 || numEliminar>4)
            {
                System.out.print(scTeclado+" Numero Erroneo ¡¡¡¡\n");
            }
            else{
               int i=1;
                Iterator<Animal> it2;
                 
                it2=la.iterator();
                while (it2.hasNext() ) {
                    Animal tmp=it2.next();
                    if (i==numEliminar) {
                         System.out.print( "\nAnimal a eliminar, Especie: "+
                            tmp.getEspecie()+", Nombre:  "+
                            tmp.getNombre()+", Peso: "+
                           tmp.getPeso()+", Nº Patas: "+
                            tmp.getPatas()+"\n\n");
                        it2.remove();
                    }
                    i++;
                }
            }   
        }
         presentarLista(la);
    }
}

Adios. ;)

10
Hola dejo el ejercicio CU00918C del tutorial pdf de Java avanzado: Interface Comparator (API java). Diferencias con Comparable. Clase Collections. Código ejemplo.

Codigo de la clase TestEjecicio metodo main()
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Collections;
public class TestEjecicio {
    public static void main(String arg[]) {
        ArrayList<Estudiante> listaEstudiante = new ArrayList<Estudiante>();
        listaEstudiante.add(new Estudiante("Carlos",19,3));
        listaEstudiante.add(new Estudiante("Felipe",18,4));
        listaEstudiante.add(new Estudiante("Ana",18,4));
        listaEstudiante.add(new Estudiante("Rosa",15,1));
        listaEstudiante.add(new Estudiante("Jose",10,2));

        System.out.print("---------------------------------------\n");
        System.out.println("Lista de estudiantes sin ordenar\n---------------------------------------");
        PresentarListas(listaEstudiante);//Se presenta la lista sin ordenar
        System.out.print("---------------------------------------\n");
        System.out.println("Personas Ordenadas por orden natural\n---------------------------------------");
        Collections.sort(listaEstudiante);  // Ordenar por orden natural (alfabetico) por nombre
        PresentarListas(listaEstudiante);   // Presentar la lista 
        System.out.print("---------------------------------------\n ");
        System.out.println("Personas Ordenadas por Edad\n---------------------------------------");
        Collections.sort(listaEstudiante, new CompararEstudiantePorEdad());// Ordenar por edad
        PresentarListas(listaEstudiante);//Presentar la lista
        System.out.print("---------------------------------------\n ");
        System.out.println("Personas Ordenadas por Curso\n---------------------------------------");
        Collections.sort(listaEstudiante, new CompararEstudiantePorCurso());// Ordenar por curso
        PresentarListas(listaEstudiante);//Presentar la lista 
        System.out.println("\n---------------------------------------");
    }
    //Metodo para presentar las listas de estudiantes ordenadas
    public static void PresentarListas(ArrayList<Estudiante> listaEstudiante){
        System.out.print("Presentar la lista listaEstudiante\n");
        System.out.print(listaEstudiante.toString()+"\n");
        System.out.print("Presentar la Clase Estudiante con los metodos get\n");
        System.out.println("\tNombre\tEdad\tCurso\t");
        for(Estudiante tmp:listaEstudiante){
            System.out.print("\t"+tmp.getNombre()+"\t"+tmp.getEdad()+"\t"+tmp.getCurso()+"\n");
        }

       
    }
}

Clase Estudiantes
Código: [Seleccionar]
public class Estudiante implements Comparable<Estudiante> {
    private String nombre;
    private int edad;
    private int curso;

    public Estudiante(){
        nombre="";
        edad=0;
        curso=0;
    }   

    public Estudiante ( String nombre, int edad, int curso) {

        this.nombre = nombre;
        this.edad = edad;
        this.curso = curso;
    }

    @Override
    public String toString() {
        return "Estudiante =>: "+nombre+" Edad: "+edad+" Curso: "+curso+"\n";}

    @Override
    public int compareTo(Estudiante o) {
        return this.nombre.compareTo(o.nombre);
    }

    public String getNombre() {return nombre;}

    public int getEdad() {return edad;}

    public int getCurso() {return curso;}

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

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

    public void setCurso() {this.curso=curso;}
}


Clases CompararEstudiantePorCurso y CompararEstudiantePorEdad
Código: [Seleccionar]
import java.util.Comparator;

public class CompararEstudiantePorCurso implements Comparator<Estudiante> {
    @Override
    public int compare(Estudiante o1, Estudiante o2) {
    return o1.getCurso() - o2.getCurso(); // Devuelve un entero positivo si la altura de o1 es mayor que la de o2
    }
}
Código: [Seleccionar]
import java.util.Comparator;

public class CompararEstudiantePorEdad implements Comparator<Estudiante> {
    @Override
    public int compare(Estudiante o1, Estudiante o2) {
    return o1.getEdad() - o2.getEdad(); // Devuelve un entero positivo si la altura de o1 es mayor que la de o2
    }
}
Adios  ;)

11
Hola dejo el ejercicio CU00915C del curso avanzado de programación Java de aprenderaprogramar. Interface Iterable y método Iterator (API Java). Recorrer colecciones. Ejercicio y ejemplo resuelto

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]
public class AvesEnZoo  { 
    public String tipoDeAve;
    public int numeroAves, numeroMachos, numeroHembras;
    public AvesEnZoo(String tAve,int nAves, int nMachos, int nHembras)
    {
        this.tipoDeAve= tAve; 
        this.numeroAves =nAves ;
        this.numeroMachos=nMachos;
        this.numeroHembras=nHembras;
    }

}

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

/* Ejemplo interface Iterable aprenderaprogramar.com */

public class  GruposDeAvesZoo implements Iterable<AvesEnZoo>{

    public AvesEnZoo[] gruposDeAvesZoo; // Atributo de la clase

    public GruposDeAvesZoo (AvesEnZoo [] aves) {
        // Constructor de la clase
        gruposDeAvesZoo = aves; 
    }

    public Iterator<AvesEnZoo> iterator() {
        Iterator it = new MiIteratorAves();
        return it;         
    }


    protected class MiIteratorAves implements Iterator<AvesEnZoo>   {
        protected int posicionarray;
        public MiIteratorAves()   {
            posicionarray = 0;
        }
        public boolean hasNext() {
            boolean result;
            if (posicionarray < gruposDeAvesZoo.length) { result = true; }
            else { result = false; }
            return result;
        }
        public AvesEnZoo next() {
           posicionarray++;
            return gruposDeAvesZoo[posicionarray-1];
        }

        public void remove(){
            throw new UnsupportedOperationException("No soportado.");
        }

    }

}

Modulo de la clase TestIterator
Código: [Seleccionar]
import java.util.Iterator;
public class TestsIterator {
    public static void main(String arg[]) {
        AvesEnZoo ave1 = new AvesEnZoo("Avestruz",15,5,10);
        AvesEnZoo ave2 = new AvesEnZoo("Aguila  ",5,3,2);
        AvesEnZoo ave3 = new AvesEnZoo("Pato    ",55,35,20);
        AvesEnZoo ave4=  new AvesEnZoo("Alcon   ",10,3,7);
        AvesEnZoo[] aves = {ave1,ave2,ave3,ave4};
        GruposDeAvesZoo grupoAves = new GruposDeAvesZoo(aves);
         
        System.out.println("|TIPO     |TOTAL|MACHOS|HEMBRAS|");
        System.out.println("|---------|-----|------|-------|");
        for (AvesEnZoo ab : grupoAves) // Esto es un for extendido o for-each
        {
             
            System.out.printf("|%s |%5d|%6d|%7d|\n",ab.tipoDeAve,ab.numeroAves,ab.numeroMachos,ab.numeroHembras);
            System.out.println("|---------|-----|------|-------|");
        }
         
      }
}
Gracias. ;)

12
Hola de nuevo Angel1232.

Al principio del código creas una variable que no se utiliza para nada int aux, arrelo[] , elem, elem1;.

Este es el codigo de como lo haría yo:

Código: [Seleccionar]

import java.util.Scanner;
import javax.swing.JOptionPane;

public class JavaApplication14 {

    public static void main(String[] args) {
        Scanner lec=new Scanner(System.in);

        int aux,arreglo[],elem,elem1;

        elem = Integer.parseInt(JOptionPane.showInputDialog("Entre el numero de elementos para el primer array: "));
        arreglo = new int [elem];

        for(int i=0;i<elem;i++){
            System.out.println(".-Valor del elemento"+(i+1)+"del primer array");
            arreglo[i]=lec.nextInt();

        }

        for(int i=0;i<(elem-1);i++){
            for(int j=0;j<(elem-1);j++){
                if(arreglo[j]>arreglo[j+1]){
                    aux = arreglo[j];
                    arreglo[j]=arreglo[j+1];
                    arreglo[j+1] =aux;

                }

            }

        }
        elem1 = Integer.parseInt(JOptionPane.showInputDialog("Entre el numero de elementos para el segundo array: "));
        int[] arreg = new int [elem1];

        for(int i=0;i<elem1;i++){
            System.out.println((i+1)+".-Valor del elemento"+(i+1)+"del segundo array");
            arreg[i]=lec.nextInt();

        }

        for(int i=0;i<(elem1-1);i++){
            for(int j=0;j<(elem1-1);j++){
                if(arreg[j]>arreg[j+1]){
                    aux = arreg[j];
                    arreg[j]=arreg[j+1];
                    arreg[j+1] =aux;

                }
            }
        } 
/*Después de ordenar los dos arrays creo un nuevo array para introducir en él
los elementos de los dos arrays ordenados y vuelvo a ordenar este array para tener los tres arrays ordenados*/
        int ordenados[]= new int [elem+elem1];
        int z=0;
        System.out.print("numeros ordenados primer array\n");
        for(int i=0;i<arreglo.length;i++){
            ordenados[z]=arreglo[i];
            z++;
//presento en pantalla el primer array ordenado
             System.out.print(arreglo[i]+", ");
         
        }
        System.out.print("\nnumeros ordenados segundo array \n");
        for(int i=0;i<arreg.length;i++){
            ordenados[z]=arreg[i];
            z++;
//presento en pantalla el segundo array ordenado
             System.out.print(arreg[i]+", ");
        }
       
       
          for(int i=0;i<ordenados.length-1;i++){
            for(int j=0;j<ordenados.length-1;j++){
                if(ordenados[j]>ordenados[j+1]){
                    aux = ordenados[j];
                    ordenados[j]=ordenados[j+1];
                    ordenados[j+1] =aux;

                }
            }
        } 
            System.out.print("\nnumeros de los dos arrays ordenados\n");
         
         for(int i=0;i<ordenados.length;i++){
//Presento en pantalla el tercer array ordenado
              System.out.print(ordenados[i]+", ");
         
            }
       
    }         
}

13
Hola Angel1232. Por lo que veo yo en el codigo que has instanciado en los showInputDialog lo que pides es el numero de elementos para un arreglo.
Deberias de diferenciarlo a la hora de pedirlo asi: JOptionPane.showInputDialog("digite el numero de elementos del arreglo") ya que no se sabe para que se introduce ese numero.

Cuando dimensionas los arrays les das el valor de alem y elem1 despues en el for sumas elem+elem1.
El error que te da dentro del  for(int i=0;i<elem+elem1;i++)  es porque pides que i sea menor que elem+elem1.
Cuando entras en el for el array de elementos de menor valor te dara un error al llegar a su numero de elementos más uno.

Si elem= 3 y elem1=2 , i=5 por lo tanto cuando llege a 2 te saltará el error.
Un saludo. ;)

14
Gracias por la corrección Ogramar .
No pensé en diferenciar algo más esto (int registroCantante) ya que así hace alusión al registro no al número de registro.
Ok. ;)
Feliz Año 2019

15
Hola dejo el Ejercicio CU00914C del curso java avanzado. StringBuffer, StringBuilder Java. Ejemplo. Diferencias entre clases. Criterios para elegir. Métodos.

Citar
EJERCICIO
Realizar un programa que realice lo siguiente:
a) Crear un StringBuilder con la cadena "Hola Caracola" y mostrarla por consola.
b) Mostrar por consola su capacidad y longitud.
c) Partiendo de la cadena anterior y usando los métodos de StringBuilder modificar la cadena para que pase a ser "Hay Caracolas" y mostrarla por consola.
d) Partiendo de la cadena anterior y usando los métodos de StringBuilder modificar la cadena para que pase a ser "Hay 5000 Caracolas" y mostrarla por consola. El número entero 5000 debe estar almacenado en un int inicialmente.
e) Partiendo de la cadena anterior y usando los métodos de StringBuilder modificar la cadena para que pase a ser "Hay 5000 Caracolas en el mar" y mostrarla por consola.
f) Almacenar en un String los últimos 4 carácteres del StringBuilder resultante y mostrar ese String por consola.
g) Mostrar por  consola  la capacidad y longitud del StringBuilder final.
h) Realizar el mismo ejercicio con la clase StringBuffer.

Ejemplo de ejecución:

El StringBuilder es : Hola Caracola
Capacidad inicial = 29
Longitud inicial = 13
Hay Caracolas
Hay 5000 Caracolas
Hay 5000 Caracolas en el mar
 mar
Capacidad final = 29
Longitud final = 28


codigo de la claseTestStringBuilderStringBuffer

Código: [Seleccionar]
public class TestStringBuilderStringBuffer
{public static void main(String[] args) { 
        StringBuilder cadena = new StringBuilder("Hola Caracola");
        System.out.println("Contenido de StringBuilder: "+cadena+
            "\nCapacidad: "+cadena.capacity()+
            "\nLongitud: "+cadena.length());
        cadena.replace(0,4,"Hay");
        cadena.insert(12,"s");
        System.out.println("Modificamos (Hola caracola) por :"+ cadena);
        int n=5000;
        cadena.insert(4,n+" ");
        cadena.insert(18," en el mar");
        System.out.print("Modificamos (Hay caracolas) por :"+cadena+"\n");
        String tmp;
        tmp=cadena.substring(24,28).toString();
        System.out.println("Convertimos los 4 ultimos caracteres de StringBuilder a String: "+tmp+
        "\nCapacidad: "+cadena.capacity()+
            "\nLongitud: "+cadena.length());
            System.out.println("*****************************************");
            StringBuffer cadena2 = new StringBuffer("Hola Caracola");
        System.out.println("Contenido de StringBuffer: "+cadena2+
            "\nCapacidad: "+cadena2.capacity()+
            "\nLongitud: "+cadena2.length());
        cadena2.replace(0,4,"Hay");
        cadena2.insert(12,"s");
        System.out.println("Modificamos (Hola caracola) por :"+ cadena2);
       
        cadena2.insert(4,n+" ");
        cadena2.insert(18," en el mar");
        System.out.print("Modificamos (Hay caracolas) por :"+cadena2+"\n");
        String tmp2;
        tmp2=cadena2.substring(24,28).toString();
        System.out.println("Convertimos los 4 ultimos caracteres de StringBuffer a String: "+tmp2+
        "\nCapacidad: "+cadena2.capacity()+
            "\nLongitud: "+cadena2.length());
       
    }
}

Gracias ;)

16
Gracias Ogramar por corregirme el ejercicio.

Con el for extendido se me fue el santo al cielo y no pensé que tendría que estar en el main.
Lo del contador esta bien lo que se comenta en el hilo que tu me envías.

En el curso se aconseja no utilizar los contadores dentro de un for extendido pero solo eso, solo se aconseja ( aun que yo no entiendo porque ).

Yo creo que se puede utilizar el contador si solamente es para presentar por pantalla el numero de veces que se ejecuta el bucle y saber  el numero de elementos que hay en la lista, siempre que no interfiera ese contador o esa variable en el funcionamiento del for extendido.
Pienso que seria una barbaridad tener que implementar mas código para poder presentar el numero de veces que se ejecuta el bucle.

Una solución posible seria crear un for en el main fuera del for extendido con la longitud de la lista ( for(int i=0;1<lista1.getTamaño();i++){mas código para sacar los elementos de la lista } ) con la consiguiente  redundancia de código y cargando mas peso al programa, cuando con una variable y un sumador se arregla el tema.

Lo que trato de hacer con ese contador es evitar la redundancia de código o evitar de escribir código innecesario, ya que en programas muy extensos si vamos escribiendo trozos de código (10 0 12 lineas) que se podrían solucionar con una o dos, al final hay un follón de código que a la hora de analizarlo nos podemos volver tarumbas.

De todas las maneras hay que tener mucho cuidado con esos contadores ya que  si los utilizamos sin ser conscientes de que están por hay al final nos pueden dar problemas.

Gracias Ogramar un saludo. :D ;)

17
Hola.
Dejo la ÚNICA SOLUCIÓN que se me ha ocurrido para el Ejercicio  CU00913C ejemplo resuelto interface Comparable y método compare To (API Java). Comparar objetos ()

Citar
EJERCICIO

Utilizando Comparable y compareTo resuelve el siguiente problema donde debemos partir de una clase Persona con atributos nombre, edad y altura. Queremos ordenar por edad y por altura a las siguientes personas:
1. Mario - Altura: 187 - Edad: 22
2. Pepe - Altura: 173 - Edad: 52
3. Manuel - Altura: 158 - Edad: 27
4. David - Altura: 164 - Edad: 25
5. Alberto - Altura: 184 - Edad: 80

Debemos comparar las personas y ordenarlas por altura primero (de mayor a menor) y por edad (de menor a mayor) después. Por pantalla debe mostrarse la lista de personas sin ordenar, ordenada por altura y ordenada por edad. Ejemplo de ejecución:

 Personas sin ordenar
1. Mario - Altura: 187 - Edad: 22
2. Pepe - Altura: 173 - Edad: 52
3. Manuel - Altura: 158 - Edad: 27
4. David - Altura: 164 - Edad: 25
5. Alberto - Altura: 184 - Edad: 80

Personas ordenadas por altura
1. Mario - Altura: 187 - Edad: 22
2. Alberto - Altura: 184 - Edad: 80
3. Pepe - Altura: 173 - Edad: 52
4. David - Altura: 164 - Edad: 25
5. Manuel - Altura: 158 - Edad: 27

Personas ordenadas por edad
1. Mario - Altura: 187 - Edad: 22
2. David - Altura: 164 - Edad: 25
3. Manuel - Altura: 158 - Edad: 27
4. Pepe - Altura: 173 - Edad: 52
5. Alberto - Altura: 184 - Edad: 80

Código del modulo de la clase Persona Comparable<Persona>
Código: [Seleccionar]
public class Persona implements Comparable<Persona>{
    public String nombre;
    public int edad, altura;

    //Constructor
    public Persona( String nom,int al, int ed){
        this.nombre=nom;
        this.altura = al;
        this.edad = ed;
    }

    //Metodos set
    public String getNombre(){ return nombre;}

    public int getAltura(){ return altura;}

    public int getEdad(){ return edad;}
    //Metodos get
    public void setNombre(){ this.nombre=nombre;}

    public void  setAltura(){ this.altura=altura;}

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

    public String toString(){
        String msg="";
        msg="Nombre:\t"+nombre+"\tAltura:\t "+altura+"\tedad:  "+edad;
        return msg;
    }

    @Override //Anulamos el error y creamos otro compareTo
    // Asi evitamos crear un metodo para cada comparacion
    public int compareTo(Persona o ) {
       
        int resultado=0;
       

        return resultado;
    }
//Comparar por edad y altura
//Se le pasa la variable cadena para ejecutar la comparacion por edad o por altura
    public int compareToPersona(Persona o,String cadena ) {
        int resultado=0;
        if (cadena.equals("Edad")){
        if (this.edad<o.edad) {  resultado = 1;    }// Cambio el valor de resultado para no crear otro metodo de ordenacion
        else if (this.edad>o.edad) {   resultado = -1;   }
        else {   resultado = 0;   }
    }
      if (cadena.equals("Altura")){
        if (this.altura<o.altura) {   resultado = -1;      }
        else if (this.altura>o.altura) {    resultado = 1;      }
        else {   resultado = 0;   }
        }

        return resultado;
    }
}

Codigo del modulo de la Clase TestCompareTo
Código: [Seleccionar]
public class TestCompareTo
{

    public static void main(String arg[]) {   
        Persona[] persona=new Persona[5];
       
       
String comparePor;//Variable para utilizar en el método de burbuja y en el comparador                         
                           //Seleccionamos la ordenación por Edad o Altura

        persona[0] = new Persona("Mario",187,22);
        persona[1] = new Persona("Pepe",176,52); 
        persona[2] = new Persona("Manuel",158,27); 
        persona[3] = new Persona("David",164,25); 
        persona[4] = new Persona("Alberto",184,80); 
        System.out.println("\n\nArray desordenado");
        for(int i=0;i < persona.length;i++){
            System.out.println(persona[i]);
        }
        comparePor="Altura";//Ordenar y comparar por altura
        burbuja(persona,comparePor);
        System.out.println("\n\nArray Ordenado por altura de mas altura a menos altura");
        for(int i=0;i < persona.length;i++){
            System.out.println(persona[i]);
        }
        comparePor="Edad";//Ordenar y comparar por Edad
        burbuja(persona,comparePor);
        System.out.println("\n\nArray Ordenado por edad de menos edad a mas edad");
        for(int i=0;i < persona.length;i++){
            System.out.println(persona[i]);
        }

    }// Fin del main
    //*****************************************************
    //Metodo de ordenacion por burbuja 
    public static void burbuja(Persona[]matriz,String comparePor){
        Persona[] buffer=new Persona[5];
        int i,j;
        for(i = 0; i < matriz.length; i++)
        {
            for(j = 0; j < i; j++)
            {//Si queremos ordenar de menor a mayor solo hay que cambiar > por <
                if(matriz[i].compareToPersona(matriz[j],comparePor)>0){
                    buffer[0] = matriz[j];
                    matriz[j] = matriz[i];
                    matriz[i] = buffer[0];
                }
            }
        }
    }//Fin metodo Burbuja
   
}//Fin de la Clase

Gracias. ;)

18
Hola, dejo el Ejercicio CU00912C del tutorial de programación avanzada Java: ejemplo resuelto interface Cloneable y método clone del API Java. Cómo duplicar objetos .

Citar
EJERCICIO

Define una clase que tenga cuatro atributos de tipo String cada uno de los cuales podrá ser exclusivamente una cadena de 12 ceros o de 12 unos. Es decir, cada atributo puede valer o bien "000000000000" ó bien "111111111111". La clase debe implementar la interface Cloneable y disponer de un método que permita ver el resultado de concatenar sus atributos.

Crea otra clase con el main donde crees un objeto cuyos atributos serán: "000000000000", "000000000000", "000000000000", "000000000000".

A partir de este primer objeto, crea cuatro copias usando el método clone() y modifícalas para llegar a tener cinco objetos (el inicial más los otros cuatro copias del original y luego modificados) cuyo contenido mostrarás por pantalla, debiendo obtener el siguiente resultado:

000000000000000000000000000000000000000000000000

111111111111000000000000000000000000000000000000

000000000000111111111111000000000000000000000000

000000000000000000000000111111111111000000000000

000000000000000000000000000000000000111111111111


Citar
Codigo de la Clase MetodoClone

Código: [Seleccionar]
public class MetodoClone implements Cloneable
{
    private  String cero = new String(new char[12]).replace("\0", "0");
    private String chain1, chain2, chain3, chain4;
    public MetodoClone(){
        chain1= cero;
        chain2= cero;
        chain3= cero;
        chain4= cero;
    }

    public MetodoClone(String chain1,String chain2,String chain3,String chain4){
        this.chain1= chain1;
        this.chain2= chain2;
        this.chain3= chain3;
        this.chain4= chain4;
    }

    public void setChain1(String chain1){
        this.chain1=chain1;
    }

    public void setChain2(String chain2){
        this.chain2=chain2;
    }

    public void setChain3(String chain3){
        this.chain3=chain3;
    }

    public void setChain4(String chain4){
        this.chain4=chain4;
    }

    public String getChain1(){
        return chain1;
    }

    public String getChain2(){
        return chain2;
    }

    public String getChain3(){
        return chain3;
    }

    public String getChain4(){
        return chain4;
    }

    public MetodoClone clone(){
        MetodoClone duplicado =new MetodoClone(this.chain1,this.chain2,this.chain3,this.chain4);
        return duplicado;
    }

    public String toString() {
        String msg="";
        msg=chain1+ chain2+ chain3+ chain4;
        return msg;
    }

}

Codigo de la Clase TestMetodClonable
Código: [Seleccionar]
public class TestMetodClonable
{

    public static void main(String arg[]){
        String uno = new String(new char[12]).replace("\0", "1");
        String cero = new String(new char[12]).replace("\0", "0");

        MetodoClone duplicado=new MetodoClone(cero,cero,cero,cero);
        System.out.println(duplicado.toString());
        MetodoClone d1=duplicado.clone();
        MetodoClone d2=duplicado.clone();
        MetodoClone d3=duplicado.clone();
        MetodoClone d4=duplicado.clone();
        d1.setChain1(uno);
        d2.setChain2(uno);
        d3.setChain3(uno);
        d4.setChain4(uno);
        System.out.println(d1.toString()+"\n"+d2.toString()+"\n"+d3.toString()+"\n"+d4.toString());

    }

}

Gracias ;)

19
Hola dejo el ejercicio CU00911C Paquete java.lang. Interfaces, clases (String, Stringbuffer, StringBuilder) Concepto de inmutabilidad. 

Citar
EJERCICIO

En esta entrega hemos podido ver lo siguiente: StringBuilder puede ofrecer resultados no consistentes en una ejecución multihilo (concurrente, con distintos “subprogramas” ejecutándose simultáneamente) ya que sus métodos no son sincronizados.

Busca información en internet y trata de poner un ejemplo de cómo podría generarse una inconsistencia en programación multihilo. No hace falta que escribas código, únicamente es necesario describir en unas pocas líneas (como si estuvieras explicándoselo a un amigo) la idea o situación.

Buscando en internet he encontrado este ejemplo y creo que es muy bueno par explicar la inconsistencia entre hilos de java.:
Citar
Suponga un simple campo int definido e inicializado:
int counter = 0;
el campo counter es compartido entre dos hilos, A y B. Suponga que el hilo A incrementa counter.

counter ++;
Entonces enseguida el hilo B imprime counter:
System.out.println (counter);


Si las dos sentencias han sido ejecutado en el mismo hilo, sería seguro asumir que el valor impreso podría ser “1”.
Pero si las dos sentencias son ejecutadas en hilos separados, el valor impreso podría ser “0”, porque no hay garantía que el cambio hecho por el hilo A a counter va a ser visible al hilo B -- amenos que el programador haya establecido una relación sucede-antes entre estas dos sentencias.

Si tenemos dos procedimientos diferentes y en uno incrementamos counter++ y en otro presentamos por pantalla counter, para que no haya inconsistencia se tendría que llamar al procedimiento que incrementa el contador antes de llamar a presentar por pantalla.
Si se llamara al procedimiento que presenta por pantalla el counter antes de incrementarlo no presentaríamos un valor real del counter (o si porque igual queremos presentar ese valor sin incremento) lo cual da lugar a inconsistencia de los datos ya que al trabajar con dos hilos diferentes sin sincronizar no presenta los datos reales.

Como dice Ogramar en https://aprenderaprogramar.com/foros/index.php?topic=6848.msg25434#msg25434

Citar
Supongamos una aplicación multihilo donde un hilo 1 se encarga de realizar la reserva de un determinado asiento en un avión, mientras que otro hilo 2 se encarga de consultar los asientos libres en el avión para servirlos a una página web e informar así a un usuario que quiere realizar una compra o reserva.

Supongamos que los asientos y si están libres u ocupados están localizados en una estructura de datos localizada en ciertas posiciones de memoria principal cuya escritura requiere 2 segundos y cuya lectura requiere 1 segundo (ejemplo no real).

Supongamos que a las 10:00:00 una persona ha comprado un asiento pero la escritura no se ha formalizado hasta las 10:00:02, mientras que otra persona ha consultado los asientos libres a las 10:00:01.

Si no existe sincronización, implica que no está establecido quién tiene preferencia para usar el recurso, en este caso la memoria, y el resultado sería que la persona que ha consultado el estado de los asientos obtendría como resultado que el asiento que ha comprado la otra persona está libre.

Cuando existe sincronización, implicaría que sí está establecido quién tiene preferencia para usar el recurso, y el resultado sería que la persona que ha consultado el estado de los asientos no podría conocerlo hasta que termine el otro hilo de trabajar.
Gracias.
Un Saludo ;)

20
Hola dejo el ejercicio CU00909C del manual pdf de programación Java avanzada. Ejemplos de números aleatorios clase Random. Enteros con nextInt ().

Citar
EJERCICIO Nº 1

Crea un programa que elija dos números enteros aleatorios A y B pero no los muestre por pantalla aún. Si los dos números fueran iguales, deberá repetirse la elección hasta que sean distintos. El programa preguntará por quién apostamos, A o B (gana el número más alto). Una vez el usuario haya introducido su apuesta, el programa mostrará el valor de A y B, dirá si hemos ganado la apuesta (acertado el número más alto) o perdido y nos dirá cuántas partidas hemos ganado y perdido hasta el momento. Tras una jugada, nos preguntará si queremos jugar otra vez.

Código del ejercicio 1

Clase ApuestaAlMasAlto

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

/**
 * Write a description of class AdivinarNumero here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ApuestaAlMasAlto
{
    public static String entradaUsuario="";
    public static Scanner entrada=new Scanner(System.in);

    public static void main(String arg[ ]) {

        GenerarAleatorio rnd= new GenerarAleatorio();
        Marcador marcador= new Marcador();
        String separador = new String(new char[63]).replace("\0", "*");
        boolean fin=true;
        int a=0,b=0;//Variables para las apuestas
        int ganadas=0,perdidas=0;
        int rangoI=1, rangoF=100;
        rnd.setInicioRango(rangoI);
        rnd.setFinRango(rangoF);

        do{

            a=rnd.getEnteroRnd();
            b=rnd.getEnteroRnd();
            while(a==b){
                a=rnd.getEnteroRnd();

            }
            String introducidos="";
            System.out.print("\t\t\t"+separador+
                "\n\t\t\t** Ejercicio CU00909C-1 Java avanzado aprenderaprogramar.com **\n"+
                "\t\t\t***                                                         ***\n"+
                "\t\t\t***               JUEGO NUMERO MAS ALTO A o B               ***\n"+
                "\t\t\t***                                                         ***\n"+
                "\t\t\t"+separador+"\n\n");
            System.out.print("\t\t\t\t¿POR QUIEN APUESTA POR A O POR B?: ");
            entradaUsuario=entrada.nextLine().toUpperCase();
            boolean entraBucle=entradaUsuario.equals("A") || entradaUsuario.equals("B");
            //Mientras entradaUsuario no sea A o B se repite el bucle
            while (entraBucle==false){
                System.out.print("\t\t\t\t NO SOLO POR ¿ A O POR B ?: ");
                entradaUsuario=entrada.nextLine().toUpperCase();
                entraBucle=entradaUsuario.equals("A") || entradaUsuario.equals("B");

            }

            System.out.print("\n");
            if (a>b && entradaUsuario.equals("A")){
                System.out.print("\t\t\tA saca un "+a+" B saca un "+b+
                    "\n\n\t\t\t¡¡¡¡¡ PREMIO HAS GANADO !!!!!!");
                ganadas++;
                marcador.setAciertos(ganadas);
            }
            else if (b>a && entradaUsuario.equals("B")){
                System.out.print("\t\t\tA saca un "+a+" B saca un "+b+
                    "\n\n\t\t\t¡¡¡¡¡ PREMIO HAS GANADO !!!!!!");
                ganadas++;
                marcador.setAciertos(ganadas);
            }
            else {
                System.out.print("\t\t\tA saca un "+a+" B saca un "+b+
                    "\n\n\t\t\t¡¡¡¡¡ HAS PERDIDO !!!!!!");
                perdidas++;
                marcador.setFallos(perdidas);
            }
            System.out.print("\n\n\t\tLlevas "+ marcador.getAciertos()+" partidas ganadas y "+marcador.getFallos()+" partidas perdidas\n");
            System.out.print("\n\n\t\t\t¡¡ PULSE INTRO PARA CONTINUAR !!\n\n\t\t\tCualquier otra + intro FINALIZAR\n\n");
            entradaUsuario=entrada.nextLine();
            System.out.print('\u000C');
            fin=entradaUsuario.equals("");
        }while(fin);
        System.out.print("\n\n\n\n\n\t\t\t"+separador+
            "\n"+"\t\t\t"+separador+
            "\n\t\t\t\t\t\tADIOS"+
            "\n\t\t\t"+separador+
            "\n"+"\t\t\t"+separador+"\n");
    }//Fin main
    //Bucle para validar que solo se escriban numeros por teclado

}

Clase Marcador

Código: [Seleccionar]
public class Marcador
{
     int aciertos;
     int fallos;
     int numJugadas;
     //Constructores
    public Marcador()
    {
        this.aciertos=aciertos;
        this.fallos=fallos;
        this.numJugadas=numJugadas;
    }
    public int getAciertos(){
    return aciertos;
    }
    public int getFallos(){
    return fallos;
    }
    public int getNumJugadas(){
    return numJugadas;
    }
    public void setAciertos(int aciertos){
            this.aciertos=aciertos;
    }
    public void setFallos(int fallos){
           this.fallos=fallos;
    }
     public void setNumJugadas(int numJugadas){
            this.numJugadas=numJugadas;
    }
     
}


Clase GenerarAleatorio compartida por ApuestaAlMasAlto y LoteriaPrimitiva

Código: [Seleccionar]
import java.util.Random;
public class GenerarAleatorio
{
    private Random enteroRnd;
    private int finRango;
    private int inicioRango;

    /**
     * Constructor for objects of class GenerarAleatorio
     */
    //Constructores
    public GenerarAleatorio()
    {
        // initialise instance variables
        this.enteroRnd=new Random();
        this.finRango=0;
        this.inicioRango=0;
    }

    public GenerarAleatorio(Random enteroRnd,int finRango,int inicioRango)
    {
        // initialise instance variables
        this.enteroRnd=new Random();
        this.finRango=finRango;
        this.inicioRango=inicioRango;
    }
    // Metodos get
    public int getFinRango(){
        return finRango;
    }
     public int getInicioRango(){
        return inicioRango;
    }
    public int getEnteroRnd(){
      return enteroRnd.nextInt(finRango)+inicioRango;
   
    }
    //Metodos set
    public void setFinRango(int finRango){
    this.finRango=finRango;
    }
   
    public void setInicioRango(int inicioRango){
     this.inicioRango=inicioRango;
    }
}


Citar
EJERCICIO Nº 2

Ahora vamos a jugar a la “Lotería primitiva”. Para ello, se pedirá al usuario que introduzca 6 números enteros comprendidos entre el 1 y el 49 ambos incluidos. No estará permitido repetir número. Una vez elegidos los seis números el programa nos mostrará nuestros 6 números así como la combinación ganadora (ordenada de menor a mayor). Esta combinación constará de 6 números entre 1 y 49 elegidos al azar por el programa. Finalmente nos dirá cuántos aciertos hemos tenido y nos preguntará si queremos volver a jugar.


Nota: para ejecutar este ejercicio debe incluirse el código de la clase GenerarAleatorio que figura en el ejercicio anterior.

Codigo de la Clase LoteriaPrimitiva

Código: [Seleccionar]
import java.util.Scanner;
public class LoteriaPrimitiva
{
    //Crear variables y Objeto entrada para entrar numeros por teclado
    public static String entradaUsuario="";
    public static Scanner entrada=new Scanner(System.in);
    //Clase main
    public static void main(String arg[ ]) {
        //Separador par presentacion en pantalla
        boolean fin=true; //Variable para finalizar bulce
        do{
            String separador = new String(new char[63]).replace("\0", "*");
           
            int rangoI=1,rangoF=49;// Rango de numeros de inicio y fin de Random()
            int numLoteria=0; //Variable para coger los numeros de la loteria
            GenerarAleatorio rnd= new GenerarAleatorio();// Crear objeto que genera los numeros de la loteria
            rnd.setInicioRango(rangoI);// Poner el numero de inicio del rango de Random
            rnd.setFinRango(rangoF);// Poner el numero de fin del rango de Random
            int contador=0;// Variable contador para terminar el bucle cuando llege a 6 numeros que no sean iguales
            ListaApuestaSorteo listaApuesta=new ListaApuestaSorteo();// Lista para los numeros de la apuesta del usuario
            ListaApuestaSorteo listaSorteo=new  ListaApuestaSorteo();// Lista aleatoria de la loteria


            System.out.print("\t\t\t"+separador+
                "\n\t\t\t*** Ejercicio CU0090C2 Java avanzado aprenderaprogramar.com ***\n"+
                "\t\t\t***\t\t JUEGO LOTERIA PRIMITIVA \t\t    ***\n"+
                "\t\t\t***        Introduzca los 6 numeros de su apuesta           ***\n"+
                "\t\t\t***     del 1 al 49 no se admiten numeros repetidos         ***\n"+
                "\t\t\t"+separador+"\n\n");
            //Bucle para sacar los seis numeros del sorteo
            do{
                numLoteria=rnd.getEnteroRnd();
                //Validar que el numero no este repetido en la lista
                if(listaSorteo.numeroEnLista(numLoteria)!=true){
                    contador++;
                    listaSorteo.setNumero(numLoteria);//Si el numero no esta repetido incluir en la lista
                }
            }while(contador<6);

            contador=0;
            int aciertos=0, numeroApuesta=0;
            ValidarNumero NumAValidar=new ValidarNumero();
            //Bucle para sacar los seis numeros de la apuesta
            do{

                System.out.print(" \t\tIntroduzca la apuesta Nº "+(contador+1)+" Su numero: ");
                //Validar que solo sean numeros y entrada por teclado
                numeroApuesta=Integer.parseInt( ValidarNumero.validarNumero(entradaUsuario));
                // Comprobar que la horqulla numerica este entre 1 y 49 ambos inclusive
                if(numeroApuesta<1 || numeroApuesta>49){
                    System.out.print(" \t\tEl numero: "+numeroApuesta+" no es valido\n");
                    numeroApuesta=0;
                }
                //Comprobar que el numero no este repetido
                else if(listaApuesta.numeroEnLista(numeroApuesta)!=true){
                    contador++;//Se añade 1 al contador
                    listaApuesta.setNumero(numeroApuesta);//Si el numero no esta repetido incluir en la lista
                }
                else { System.out.print(" \t\tEl numero "+numeroApuesta+"esta repetido\n");}
            }while(contador<6);

            System.out.print('\u000C');
            //Odenar listas
            listaSorteo.getOrdenarLista();listaApuesta.getOrdenarLista();
            String numeroAcertado="";//Variable para los numeros acertados
            for (int i=0; i<listaSorteo.getTamañoLista();i++){
                if(listaApuesta.numeroEnLista(listaSorteo.getPosicionNumero(i))){
                    aciertos++;
                    numeroAcertado=numeroAcertado+ Integer.toString(listaSorteo.getPosicionNumero(i))+" ";
                }
            }
            // Presentar datos por pantalla
            String msgFinal= "\n\n\n\n\n\t\t\t"+separador+"\n\t\t\t"+separador+
                "\n\t\t\t\tResultado del sorteo:\t "+listaSorteo.getApuestaSorteo()+
                "\n\t\t\t\tSu Apuesta :\t\t "+listaApuesta.getApuestaSorteo()+
                "\n\t\t\t\tNumero de aciertos: "+aciertos+
                "\n\t\t\t\tEl/Los Numero(s) acertado(s) son: "+numeroAcertado+
                "\n\t\t\t\tPULSE INTRO PARA CONTINUAR  F+INTRO PARA FINALIZAR "+
                "\n\t\t\t"+separador+"\n"+"\t\t\t"+separador+"\n";
            System.out.print(msgFinal);
            entradaUsuario=entrada.nextLine();
            System.out.print('\u000C');
            fin=entradaUsuario.equals("");
        }while(fin); 
 System.out.print('\u000C'+"ADIOS");
    }//Fin main
}


Codigo de la clase ValidarNumero

Código: [Seleccionar]
import java.util.Scanner;
/**
 * Write a description of class ValidarNumero here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ValidarNumero
{ //Bucle para validar que solo se escriban numeros por teclado
    public static Scanner entrada=new Scanner(System.in);
    public static String validarNumero(String entradaUsuario){
        int num=0;
        boolean ok=false;
        do{

            entradaUsuario= entrada.nextLine();
            //Comprobar que sea un numero entero
            if (isNumeric(entradaUsuario) == true) {
                ok=true;
            }
            else{
               
                System.out.print("Solo se admiten numeros\n");
                entradaUsuario="";
            }

        } while (!ok);
        return entradaUsuario;
    }

    public static boolean isNumeric(String str) {//Validacion numeros
        return (str.matches("[+-]?\\d.*[0-9]?") && str.equals("")==false);
    }
}


Codigo de la Clase ListaApuestaSorteo

Código: [Seleccionar]
import java.util.Collections;
import java.util.LinkedList;
public class ListaApuestaSorteo
{
    private LinkedList<Integer> apuestaCombinacion;
    //Constructor
    public ListaApuestaSorteo(){
        apuestaCombinacion=new LinkedList();
    }
    //Metodos get
    public LinkedList<Integer> getNumero(){
        return apuestaCombinacion;   
    }

    public int getTamañoLista(){
        return apuestaCombinacion.size();
    }

    public LinkedList getOrdenarLista(){
        Collections.sort(apuestaCombinacion);
        return apuestaCombinacion;
    }

    public int getPosicionNumero(int index) {
        return apuestaCombinacion.get(index);
    }

    public String getApuestaSorteo(){
        String msg = "";
        for(int numero: apuestaCombinacion) {
            msg += "["+numero + "] ";
        }
        return msg;
    }

   
    //Metodos set
    public void setNumero(int numero){
        apuestaCombinacion.add(numero);
    }

    public boolean numeroEnLista(int numero){
        return apuestaCombinacion.contains(numero);
    }


}

Gracias. Un saludo ;)

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

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".