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
41
Tienes toda la razón. Lo he corregido y he podido eliminar muchas líneas de código.
Muchas gracias por la corrección y un saludo.

42
Buenas a todos.

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

Clase donde genero los números aleatorios:

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

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

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

    public int getRandom () {
        return rndEntero;
    }
}

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

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

¡Un saludo!

43
Muchas gracias de nuevo, Pedro. He usado esta última opción que me has dicho en otro ejercicio y me ha venido muy bien.

¡Un saludo! : )

44
Buenos días.

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

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

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

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

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

Eso es todo. ¡Saludos!

45
¡Muchas gracias, Pedro! No tenía ni idea. Ya funciona bien sin necesidad de crear un nuevo Scanner.

Saludos : )

46
Buenos días.

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

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

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

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

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

Gracias de antemano por vuestras respuestas.

47
Gracias, Alex.

Ayer completé el curso "Aprender programación Java desde cero" y quería agradeceros que pongáis a disposición de todo el mundo un material tan bueno.

49
Muchas gracias por la explicación, ESOJ. Ahora ya lo entiendo.

50
De acuerdo. Gracias.

51
¡Buenos días!

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

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

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

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

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

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

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

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

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

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

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

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

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

¡Saludos!

52
Muchas gracias, ESOJ. No sé por qué, pero estaba convencido de que había que crear un nuevo objeto Scanner para cada entrada del usuario. Queda mucho más limpio de la forma en que lo has escrito.

¡Saludos!

53
Hola de nuevo.

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

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

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

    public String getMatricula () { return matricula; }

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

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

¡Un saludo!

54
¡Buenas!

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

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

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

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

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

Muchas gracias de antemano.

55
He modificado el código para evitar el uso del while (true):

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

¿Es una forma más adecuada de hacerlo?

56
Ah, de acuerdo. Muchas gracias por señalarlo, Alex.
Saludos.

57
Hola de nuevo.
Ya he resuelto el error. He encontrado una explicación en otro hilo (https://www.aprenderaprogramar.com/foros/index.php?topic=4297.0). He creado un método dentro de la clase ListaCantantesFamosos para hacer la lista y el código funciona perfectamente.

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

58
Buenos días.

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

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

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


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

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

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

Muchas gracias de antemano.

59
Gracias por contestar, ESOJ. Muy buenas explicaciones, ahora lo he entendido.

60
Es verdad. No me había dado cuenta. Muchas gracias  ;D

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