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

Páginas: 1 [2]
21
Buenas noches a tod@s. A continuación os transcribo el código que he realizado sobre el ejercicio propuesto en la entrega CU00667B de "Java desde cero".

Clase TestListaCantantesFamosos, con el 'main':

Código: [Seleccionar]
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        String nombreDeLaLista="\"Cantantes famosos y sus discos más vendidos\"";
        EntradaDeTeclado entrada;
        CantantesFamosos cantante;
        System.out.println("Empezamos el programa. Para salir, pulse 'return'");
        ListaCantantesFamosos lista=new ListaCantantesFamosos(nombreDeLaLista);
        cantante=new CantantesFamosos();
        cantante.setNombre("Madonna");
        cantante.setDiscoConMasVentas("All I Want Is You");lista.addNombre(cantante);
        cantante=new CantantesFamosos();
        cantante.setNombre("Jorge Negrete");
        cantante.setDiscoConMasVentas("Jalisco");lista.addNombre(cantante);
        System.out.println("La lista se llama: "+nombreDeLaLista);
        System.out.println("La lista inicial contiene los siguientes datos: ");
        lista.listarTodosLosNombres();
        do{  //Bucle do-while para ingresar datos en la lista
            System.out.println("\nPor favor, introduzca los datos de otro cantante. Para salir, pulse 'Return'");
            entrada=new EntradaDeTeclado();
            //Si pulsamos 'RETURN' en cualquiera de las dos entradas,
            //el objeto 'CantantesFamosos' actual no se añadirá a la lista
            if(entrada.getContinuar()) {//1ª Entrada: Introducción del cantante
                cantante=new CantantesFamosos();
                cantante.setNombre(entrada.getEntrada());
                entrada=new EntradaDeTeclado();
                if(entrada.getContinuar()) {//2ª Entrada: Introducción del disco
                    cantante.setDiscoConMasVentas(entrada.getEntrada());
                    lista.addNombre(cantante);
                    System.out.println("\nLa lista actualizada contiene los siguientes datos: ");
                    lista.listarTodosLosNombres(); } } }
        while(entrada.getContinuar()); ////Si pulso 'Return', se acabará la introducción de datos
        System.out.println("\nLa lista actualizada contiene los siguientes datos: ");
        lista.listarTodosLosNombres();
        System.out.println("\nFin del programa"); } }


Clase ListaCantantesFamosos:

Código: [Seleccionar]
import java.util.Iterator;
import java.util.ArrayList;
public class ListaCantantesFamosos { //Clase que representa una lista de objetos 'CantantesFamosos' manejada con la clase ArrayList de Java
    private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
    private ArrayList<CantantesFamosos>listaCantantesFamosos; //Declaramos un ArrayList que contiene objetos 'CantantesFamosos'
    public ListaCantantesFamosos(String nombre) {//Constructor
        nombreDeLaLista=nombre;
        listaCantantesFamosos=new ArrayList<CantantesFamosos>();}
    public void addNombre(CantantesFamosos cantante) {listaCantantesFamosos.add(cantante);}
    public void listarTodosLosNombres() {
        int i=1;
        Iterator<CantantesFamosos>it=listaCantantesFamosos.iterator(); //Creamos el objeto it de tipo Iterator con objetos tipo 'CantantesFamosos'
        CantantesFamosos cantante;
        while(it.hasNext()) {//'True' si el objeto tratado no es el último
            cantante= it.next();
            System.out.println("Cantante "+i+": "+cantante.getNombre()+"    "+"Disco con más Ventas: "+cantante.getDiscoConMasVentas());
            i++; } } }


Clase CantantesFamosos:

Código: [Seleccionar]
public class CantantesFamosos{
    private String nombre;
    private String discoConMasVentas;
    public CantantesFamosos() {} //Constructor vacío
    public void setNombre(String valorNombre) {nombre=valorNombre;}
    public void setDiscoConMasVentas(String valorDiscoConMasVentas) {discoConMasVentas=valorDiscoConMasVentas;}
    public String getNombre() {return nombre;}
    public String getDiscoConMasVentas() {return discoConMasVentas;} }


Clase EntradaDeTeclado:

Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado {
    private String entradaTeclado;
    boolean continuar=true;
    public EntradaDeTeclado() { //Constructor
        entradaTeclado="";
        pedirEntrada(); } //Al crear un objeto, se ejecuta este método
    public void pedirEntrada() {
        Scanner entradaEscaner=new Scanner(System.in);
        entradaTeclado=entradaEscaner.nextLine();
        if (entradaTeclado.length()==0) {continuar=false;} }
        //Si pulso 'Return', no se introducirán más datos
    public boolean getContinuar() {return continuar;}
    public String getEntrada() {return entradaTeclado;} }


Gracias por vuestra atención. saludos.

22
Hola Ogramar. Gracias por tus comentarios y puntualizaciones. Lo de inicializar una lista, p.e., tenía entendido que era mejor hacerlo en el constructor. Igual estoy confundido, que no me extrañaría, ya que son muchos conceptos y, a veces, se atropellan unos a otros.

Sí, con la línea siguiente de la clase EntradaDeTeclado, se detecta si se ha pulsado 'Return'.

Código: [Seleccionar]
if (entradaTeclado.length()==0) {continuar=false;}

Aprovecho eso para salir de la introducción de cantantes en la lista en cualquier momento, y para evitar añadir el último 'Return' en la misma.

Respecto a que no te deja introducir más cantantes después de 'Bono', no sé. He vuelto a ejecutar el código y, a mí, si me deja metar cantantes hasta que pulso 'Return' para salir. Lo único es que el mensaje en pantalla "Introduzca más cantantes. Para salir, pulse 'return' ".ya no vuelve a salir después de introducir el quinto cantante. Diseñé el código así para evitar más líneas en pantalla cada vez que introducía un cantante. Lo único que aparece en pantalla es el cursor parpadeando en la siguiente línea.

Gracias por tu atención

             

23
Hola a tod@s. A continuación transcribo el código del ejercicio propuesto.

Clase TestListaCantantesFamosos, con el 'main':

Código: [Seleccionar]
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        String nombreDeLaLista="\"Cantantes famosos\"";
        EntradaDeTeclado entrada;
        int veces=1;
        System.out.println("Empezamos el programa. Para salir, pulse 'return'");
        ListaCantantesFamosos lista=new ListaCantantesFamosos(nombreDeLaLista);
        System.out.println("La lista se llama: "+nombreDeLaLista);
        lista.listarTodosLosNombres();
        do{  //Bucle do-while para ingresar datos en la lista
            if (veces==1) {System.out.println("\nIntroduzca un/a cantante más:");}
                else if (veces==2) {
                    System.out.println("\nIntroduzca más cantantes. Para salir, pulse 'return'");
                    veces++; }
            entrada=new EntradaDeTeclado();
            if(entrada.getContinuar()) {//el 'if' evita que el 'Return' último sea añadido a la lista
                lista.addNombre(entrada.getEntrada());
                if(veces==1) {lista.listarTodosLosNombres();veces++;}}}
        while(entrada.getContinuar()); ////Si pulso 'Return', se acabará la introducción de datos
        lista.listarTodosLosNombres();} }


Clase ListaCantantesFamosos:


Código: [Seleccionar]
import java.util.ArrayList;
public class ListaCantantesFamosos { //Clase que representa una lista de nombres manejada con la clase ArrayList de Java
    private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
    private ArrayList<String>listadenombres; //Declaramos un ArrayList que contiene objetos String
    public ListaCantantesFamosos(String nombre) { //Constructor: crea una listainicial de 3 cantantes
        nombreDeLaLista=nombre;
        listadenombres=new ArrayList<String>();
        listadenombres.add("Aretha Franklin");listadenombres.add("Etta James");listadenombres.add("Nina Simone");
    }//Creamos el objeto de tipo ArrayList
    public void addNombre(String valor_nombre) {listadenombres.add(valor_nombre);}
    public void listarTodosLosNombres() {
        int i=1;
        if (listadenombres.size()!=0) {
           System.out.println("\nLa lista está formada por "+listadenombres.size()+" cantantes");
           //System.out.println("Mostramos todos los nombres con un ciclo for-each");   
           for (String nombre:listadenombres) { //Ciclo for-each
               System.out.println("Cantante "+i+": "+nombre);i++;} }
        else {System.out.println("La lista está vacía");} } }


Clase EntradaDeTeclado:

Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado {
    private String entradaTeclado;
    boolean continuar=true;
    public EntradaDeTeclado() { //Constructor
        entradaTeclado="";
        pedirEntrada(); } //Al crear un objeto, se ejecuta este método
    public void pedirEntrada() {
        Scanner entradaEscaner=new Scanner(System.in);
        entradaTeclado=entradaEscaner.nextLine();
        if (entradaTeclado.length()==0) {continuar=false;} }
        //Si pulso 'Return', no se introducirán más datos
    public boolean getContinuar() {return continuar;}
    public String getEntrada() {return entradaTeclado;} }


Gracias por vuestra atención. Saludos.

24
Gracias Ogramar por tus comentarios.

Ya he quitado "System.out.println" del constructor de la clase "ListaCantantesFamosos" y lo he puesto en el 'main', insertando una función que devuelve el nombre de la lista en la clase "ListaCantantesFamosos".


Código: [Seleccionar]
import java.util.ArrayList;
public class ListaCantantesFamosos { //Clase que representa una lista de nombres manejada con la clase ArrayList de Java
    private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
    private ArrayList<String> listadenombres; //Declaramos un ArrayList que contiene objetos String
    public ListaCantantesFamosos (String nombre) { //Constructor: crea una lista de nombres vacía
        nombreDeLaLista=nombre;
        listadenombres=new ArrayList<String>(); }//Creamos el objeto de tipo ArrayList
    public void addNombre (String valor_nombre) {listadenombres.add (valor_nombre);}
    public String getNombre (int posicion) {
        if (posicion>=0 && posicion<listadenombres.size()) {
            return listadenombres.get(posicion);}
        else {return "No existe nombre para la posición solicitada";} }
    public int getTamaño () {return listadenombres.size();}
    public String getNombreDeLaLista () {return nombreDeLaLista;}}



Código: [Seleccionar]
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        EntradaDeTeclado entrada;
        System.out.println ("Empezamos el programa. Para salir, pulse 'return'");
        ListaCantantesFamosos lista = new ListaCantantesFamosos("Cantantes introducidos por usuario");
        do{
            System.out.println ("Por favor introduzca un/a cantante:");
            entrada=new EntradaDeTeclado();
            lista.addNombre (entrada.getEntrada()); }
        while(entrada.getContinuar()); ////Si pulso 'Return', 'while' será falso y se acabará la introducción de datos
        System.out.println ("La lista se llama: "+lista.getNombreDeLaLista());
        System.out.println ("La lista ha quedado formada por "+(lista.getTamaño()-1)+" cantantes");
        for (int i=0;i<lista.getTamaño()-1;i++) {
            System.out.println ("Cantante "+(i+1)+": "+lista.getNombre(i));} } }


Respecto a que no he hecho lo pedido en el ejercicio, tienes toda la razón. Sucedió que me puse a hacerlo de la forma indicada, pero me picó la curiosidad por encontrar una forma que me fuera pidiendo datos hasta que yo decidiera lo contrario ;D.

Gracias de nuevo por vuestra atención, y hoy a tí en particular.


25
Hola a tod@s. Os transcribo los códigos del ejercicio propuesto en esta lección. Me ha costado depurarlo para dejarlo como está. Quería que me pidiera cantantes hasta una indicación para finalizar. Pero ahora funciona (por el momento ;D). Me ha servido de mucho los comentarios en https://www.aprenderaprogramar.com/foros/index.php?topic=2220.msg10706#msg10706 .


Primero la clase TestListaCantantesFamosos, donde está el 'main':

Código: [Seleccionar]
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        EntradaDeTeclado entrada;
        System.out.println ("Empezamos el programa. Para salir, pulse 'return'");
        ListaCantantesFamosos lista = new ListaCantantesFamosos("Cantantes introducidos por usuario");
        do{
            System.out.println ("Por favor introduzca un/a cantante:");
            entrada=new EntradaDeTeclado();
            lista.addNombre (entrada.getEntrada()); }
        while(entrada.getContinuar()); ////Si pulso 'Return', 'while' será falso y se acabará la introducción de datos
        System.out.println ("La lista ha quedado formada por "+(lista.getTamaño()-1)+" cantantes");
        for (int i=0;i<lista.getTamaño()-1;i++) {
            System.out.println ("Cantante "+(i+1)+": "+lista.getNombre(i));} } }



A continuación, la clase ListaCantantesFamosos, para crear un ArrayList:

Código: [Seleccionar]
import java.util.ArrayList;
public class ListaCantantesFamosos { //Clase que representa una lista de nombres manejada con la clase ArrayList de Java
    private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
    private ArrayList<String> listadenombres; //Declaramos un ArrayList que contiene objetos String
    public ListaCantantesFamosos (String nombre) { //Constructor: crea una lista de nombres vacía
        nombreDeLaLista=nombre;
        listadenombres=new ArrayList<String>();
        System.out.println ("La lista se llama: "+nombreDeLaLista);
    }//Creamos el objeto de tipo ArrayList
    public void addNombre (String valor_nombre) {listadenombres.add (valor_nombre);}
    public String getNombre (int posicion) {
        if (posicion>=0 && posicion<listadenombres.size()) {
            return listadenombres.get(posicion);}
        else {return "No existe nombre para la posición solicitada";} }
    public int getTamaño () {return listadenombres.size();} }


Por último, la clase EntradaDeTeclado:

Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado {
    private String entradaTeclado;
    boolean continuar=true;
    public EntradaDeTeclado () { //Constructor
        entradaTeclado="";
        pedirEntrada(); } //Al crear un objeto, se ejecuta este método
    public void pedirEntrada () {
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();
        if (entradaTeclado.length()==0) {continuar=false;} } //Si pulso 'Return', saldré del programa
    public boolean getContinuar () {return continuar;}
    public String getEntrada () {return entradaTeclado;} }


Saludos y gracias a tod@s.

26
Hola. Gracias por vuestras sugerencias. Tomo nota y, hasta la próxima. :)

27
Os adjunto el código del ejercicio propuesto. A mi me funciona. Lo que pregunto es si la forma elegida de resolverlo es la más adecuada, o a estas alturas del curso tendría que haberlo hecho de otra forma más eficiente o adecuada.

Gracias por todo.

Código: [Seleccionar]
public class TestPrograma2 {
    public static void main (String [ ] args) {
        Scanner entradaEscaner;
        String entradaTeclado = "";
        int longitudTexto = 0;
        String primeraLetra = "";
               
        System.out.println ("");
        System.out.println ("Empezamos el programa");
        System.out.println ("Por favor introduzca una cadena por teclado:");
        entradaEscaner = new Scanner (System.in); //Creación de un objeto Scanner
        entradaTeclado = entradaEscaner.nextLine (); //Invocamos un método sobre un objeto Scanner
        System.out.println ("");
        System.out.println ("Entrada recibida por teclado es: \"" + entradaTeclado + "\"");
       
        longitudTexto = entradaTeclado.length();
        primeraLetra = entradaTeclado.substring (0,1);
       
        switch (primeraLetra) {
            case "a":
                if (longitudTexto < 5) {
                    System.out.println ("La cadena introducida tiene menos de 5 caracteres y empieza por la letra 'a'.");}
                else if (longitudTexto >= 5 && longitudTexto <= 15) {
                    System.out.println ("La cadena introducida tiene entre 5 y 15 caracteres y empieza por la letra 'a'.");}
                else {
                    System.out.println ("La cadena introducida tiene más de 15 caracteres y empieza por la letra 'a'.");}
                break;
            default:
                if (longitudTexto < 5) {
                    System.out.println ("La cadena introducida tiene menos de 5 caracteres y no empieza por la letra 'a'.");}
                else if (longitudTexto >= 5 && longitudTexto <= 15) {
                    System.out.println ("La cadena introducida tiene entre 5 y 15 caracteres y no empieza por la letra 'a'.");}
                else {
                    System.out.println ("La cadena introducida tiene más de 15 caracteres y no empieza por la letra 'a'.");}
                break;
        }
     } //Cierre del main
} //Cierre de la clase

28
Hola javi in the sky. Gracias por tu atención y por la respuesta. A esa conclusión he llegado también. Era por entender más "racionalmente" el porqué de si el código ya define una variable local, parámetro o campo de una clase como 'float', Java hace eso. En el código de la lección CU00652B pone:

Código: [Seleccionar]
//Constructor de la clase que pide los parámetros necesarios
          public Deposito (float valor_diametro, float valor_altura, String valor_idDeposito) {
              if (valor_diametro > 0 && valor_altura > 0) {
                    diametro = valor_diametro;
                    altura = valor_altura;
                    idDeposito = valor_idDeposito;
             } else {
                  diametro = 10;
                  altura = 5;
                  idDeposito = "000";
             } } //Cierre del constructor

Los valores son introducidos a petición del constructor, no son fijos. Por lo que no puedo ponerles p.e. 23.12f (o así lo veo yo).
Declarando las variables, etc. como float, sin problema. Era por lo de ahorrar memoria al escribir código eficiente según las directrices dadas en las lecciones.

Gracias de nuevo. :)

29
Hola amigos. Lo primero enhorabuena por el curso de Java desde cero. Poco a poco voy avanzando sin demasiadas penuras, y en parte, por cómo habéis redactado y explicado el curso.

Pero ahora he llegado a una duda para la que no obtengo respuesta. He buscado por los foros y en San Google, pero no obtengo la respuesta "precisa".

Entrega CU00652B, primer ejemplo. Lo transcribo a BlueJ, compilo, OK. Creo un objeto New Deposito, donde me pide los valores del diámetro, altura y el Id. Introduzco, p.e., d=3.256, h=4.954 e id="001".

En esa misma ventana me contesta en la parte de abajo: "Error: incompatible types: possible lossy conversion from double to float".

No lo entiendo. En el código, las variables están definidas como "float", y los valores introducidos no son tan "grandes" como para que los considere "double".

Si cambio en el programa las variables a tipo "double", no da error. Si introduzco valores enteros (ej.: 2 y 3), no da error. ¿Qué está pasando?

Gracias por vuestra atención.

Páginas: 1 [2]

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