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

Páginas: 1 ... 13 14 15 16 17 [18] 19 20
341
Buenas, dejo aquí la respuesta a mi ejercicio

Clase Circulo
Código: [Seleccionar]
public class Circulo{
   
    private static final double NUMEROPI = 3.1416; //En mayuscula porque es final, no se puede modificar
    private double radio;
   
    public Circulo(){ //constructor inicializo y asigno valor a radio;
        radio = 0.0; }
   
    //Setter   
    public void setRadio(double valorRadio){
        radio = valorRadio; }
    //Getters
        public double getRadio(){ return radio; }
    public double getNumeroPi(){ return NUMEROPI; }
    // Funcion que devuelve el area del circulo
    public double areaCirculo(){ return NUMEROPI * (radio * radio); }
    //Funcion que devuelve longitud del circulo
    public double longitudCirculo(){ return 2*NUMEROPI*radio; }
}

Clase EntradaDatos

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

public class EntradaDatos{
    private double numero = 0;

    public EntradaDatos(){ /*vacio*/ } //constructor

    public void entradaDouble(){ //recoger el double por Scanner
        do{
            try{
                Scanner entrada = new Scanner(System.in);
                numero = entrada.nextDouble();
            }catch (InputMismatchException e){ System.out.println("Debes introducir un numero para el radio");}
        }while(numero == 0);
    }

    public int entradaEntero(){
        int opcion = 0; 
        do{
            try{
                Scanner entrada = new Scanner(System.in);
                opcion = entrada.nextInt();
            }catch(InputMismatchException e){ System.out.println("Debes introducir un numero del 1 al 3");}
        }while(opcion < 1 && opcion >3);
        return opcion;
    }

    //getter
    public double getDouble(){ return numero;}
}// cierre clase

Clase OperacionesCirculo

Código: [Seleccionar]
public class OperacionesCirculo{

    public static void main (String[] args){
        boolean salida = false;
        Circulo circunferencia = new Circulo();  //creo el nuevo Circulo

        System.out.println("Por favor introduce el radio de la circunferencia");

        EntradaDatos entrada = new EntradaDatos(); //pido datos con nuevo EntradaDatos
        entrada.entradaDouble();
        circunferencia.setRadio(entrada.getDouble()); //hacemos un setRadio para pasar el valor a instancia de clase Circulo

        //menu que mientras no se seleccione CASE 3 no pondra en true el boolean salida
        while(salida == false){
            System.out.println(" \n 1.- Dar Area Circulo \n 2.- Dar Longitud del Circulo \n 3.-Salir ");
            switch (entrada.entradaEntero()){
                case 1: System.out.println("\n El area del circulo es " + circunferencia.areaCirculo()); break;
                case 2: System.out.println("\n La longitud del circulo es " + circunferencia.longitudCirculo()); break;
                case 3: salida = true; break;
            } //cierre switch
        } //cierre while
        System.out.println("Final del programa");
    }//cierre main
}//cierre clase

342
Buenas Mario, gracias por tu respuesta y tus explicaciones. Entiendo lo que dices, muy clara tu explicación.

343
Buenas Javi in the Sky, ok sobre lo de la sintaxis de Java, me queda claro, cuando sea un array fijo va con new, sino se puede inicializar sin new por asignación como una variable primitiva.

Y si el semaforo fue un nombre que poco indica, lo tendré presente, también lo de codigo claro, no por sintetizarlo más es mas fácil su lectura.

Gracias por los comentarios y aclaraciones javi in the sky.


344
Buenas tardes, aquí dejo la solución a mi ejercicio

Clase EntradaDatos

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

public class EntradaDatos{
    private int numero;

    public EntradaDatos(){ /*vacio*/}

    public void recogerNumero(){

        do{ 
            try{   //recoge un Int entre 1 y 100 y  sino vuelve a pedir la entrada de dato
                System.out.println("Por favor introduce un numero entre 1 y 100 \n");
                Scanner escaner = new Scanner(System.in);
                numero = escaner.nextInt();
            }catch(InputMismatchException e){}
        } while( numero > 100 || numero < 1);
    }
   
    public int getNumero(){ return numero; }  //devuelve el int entre 1 y 100 introducido
}

Clase NumeroAleatorio

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

public class NumeroAleatorio {
     private int numeroRandom;
     
    public NumeroAleatorio(){
        //declaramos y inicializamos aleatorio como Random
        Random aleatorio = new Random();
        // asigno a numeroRandom un aleatorio entre 0 y 99 y le añado 1 para que esté entre 1 y 100
        numeroRandom = aleatorio.nextInt(100) + 1;
    }
   
    public int getNumeroAleatorio(){ return numeroRandom; }
}

Clase AdivinaNumero (main)

Código: [Seleccionar]
public class AdivinaNumero{
   
    public static void main (String [] args){
        int aleatorio;
        //Creamos objeto adivinanza del tipo NumeroAleatorio que automaticamente genera un numero random
        NumeroAleatorio adivinanza = new NumeroAleatorio();
        aleatorio = adivinanza.getNumeroAleatorio();
       
        System.out.print("Se ha generado un número aleatorio entero entre 1 y 100, intente adivinarlo \n \n");
        // Pedimos introduzca un numero creado nuevo objeto EntradaDatos
        EntradaDatos entrada = new EntradaDatos();
       
        do{
         // usando el metodo recogerNumero para que introduzca numero el usuario
       
        entrada.recogerNumero();
       
        if (entrada.getNumero() > aleatorio) { System.out.println(" No has acertado: el número es menor ");}
          else if (entrada.getNumero() < aleatorio) { System.out.println(" No has acertado: el número es mayor ");} 
           
        } while (entrada.getNumero() != aleatorio);
       
        System.out.println(" Enhorabuena !! has acertado, el número era " + aleatorio );
    } // final main
}// final clase

345
Hola, buenas noches, me presento tarde, pues ya empecé el curso de "java desde 0" hace un par de semanas, pero ya sabeis lo que se dice, más vale tarde que más tarde.

Mi nombre es Lorenzo, tengo el grado superior de desarrollo de aplicaciones pero, lo aparqué como profesión para dedicarme a otras cosas. Ahora pretendo REaprender Java para desarrollar alguna aplicación que tengo en mente para Android a posteriori y quien sabe.

Felicitar al foro y la dirección del mismo pues creo que tanto los cursos como este foro y sus moderadores son geniales, y no lo digo por decir, en dos semanas y poco voy por el capitulo 72 y he aprendido muchísimo ya (a mi corto entender) pronto al nivel de lo que di en Java en TODO el segundo año del grado superior (faltan ficheros y algo más que cuando vea iré recordando).

Así que es un curso que aconsejo a todos los que dudeis y me leais porque vale la pena.

Saludos a todos los foreros y espero ir conociendoos.


346
Ahí van mis respuestas al ejercicio.

 salta un mensaje de error “operator * cannot be applied to int, java.lang.String”

a ¿Qué interpretación haces de este mensaje de error?
Respuesta Al querer multiplicar un entero 2 * String (entradaUsuario) salta error por incompatibilidad de tipos.

b ¿Cómo se puede corregir el código para que a través de una conversión de tipos se ejecute el programa?
Respuesta

Con valueOf. Transformo el String en un Integer, y opero con el pues Java creo se explicó que transformaba un objeto Integer a un int primitivo por si solo (en el cálculo, lo añado porque en el siguiente capitulo se ve la importancia de pasar bien tipos primitivos o Objetos) , sino habria que volver a transformar el Integer a int con un,
   int nuevoNumero = (int)ObjetoInteger;

Código: [Seleccionar]
import javax.swing.JOptionPane;

public class Ejemplo1{
   
    public static void main (String [] args){
        Integer numero = 0;
        String entradaUsuario = JOptionPane.showInputDialog("Introduzca un número:");
        numero = numero.valueOf(entradaUsuario);
        System.out.println("El doble del numero introducido es : " + 2 * numero);
    } //cierre main
}// cierre clase

con parseInt

Código: [Seleccionar]
import javax.swing.JOptionPane;

public class Ejemplo1{
   
    public static void main (String [] args){
        int numero;
        String entradaUsuario = JOptionPane.showInputDialog("Introduzca un número:");
        numero = Integer.parseInt(entradaUsuario);
        System.out.println("El doble del numero introducido es : " + 2 * numero);
    } //cierre main
}// cierre clase

Hay alguna diferencia? me da la sensación que con parseInt ya convierte String --> Integer ---> int. la doble conversión y valueOf necesitaria hacerla de nuevo con el Integer.

347
Buenos días, estaba contento con mi ejercicio anoche, pero revisando los de otros compañeros, veo que la declaración de Array es correcta si defino el tamaño por defecto como yo hice (sin el new no deja).
Pero que para acerlo en una sola linea sin definir array fijo sería,
Código: [Seleccionar]
String [] meses = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};

La asignación de valores esta clara, lo de no poner el new String [] , no sé a que se debe,mi pregunta;
Puede ser porque la clase String ya está cargada por defecto y no requiere imports ni un new ?
Y si es así, porque es obligatorio el new String[Slot] cuando le indicamos un número fijo determinado. Ejemplo String[] meses = new String[12];

También vi una solución del while que ahorraba el boolean semaforo que yo uso y debo recordarla para más adelante,

Código: [Seleccionar]
while(!mesSecreto.equalsIgnoreCase(entrada.recogerString())){

            System.out.println(" No ha adivinado. Prueba introduciendo otro mes. \n ");
        }
        System.out.println("Acertaste!!!");

se queda en el bucle mientras NO sea igual mes secreto a lo introducido.

Gracias de antemano como siempre, por la ayuda y la resolución de dudas, problemas y meteduras de pata ;)

348
Buenas noches, aquí mi solución del programa, comentar que uso un random para asignar posición de la array al mesSecreto y poco más he cambiado.

Clase EntradaDatos

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

public class EntradaDatos{
   
    public EntradaDatos(){ /*vacio*/ }
   
    public String recogerString(){
       
        String palabra = "";
        do{
           
            Scanner escaner = new Scanner(System.in);
            //como solo es una palabra recojo con next() no nextLine()
            palabra = escaner.next();
        }while (palabra.isEmpty() );
     
        return palabra;
    }
}

Clase GestorMeses (main)

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

public class GestorMeses{

    public static void main(String[] args){
       
        //Declaro y asigno los meses al String meses
        String [] meses = new String [12];
        meses[0] = "enero"; meses [1] = "febrero"; meses[2] = "marzo"; meses[3] = "abril"; meses[4]="mayo;";
        meses[5] = "junio"; meses [6] = "julio"; meses[7] = "agosto"; meses[8] = "septiembre"; meses[9] = "octubre";
        meses[10] = "noviembre"; meses[11] = "diciembre";

        //Declaracin String mesSecreto a adivinar
        String mesSecreto;
        //Declaro un new de la clase Random para generar aleatoriamente un int que corresponda a las posiciones de la array
        Random numero = new Random();
        //Declaro un new de la clase EntradaDatos para recoger la palabra introducida
        EntradaDatos entrada = new EntradaDatos();
        //Declaro y asigno false boolean semaforo para salir del bucle
        boolean semaforo = false;
        //Asignación
        mesSecreto = meses [numero.nextInt(12)];

        System.out.println("Iniciamos el programa... ");
        System.out.println(" \n \n Introduce el nombre de un mes para adivinar el Mes Secreto");

        while(semaforo == false){

            if(mesSecreto.equalsIgnoreCase(entrada.recogerString())){ System.out.println("Has acertado!!"); semaforo = true;
            }else { System.out.println(" No ha adivinado. Prueba introduciendo otro mes. \n "); }
        }
       System.out.println (" \n \n Finalizando el programa... Final");
    }
   
}


349
jejeje, si cierto, claro si no es anonimo, tienes las dos maneras, ok lo veo Toni. Gracias por el matiz.

350
Buenas Toni, he rehecho el ejercicio, cree un constructor para CantanteFamoso(String nombre, String disco).
No me salía ahora hacerlo usando setNombre() setDisco() y el constructor vacio. Era más lío pero hacerse supongo que se podia.

Sobre el boolean semaforo, simplemente lo pongo para que solo iniciar, no se pueda poner 'n' y salir del programa sin añadir mínimo 1 cantante, sin ese boolean podía hacerse No y terminar sin añadir.

El resto lo corregí, como siempre muchas gracias por el tiempo dedicado, enormemente agradecido.

Clase CantanteFamoso

Código: [Seleccionar]
public class CantanteFamoso{

    private String nombre;
    private String discoConMasVentas;

    public CantanteFamoso(){ //constructor inicializando atributos con ""
        nombre = "";
        discoConMasVentas = "";
    }
   
    public CantanteFamoso(String valorNombre, String valorDisco){
        nombre= valorNombre;
        discoConMasVentas = valorDisco; }
       
    //Setters
    public void setNombre(String valorNombre){ nombre = valorNombre; }

    public void setDisco(String valorDisco){ discoConMasVentas = valorDisco; }

    //Getters

    public String getNombre(){ return nombre; }

    public String getDisco() { return discoConMasVentas; }
}

Clase ListaCantantesFamosos

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

public class ListaCantantesFamosos{

    private ArrayList<CantanteFamoso> lista;

    public ListaCantantesFamosos(){
        lista = new ArrayList <CantanteFamoso>();
    }

    public void añadirCantante(CantanteFamoso entrada){
        lista.add(entrada);
    }

    public void imprimirArray(){
        CantanteFamoso cantante;
        Iterator <CantanteFamoso > it = lista.iterator();
        while(it.hasNext() ){
            cantante = it.next();
            System.out.println(" Cantante: " + cantante.getNombre() + "   Disco más vendido: " + cantante.getDisco() );
        }
    }
}


Clase EntradaDatos

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


public class EntradaDatos{

    public EntradaDatos(){ /*vacio*/ }

    public String recogerString(){
      String entrada;
       
        do{
          Scanner escaner = new Scanner(System.in);
           entrada = escaner.nextLine();
        } while(entrada.isEmpty());
     
      return entrada;
    }
   
   
   
    public char recogerChar(){

        String entrada;
        char respuesta;

        do{
            System.out.print(" Solo puedes introducir los carácteres (S)i / (N)o ");
            Scanner escaner = new Scanner(System.in);
            entrada = escaner.nextLine();
            respuesta = entrada.charAt(0);
        } while (!entrada.equalsIgnoreCase("s") && !entrada.equalsIgnoreCase("n"));
       
        respuesta = Character.toLowerCase(respuesta);
        return respuesta;
    }

}

Clase GestorLista (main)

Código: [Seleccionar]
public class GestorLista{

    public static void main(String [] args){
        String nombre; String disco;
        char opcion;
        boolean semaforo = false;
        // creo nuevo objeto ListaCantantesFamosos
        ListaCantantesFamosos nuevaLista = new ListaCantantesFamosos();

       
        //añado dos cantantes manualmente a la arrayList de la nueva ListaCantantesFamosos

        nuevaLista.añadirCantante(new CantanteFamoso("Michael Jackson","Thriller"));

        nuevaLista.añadirCantante(new CantanteFamoso("Marta Sanchez", "Ni idea"));
        nuevaLista.imprimirArray();

        do{

            EntradaDatos entrada = new EntradaDatos();
            System.out.println(" \n\n ¿Desea introducir los datos de otro cantante ");
            opcion = entrada.recogerChar();

            if (opcion == 's'){
                System.out.println("\n Introduce el nombre de un nuevo cantante ");
                nombre = entrada.recogerString();
                System.out.println("\n Introduce el nombre del disco más vendido ");
                disco = entrada.recogerString();

                nuevaLista.añadirCantante(new CantanteFamoso(nombre,disco));
                semaforo = true;
                nuevaLista.imprimirArray();

            }

        }while(opcion == 's' || semaforo == false);

        System.out.println("\n \n Final del programa");
    }

}

351
Ahí van mis respuestas aunque parece que esté escribiendo Groucho Marx con "la parte contratante de la parte contratante".  ;D ( A riesgo de equivocarme me lanzo )

a: ¿Se puede acceder a un objeto anónimo contenido en un ArrayList?

Respuesta Sí, tendrá una posicion en el ArrayList con la que acceder a lainformación aunque no tenga un nombre como Objeto cococido.

b: ¿Se puede inicializar un objeto de una clase que contiene tres atributos de tipo objeto declarando en el constructor que los atributos se inicializan mediante objetos anónimos?

Respuesta Sí, el objeto se puede inicializar igual, pues los 3 atributos contienen la información requerida(necesaria para iniciar el objeto) porque ha sido inicializada, aunque no sepamos el nombre del Objeto que constituyen esos contenidos.


352
Buenas tardes, dejo mi ejercicio, he intentado ceñirme a lo solicitado, controlando las posibles malas entradas.
Utilizo un semaforo que no deja salir de la aplicación sin añadir al menos un cantante (pero no logré ver donde podia hacer un println que así lo indicara :-)  )

Ahí va :)

Clase CantanteFamoso

Código: [Seleccionar]
public class CantanteFamoso{

    private String nombre;
    private String discoConMasVentas;

    public CantanteFamoso(){ //constructor inicializando atributos con ""
        nombre = "";
        discoConMasVentas = "";
    }

    //Setters
    public void setNombre(String valorNombre){ nombre = valorNombre; }

    public void setDisco(String valorDisco){ discoConMasVentas = valorDisco; }

    //Getters

    public String getNombre(){ return nombre; }

    public String getDisco() { return discoConMasVentas; }
}


Clase ListaCantantesFamosos

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

public class ListaCantantesFamosos{

    private ArrayList<CantanteFamoso> lista;

    public ListaCantantesFamosos(){
        lista = new ArrayList <CantanteFamoso>();
    }

    public void añadirCantante(String nombre, String disco){
        CantanteFamoso entrada = new CantanteFamoso();
        entrada.setNombre(nombre);
        entrada.setDisco(disco);
        lista.add(entrada);
    }

    public void imprimirArray(){
        CantanteFamoso cantante;
        Iterator <CantanteFamoso > it = lista.iterator();
        while(it.hasNext() ){
            cantante = it.next();
            System.out.println(" Cantante: " + cantante.getNombre() + "   Disco más vendido: " + cantante.getDisco() );
        }
    }
}

Clase EntradaDatos

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

public class EntradaDatos{

    public EntradaDatos(){ /*vacio*/ }

    public String recogerString(){
      String entrada;
       
        do{
          Scanner escaner = new Scanner(System.in);
           entrada = escaner.nextLine();
        } while(entrada.length()<1);
     
      return entrada;
    }
   
   
   
    public char recogerChar(){

        String entrada;
        char respuesta;

        do{
            System.out.print(" Solo puedes introducir los carácteres (S)i / (N)o ");
            Scanner escaner = new Scanner(System.in);
            entrada = escaner.nextLine();
            respuesta = entrada.charAt(0);
        } while (!entrada.equalsIgnoreCase("s") && !entrada.equalsIgnoreCase("n"));
       
        respuesta = Character.toLowerCase(respuesta);
        return respuesta;
    }

}


Clase GestorLista (Main)

Código: [Seleccionar]
public class GestorLista{
     
   
    public static void main(String [] args){
        String nombre; String disco;
        char opcion;
        boolean semaforo = false;
        // creo nuevo objeto ListaCantantesFamosos
        ListaCantantesFamosos nuevaLista = new ListaCantantesFamosos();
       
        //añado dos cantantes manualmente a la arrayList de la nueva ListaCantantesFamosos
        nuevaLista.añadirCantante("Michael Jackson","Thriller");
        nuevaLista.añadirCantante("Iron Maiden", "The number of the beast");

        nuevaLista.imprimirArray();
       
         do{
           
              EntradaDatos entrada = new EntradaDatos();
                System.out.println(" \n\n ¿Desea introducir los datos de otro cantante ");
                opcion = entrada.recogerChar();
             
               if (opcion == 's'){
                 System.out.println("\n Introduce el nombre de un nuevo cantante ");
                 nombre = entrada.recogerString();
                 System.out.println("\n Introduce el nombre del disco más vendido ");
                 disco = entrada.recogerString();
                 
                 nuevaLista.añadirCantante(nombre,disco);
                 semaforo = true;
                 nuevaLista.imprimirArray();
                 
                }
               
            }while(opcion == 's' || semaforo == false);
           
    }
   
}

353
Buenas Toni, como siempre gracias.

Imaginaba que lo de public o private venía dado por el método, ya me lo confirmas y me quito la duda.

Sobre clases reutilizables, de momento intento hacerlo todo de nuevo, para practicar y por eso quizá cambian de un ejercicio a otro.

Lo de pedir añadir nuevo yo quise hacer un menu, donde se pueden añadir tantos como quieran, pero si que es cierto, que se pedía añadir uno sí o sí y mi código no lo contempla, permite salirse sin añadir, lo retocaré para cumplir lo solicitado.

Gracias Toni tus comentarios de apoyo me animan a seguir.

MODIFICO, aquí va la clase Gestor que obliga a añadir mínimo un cantante para poder salir de la aplicación. Gracias, en el futuro respetaré primero lo que pide exactamente. Al final es lo capital.

Código: [Seleccionar]
public class GestorLista{

    public static void main(String[] args){
        boolean añadirNombre = false;  //boolean que asegura que se ha añadido un cantante mínimo.
        boolean semaforo = false;
        ListaCantantesFamosos lista = new ListaCantantesFamosos(); //creamos nuevo Objeto ListaCantantesFamosos

        lista.imprimirCantantes();

        System.out.println(" \n Estos son los cantantes actuales de la Lista de Cantantes Famosos \n");

        while (semaforo == false){
           
            System.out.println("\n Elige que operacion deseas realizar indicando el número: \n\n 1.- Añadir nuevo cantante \n 2.- Mostrar lista cantantes \n 3.- Salir \n");

            RecogerDatos entrada = new RecogerDatos();

            switch(entrada.recogerNumero() ){
                case 1: { lista.añadirCantante(entrada.recogerNombre()); añadirNombre = true;   break; }
                case 2: { lista.imprimirCantantes(); break; }
                case 3: { if(añadirNombre == true){ semaforo = true; break;}else { System.out.println("Debes añadir por lo menos un nuevo cantante para poder salir"); } }
            } //final switch
        } // final while
    } //final main
}



354
Buenas aquí va la solución de mi ejercicio.

Tengo una pregunta que igual es una tonteria, dentro de los métodos, las variables que se creas solo para el metodo no debe indicarse que son private, public, etc... (lo intenté y me dió error) entiendo porque ya declaramos como public el propio metodo o private.?

Clase ListaCantantesFamosos

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

public class ListaCantantesFamosos{
   
    private ArrayList<String> listado = new ArrayList<String>(); //creado Arraylist listado
   
    public ListaCantantesFamosos(){ //constructor sin parametros
       
        // añado 3 Strings a listado
        listado.add("Sean Paul"); listado.add("Bonney M"); listado.add("Michael Jackson");
    }
   
    public void añadirCantante(String nombre){ listado.add(nombre); }  //método para añadir nombres
   
    public void imprimirCantantes(){
        for(String nombre: listado){ System.out.println(nombre); }
    } //método imprimir lista con bucle for extendido
       
    }

Clase RecogerDatos

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

public class RecogerDatos{

    public RecogerDatos(){ /*vacio*/ }

    public int recogerNumero(){  //recojo datos numéricos
        boolean semaforo = false;
        int numero=0;

        while(semaforo == false){

            Scanner escaner = new Scanner(System.in);
            try {
                numero = escaner.nextInt(); 

                switch(numero){  // solo se permite introducir el 1,2 o 3 para lo demas vuelve a pedir valor
                    case 1: 
                    case 2: 
                    case 3: { semaforo = true; break; }
                    default: { System.out.println("Solo números 1,2 o 3 son válidos"); }
                }
            } catch (InputMismatchException e){ System.out.println("Solo números 1,2 o 3 son válidos"); }
        }
        return numero;
    }  //final del método recogerNumeros       

    public String recogerNombre(){  //recojo datos String
        String nombre;
       
        do{
            System.out.print ("\n Introduzca el nombre del nuevo cantante \n");
            Scanner escaner = new Scanner(System.in);
            nombre = escaner.nextLine();
        }while(nombre.length() < 1); //no he sido capaz esta vez que con (nombre == "") pidiera de nuevo datos   
       
        return nombre;
    }

}

Clase GestorLista (Main)

Código: [Seleccionar]
public class GestorLista{

    public static void main(String[] args){

        boolean semaforo = false;
        ListaCantantesFamosos lista = new ListaCantantesFamosos(); //creamos nuevo Objeto ListaCantantesFamosos

        lista.imprimirCantantes();

        System.out.println(" \n Estos son los cantantes actuales de la Lista de Cantantes Famosos \n");

        while (semaforo == false){

            System.out.println("\n Elige que operacion deseas realizar indicando el número: \n\n 1.- Añadir nuevo cantante \n 2.- Mostrar lista cantantes \n 3.- Salir \n");

            RecogerDatos entrada = new RecogerDatos();

            switch(entrada.recogerNumero() ){
                case 1: { lista.añadirCantante(entrada.recogerNombre()); break; }
                case 2: { lista.imprimirCantantes(); break; }
                case 3: { semaforo = true; break;}
            } // final switch
        } //final while
    } // final main
}

355
Si Toni, la verdad que si se tuviera que programar todas esas Clases y métodos ... buscar en la biblioteca es fundamental veo si.

Gracias.

356
Buenas noches, aquí va mi respuesta al ejercicio.

Comentar que hice 3 clases, una EntradaDatos otra ListaCantantesFamosos y el main GestorLista.

En el main pido numero de introducciones de cantantes, para no limitarlo a dos, controlo la excepción numerica en un metodo de EntradaDatos.
Hace todo lo que pide el ejercicio por lo demás.

Por cierto Toni, recordé tu comentario sobre que podiamos utilizar el mismo objeto Scanner tantas veces como hiciera falta, pues al recoger datos del mismo, queda de nuevo "vacio". Gracias muy útil lo que comentas como siempre.

Clase ListaCantantesFamosos

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

public class ListaCantantesFamosos{
    //Atributos clase, un nombre de la lista (podria ser POP, ROCK o General) y un array con los cantantes
    private String nombreTabla = "";
    private ArrayList<String> tablaFamosos;

    //Constructor
    public ListaCantantesFamosos(String valorNombreTabla){
        nombreTabla = valorNombreTabla;
        tablaFamosos = new ArrayList<String>();
        añadirNombre("Julio Iglesias"); añadirNombre("David Bisbal"); añadirNombre("Chenoa");
    }

    //Añadir nombre   
    public void añadirNombre(String nombre){
        tablaFamosos.add(nombre);}

    //Extraer nombres
    public String recuperarNombre(int indice){ return tablaFamosos.get(indice); }

    //Imprimir la lista tablaFamosos
    public void imprimirLista(){
        for(int x = 0;x < tablaFamosos.size(); x++){
            System.out.println("Famoso "+ nombreTabla+ " " + (x+1) + ": " + recuperarNombre(x));
        }
    }
} //cierre clase


Clase EntradaDatos

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

public class EntradaDatos {

    public EntradaDatos(){ /*vacío*/ }

    public String recogerString(){
        String nombre1;

        Scanner escaner = new Scanner(System.in);
        nombre1 = escaner.nextLine();
        return nombre1;
    } //final metodo recogerString

    public int recogerEntero(){
        int numero = 0; boolean semaforo = false;

        while(semaforo == false){ 
            semaforo = true; //pongo semaforo a true para que salga del while a no ser que entre en Excepcion
            try {
                Scanner escaner = new Scanner(System.in);
                numero = escaner.nextInt();

            } //final try
            catch (InputMismatchException ex)
            {
                System.out.println(" Has introducido un dato erroneo, introduce un número porfavor ");
                semaforo = false;
            } //final catch
        } //final while

        return numero;
    } //final método recogerEntero

} //final clase
   

Clase GestorLista

Código: [Seleccionar]
public class GestorLista{

    public static void main(String[] args){
        int cantidadAñadir;
        EntradaDatos entrada1 = new EntradaDatos(); //inicializo entrada de datos

        System.out.println("De que tipo de música quieres crear la nueva lista?");

        //Inicializamos la nueva lista de cantantes con el nombre de la clase de música indicado
        ListaCantantesFamosos lista1 = new ListaCantantesFamosos(entrada1.recogerString());

        System.out.println("Indica el número de cantantes nuevos que quieres añadir");
        cantidadAñadir = entrada1.recogerEntero();

        for(int x=0; x < cantidadAñadir; x++){
            System.out.println("Introduce el nombre de un cantante");

            lista1.añadirNombre(entrada1.recogerString() );
        } //final for

        lista1.imprimirLista();
    } //final main
} //final clase


357
Buenas tardes, ahí van las soluciones.

Consulta la clase Stack en el API de Java.

¿Cómo se llama el método para consultar el objeto en la cima de la pila?

peek()

¿Cómo se llama el método para consultar si la pila está vacía?

empty()

¿El método pop podríamos clasificarlo como tipo procedimiento, como tipo función, o como tipo mixto (procedimiento y función)?

Yo pienso que es mixto, teniendo en cuenta que elimina del stack el objeto que esta más arriba pero como return devuelve ese mismo objeto.

358
Buenas noches, estas son mis respuestas, a riesgo de equivocarme totalmente.

 Considera una clase Java que se denomina TripulacionAvion y que tiene como atributos a tres objetos de tipo Persona: Persona piloto; Persona copiloto1; Persona copiloto2.

a) ¿Sería posible que al crear un objeto TripulacionAvion se produjera que piloto, copiloto1 y copiloto2 apuntaran a un mismo objeto, es decir, que existiera una relación de identidad entre los tres atributos?

Respuesta Si. Sería algo asi como:
Código: [Seleccionar]
public TripulacionAvion(){
piloto = new Persona();
copiloto1 = piloto;
copiloto2 = piloto;
}

b) ¿Existiría relación de identidad cuando creemos un objeto TripulacionAvion entre los tres atributos si no se inicializaran en el constructor?

Respuesta No, si no los inicializamos estaria el espacio reservado para 3 atributos persona (creo) sin apuntador ni contenido.

c) ¿Cuál sería el contenido de los atributos si no se inicializan en el constructor y creamos un objeto de tipo TripulacionAvion?

Respuesta El contenido seria desconocido o null si solo se declaran pero no inicializan.


359
Gracias Toni como siempre. Si he intentado usar filosofia Java, aunque poco elaborada jeje.

Si, conozco la diferencia (creo), "" vacio y null, desconocido, basicamente o indefinible.

Mi pregunta es, no es considerado chapucero usar las excepciones en tu favor digamos.. aunque en ese caso, no tenía otra solucion, a no ser replantear el ejercicio como hice en el segundo caso.

360
Buenas, entrego dos soluciones de este ejercicio.

La razón es porque en la primera queria comparar un substring con null o "vacio" y buscando no existe forma, lanza excepción cuando los parametros no están entre el tamaño del substring. Y planteé otra solución a esa.

Primera Solucion con Excepcion.

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

public class Comparador{

    public static void main (String[] args){

        String palabra1; String palabra2; String comprobar;
        int menorPalabra = 1;  //por defecto la palabra menor es la 1era si el if no lo cambia se quedará así
        int longitud = 0;

        System.out.println("Introduce la primera palabra");
        Scanner entrada1 = new Scanner(System.in);
        palabra1 = entrada1.next();   //utilizo el next() para descartar los espacios solo coje primera palabra

        System.out.println("Introduce la segunda palabra");
        Scanner entrada2 = new Scanner(System.in);
        palabra2 = entrada2.next();
         
        // Compruebo si la palabra 2 es mas larga que la primera o no, para ponerlo en el bucle for como limite.
         
         if(palabra2.length()> palabra1.length() ){
            longitud = palabra2.length();
           
        }else { longitud = palabra1.length();
                 menorPalabra = 2;}

        //inicializa a 0 y recorre todos los valores hasta llegar a la longitud menos uno
        for (int x = 0; x < longitud; x++){

            try{
                //if( palabra1.substring(x,x+1)!= null && palabra2.substring(x,x+1) != null ){
                    if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1) ) ){
                        System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? True");
                    }else{ System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? False");}
               // }
            } catch (IndexOutOfBoundsException e) {
                System.out.println("¿Letra " + (x+1) + " igual en las dos palabras? La palabra " +
                    menorPalabra + " no  tiene letra " + (x+1));}
        }
    } 
}

Segunda solución con dos Clases, main y una que analiza (para practicar llamar metodos de otra clase)

Clase main

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

public class Comparador1{
   
    public static void main (String[] args){
        String palabra1; String palabra2;
       
        System.out.println("Introduce la primera palabra");
        Scanner entrada1 = new Scanner(System.in);
        palabra1 = entrada1.next(); //con esta opcion me aseguro que solo recojo una palabra hasta un espacio
       
        System.out.println("Introduce la segunda palabra");
        Scanner entrada2 = new Scanner(System.in);
        palabra2 = entrada2.next();
       
        Analiza compara = new Analiza();
        compara.checkPalabra(palabra1,palabra2);
    }
}

Clase Analiza

Código: [Seleccionar]
public class Analiza{

    public Analiza(){ //vacio
    }

    public void checkPalabra(String palabra1, String palabra2){
       
        // cualMenor es un semáforo que es o 1 o 2 depende cual palabra sea la menor, por defecto se inicializa con 1.
        int cualMenor = 1; int mayor; int menor;

        if(palabra1.length() > palabra2.length() ){
            cualMenor = 2;
            mayor = palabra1.length();
            menor = palabra2.length();
        }else {
            mayor = palabra2.length();
            menor = palabra1.length();
        }

        for(int x = 0; x < mayor;){
            while(x < menor){
                if(palabra1.substring(x,x+1).equals(palabra2.substring(x,x+1)) ){
                    System.out.println("Letra " + (x+1) + " igual en las dos palabras: True");
                }else{
                    System.out.println("Letra " + (x+1) + " igual en las dos palabras: False");
                }
                x++;
            }

            System.out.println("La palabra " + cualMenor + " no tiene letra " + (x+1));
            x++;

        }
    }
}

Páginas: 1 ... 13 14 15 16 17 [18] 19 20

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