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.


Temas - toni_apr

Páginas: 1 [2]
21
EJERCICIO CU00668B preguntas y respuestas.

Responde a las siguientes preguntas.

(1)¿Se puede acceder a un objeto anónimo contenido en un ArrayList?

(2)¿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 (1) Si.

Los objetos dentro de un ArrayList son objetos sin nombre. Y nadie sabe si entraron con nombre o como anónimos. El nombre lo pueden tener antes de introducirlos en el ArrayList, pero una vez dentro, no tienen nombre. La única referencia a un objeto dentro de un ArrayList, es su posición.


Respuesta (2) Si. Ejemplo:

Código: [Seleccionar]
PersonajeMaldito personajeM1, personajeM2, personajeM3; // Declaración de atributos
// inicialización atributos con objetos anónimos de tipo String y MaldadBipolar
personajeM1 = new PersonajeMaldito("Lord Cremor",    new MaldadBipolar("Come corazones",  "Cuelga miserias"));
personajeM2 = new PersonajeMaldito("Lady Westfalia", new MaldadBipolar("Destruye sueños", "Encierra miradas"));
personajeM3 = new PersonajeMaldito("Demon Wii",      new MaldadBipolar("Corta senderos",  "Tuerce destinos"));

// la clase PersonajeMaldito tiene dos atributos uno de tipo String y otro de tipo MaldadBipolar
// la clase MaldadBipolar tiene dos atributos de tipo String

Espero vuestros comentarios. Saludos.

22
Envío ejercicio para practicar con Iterator

Envío 4 clases: TestListaCantantesFamosos clase con main
Código: [Seleccionar]
import java.util.Iterator;
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class TestListaCantantesFamosos {
    // Atributos de la clase TestListaCantantesFamosos

    //Constructor para objetos de la clase TestListaCantantesFamosos
    public TestListaCantantesFamosos() {
        // Inicializa atributos

    } // Fin del constructor TestListaCantantesFamosos

    // Siguen los setters para los atributos de la clase TestListaCantantesFamosos

    // Ahora los getters para los atributos de la clase TestListaCantantesFamosos

    // Y seguidamente, procedimientos y funciones varios.
    public static void main (String [] args) {
        ListaCantantesFamosos listaCF = new ListaCantantesFamosos();
        // Añadiendo dos cantantes famosos nada más entrar
        CantanteFamoso cantanteF = new CantanteFamoso("Madonna","All I want is you");
        listaCF.addCantanteNuevo(cantanteF);
        cantanteF = new CantanteFamoso("Jorge Negrete","Jalisco");
        listaCF.addCantanteNuevo(cantanteF);
        // Muestra elementos ArrayList usando un iterator
        muestraElementos ("\tLa lista inicial contiene los siguientes elementos:",listaCF);
        // A continuación bucle while para añadir cantantes.
        boolean masCantantes = true;
        String cantante = "", disco = "", lectura = "";
        Mensaje mensaje = new Mensaje("",0); // Declaración objeto mensaje. No hace nada en pantalla.
        do {
            mensaje.muestra ("\tPor favor, introduzca los datos de otro cantante.");
            // Crea nuevo cantante famoso
            cantanteF = new CantanteFamoso();
            // Rellena atributos cantante famoso
            cantanteF.setNombre           (mensaje.responde ("Cantante:",0));
            cantanteF.setDiscoConMasVentas(mensaje.responde ("   Disco:",0));
            // Añade cantante famoso al ArrayList
            listaCF.addCantanteNuevo(cantanteF);
            // Muestra elementos ArrayList usando un iterator
            muestraElementos ("\tLa lista actualizada contiene los siguientes datos:",listaCF);
            // Aquí se decide si añadir más cantantes, o no.
            lectura = mensaje.responde ("\t¿Desea introducir los datos de otro cantante (s/n)?",0);
            if (lectura.length() == 0) { masCantantes = false;  // Se ha pulsado INTRO solamente
            } else if (lectura.substring(0,1).
            toUpperCase().equals("S")) {                        // Se ha pulsado "S/s", se pedirá otro cantanteF
            } else {                     masCantantes = false;  // Se ha pulsado cualquier otra cosa
            } // fin del if
        } while (masCantantes);
        System.out.println ("\tFinalizada la gestión de la lista de cantantes con sus canciones.");
    }// fin del main
    // Método que usa iterator para mostrar elementos de un ArrayList
    private static void muestraElementos(String msgParam, ListaCantantesFamosos listaParam) {
        Iterator <CantanteFamoso> it = listaParam.getArrayList().iterator();
        CantanteFamoso tmpCF = new CantanteFamoso();
        Mensaje mensaje = new Mensaje (msgParam);  // Muestra mensaje recibido
        int contador = 0,  largoNombre = 0;
        String msg = "";
        while (it.hasNext()) {                     // Bucle recorriendo Iterator
            tmpCF = it.next();
            msg = (++contador + "º Cantante: " + tmpCF.getNombre());
            largoNombre = msg.length();
            mensaje.muestra (msg + rellenaEspacios(40 - largoNombre) +
                " Disco con más ventas: " + tmpCF.getDiscoConMasVentas());
        } // fin del while
    } // fin de muestraElementos
    // Método para alinear texto en pantalla añadiendo caracteres
    private static String rellenaEspacios (int numero) {
        String respuesta = "";
        for (int i = 0; i < numero; i++) { respuesta = respuesta + "."; }
        return respuesta;
    } // fin de espaciosEnBlanco
} // Fin de la clase TestListaCantantesFamosos
Clase ListaCantantesFamosos, gestiona un ArrayList de objetos
Código: [Seleccionar]
import java.util.ArrayList;
/**
 * Detalles de la clase.
 * Único atributo, ArrayList listaCantantesFamosos que gestiona lista de objetos CantanteFamoso.
 * @author (Toni)
 * @version (0)
 */
public class ListaCantantesFamosos {

    // Atributos de la clase ListaCantantesFamosos
//     CantanteFamoso cantanteAGestionar;
    private ArrayList <CantanteFamoso> listaCantantesFamosos;

    /**
     * Constructor para objetos de la clase ListaCantantesFamosos
     */
    public ListaCantantesFamosos() { //(CantanteFamoso miCantante) {
        // Inicializa atributos
//         cantanteAGestionar = miCantante;
        listaCantantesFamosos = new ArrayList <CantanteFamoso>();
    } // Fin del constructor ListaCantantesFamosos

    // Siguen los setters para los atributos de la clase ListaCantantesFamosos
    public void addCantanteNuevo (CantanteFamoso cantanteF) {
        listaCantantesFamosos.add (cantanteF);
    }
    // Ahora los getters para los atributos de la clase ListaCantantesFamosos
    public CantanteFamoso getCantanteDeLaLista (int posicion) {
        if (posicion >= 0 && posicion < listaCantantesFamosos.size()) {
            return listaCantantesFamosos.get(posicion);
        } else {
            return null;
        }
    }
    public ArrayList<CantanteFamoso> getArrayList () { return listaCantantesFamosos; }
    // Y seguidamente, procedimientos y funciones varios.
    public int getTamañoLista () {  return listaCantantesFamosos.size(); }

    public CantanteFamoso removeCantanteDeLaLista (int posicion) {
        if (posicion >= 0 && posicion < listaCantantesFamosos.size()) {
            return listaCantantesFamosos.remove(posicion);           //remove OK
        } else {
            return null;                                             // remove KO
        }// fin del if
    }// fin del remove...
} // Fin de la clase ListaCantantesFamosos
Clase CantanteFamoso, crea objetos con dos atributos String.
Código: [Seleccionar]
/**
 * Detalles de la clase.
 * El objeto de tipo CantanteFamoso tiene dos atributos de tipo String: nombre y discoConMasVentas.
 * @author (Toni)
 * @version (0)
 */
public class CantanteFamoso {
    // Atributos de la clase CantanteFamoso
    private String nombre;
    private String discoConMasVentas;
    //Constructor para objetos de la clase CantanteFamoso
    public CantanteFamoso() {                                       // Constructor sin parámetros
       nombre = "";
       discoConMasVentas = "";
    }
   
    public CantanteFamoso(String nombre, String discoConMasVentas) {// Constructor con parámetros
        // Inicializa atributos
        this.nombre = nombre;
        this.discoConMasVentas = discoConMasVentas;
    } // Fin del constructor CantanteFamoso

    // Siguen los setters para los atributos de la clase CantanteFamoso
    public void setNombre (String nombre)                       { this.nombre = nombre; }

    public void setDiscoConMasVentas (String discoConMasVentas) { this.discoConMasVentas = discoConMasVentas; }
    // Ahora los getters para los atributos de la clase CantanteFamoso
    public String getNombre ()                                  { return nombre; }

    public String getDiscoConMasVentas ()                       { return discoConMasVentas; }
    // Y seguidamente, procedimientos y funciones varios.

} // Fin de la clase CantanteFamoso
Clase Mensaje, envia mensajes a pantalla y devuelve entradas de teclado.
Código: [Seleccionar]
import java.util.Scanner;
/**
 * Detalles de la clase. El método presenta mensajes por pantalla... y devuelve entradas de teclado.
 * @author (Toni)
 * @version (0)
 */
public class Mensaje { // Atributos de la clase Mensaje
    private String texto;
    private int valor;
    /**
     * Mostrará el texto con salto de línea final.
     */
    public Mensaje (String frase) { //Constructor 1 parámetro para objetos de la clase Mensaje. Inicializa atributos
        texto = frase;
        valor = 1;
        muestra (texto, valor);
    }

    /**
     * Valores param:
     * 0 = Sin salto de línea.
     * 1, u otro valor = Con salto de línea.
     */ 
    public Mensaje (String frase, int param) {
        texto = frase;
        valor = param;
        muestra (texto, valor);
    }
    // Siguen los setters para los atributos de la clase Mensaje
    public void setTexto (String texto) { this.texto = texto; }

    public void setValor (int valor)    { this.valor = valor; }
    // Ahora los getters para los atributos de la clase Mensaje
    public String getTexto ()           { return texto; }

    public int getValor ()              { return valor; }

    // Y seguidamente, procedimientos y funciones varios.
    /**
     * Mostrar el texto con salto de línea (sin segundo parámetro)
     */   
    public void muestra (String frase) {
        muestra (frase, 1);
    }// fin de muestra 1 parámetro

    /**
     * Valores param:
     * 0 = Sin salto de línea.
     * 1, u otro valor = Con salto de línea.
     */   
    public void muestra (String frase, int param) {
        texto = frase;
        valor = param;
        if (valor == 0) { System.out.print (texto + " ");
        }          else { System.out.println (texto); }
    }// fin de muestra 2 parámetros

    /**
     * Sin segundo parámetro el mensaje incluirá salto de línea. Devuelve entrada de teclado
     */
    public String responde (String frase) {
        return responde (frase, 1);
    }// fin de responde 1 parámetro

    /**
     * Valores param:
     * 0 = Sin salto de línea + entrada por teclado.
     * 1, u otro valor = Con salto de línea + entrada por teclado.
     */
    public String responde (String frase, int param) {
        texto = frase;
        valor = param;
        muestra (texto, valor);
        Scanner entradaEscaner = new Scanner(System.in);
        return entradaEscaner.nextLine();
    }// fin de responde 2 parámetros
} // Fin de la clase Mensaje

En este ejercicio, me he dado de bruces varias veces con Iterator.
En una clase me iba bien, y en otra no. No entendía porque.
Al final caí en la cuenta, al final me ha entrado en la cabeza.
Yo intentaba ligar el objeto que crea la clase ListaCantantesFamosos con iterator(), cuando debía ligar el atributo de la clase (un ArrayList) con el iterator().
Me costó, pero ahora creo que no se me olvida.

Espero vuestros comentarios.
Saludos.

23
Hola, presento aquí el ejercicio de la lección CU00666B
Citar
EJERCICIO
Crea una clase denominada ListaCantantesFamosos que al ser inicializada contenga un ArrayList con
tres Strings que sean el nombre de cantantes famosos. Crea una clase test con el método main que
inicialice un objeto ListaCantantesFamosos y usando un for extendido muestre los cantantes en la lista
por pantalla. Se debe pedir al usuario un nombre más de cantante famoso, y una vez introducido
mostrar la lista actualizada usando un for extendido. Una vez mostrada la lista actualizada, se debe dar
opción a elegir entre volver a introducir otro cantante o salir del programa (se podrán introducir tantos
cantantes como se desee, para ello usa un bucle while que dé opción a elegir al usuario).
Ejercicio formado por 3 clases:
Clase TestCantantes con main
Código: [Seleccionar]
import java.lang.Iterable;
/**
 * Detalles de la clase.
 * Crea un objeto del tipo ListaCantantesFamosos y edita su contenido.
 * @author (Toni)
 * @version (0)
 */
public class TestCantantes {

    // Atributos de la clase TestCantantes

    /**
     * Constructor para objetos de la clase TestCantantes
     */
    public TestCantantes() {
        // Inicializa atributos

    } // Fin del constructor TestCantantes

    // Siguen los setters para los atributos de la clase TestCantantes

    // Ahora los getters para los atributos de la clase TestCantantes

    // Y seguidamente, procedimientos y funciones varios.
    public static void main (String [] args) {
        // listaCF nuevo objeto ListaCantantesFamosos.
        ListaCantantesFamosos listaCF = new ListaCantantesFamosos("Nombre Cantante");
        // mensaje presentará mensajes o/y pedirá entradas por teclado.
        Mensaje mensaje = new Mensaje("\tSe ha creado una lista de cantantes.\n\tCon los " + listaCF.getTamañoLista() + " elementos siguientes:");
        listaCF.presentaElementos();

        String lectura = "";              // Texto introducido por teclado
        boolean quieresContinuar = true;  // Controla la condición del while principal
        boolean presentarMenu = true;     // Controla el while anidado
        boolean seHaEliminado = false;    // Si se elimina un elemento, será true
        int elemento = -1;                // Número del elemento a eliminar
        do {                              // Bucle para editar la lista de cantantes, while principal
            lectura = mensaje.responde ("\tIntroduzca un nuevo nombre para añadir a la lista.",1);
            listaCF.addNombreNuevo(lectura);   // Añade a la lista
            mensaje.muestra ("La lista con " + listaCF.getTamañoLista() + " elementos, queda como sigue:");
            listaCF.presentaElementos();

            presentarMenu = true;              // Controla el siguiente while anidado
            while (presentarMenu) {            // Este es el menú de opciones
                lectura = mensaje.responde (
                    "\tSi quiere continuar editando la lista pulse:\n" +
                    "\t\"L\" = Elimina último elemento.\n" +
                    "\t\"R\" = Elimina cualquier otro elemento.\n" +
                    "\t\"A\" = Añade nuevo elemento.\n" +
                    "\tCualquier otra tecla para salir.",1);
                if (lectura.length() == 0)  {  // Se ha pulsado INTRO solamente
                    presentarMenu = false;     // Salir del while anidado
                    quieresContinuar = false;  // Salir del while principal
                } else if (lectura.substring(0,1).toUpperCase().equals("L")) {          // Eliminar último elemento de la lista
                    seHaEliminado = listaCF.removeNombreDeLaLista(listaCF.getTamañoLista() - 1);
                    listaCF.presentaElementos();

                    if (seHaEliminado) { mensaje.muestra ("\tEliminada la última entrada de la lista."); }
                    else               { mensaje.muestra ("\tLa lista no tiene elementos. No se puede eliminar nada."); }
                } else if (lectura.substring(0,1).toUpperCase().equals("R")) {           // Escoger el elemento a eliminar
                    lectura = mensaje.responde ("\tPor favor.\nIntroduzca el número del elemento que quiere borrar:",0);
                    elemento = Integer.parseInt(lectura);
                    seHaEliminado = listaCF.removeNombreDeLaLista(elemento - 1);
                    listaCF.presentaElementos();

                    if (seHaEliminado) { mensaje.muestra ("\tEl elemento " + elemento + " ha sido eliminado con éxito."); }
                    else               { mensaje.muestra ("\tEl elemento " + elemento + " no se ha podido eliminar."); }
                } else if (lectura.substring(0,1).toUpperCase().equals("A")) {             // Continua pidiento entradas.
                    presentarMenu = false;    // Salir del while anidado
                } else {                      // Se ha pulsado cualquier otra cosa distinta. Salimos.
                    presentarMenu=false;      // Salir del while anidado
                    quieresContinuar = false; // Salir del while principal
                }                             // Fin del if
            }                                 // Fin while anidado presentarMenu
        } while (quieresContinuar);           // Fin del while principal quieresContinuar
        mensaje.muestra ("\tHemos salido de la lista de cantantes.\n\tGracias por su atención.");
    }                                         // Fin del main
}                                             // Fin de la clase TestCantantes
Clase ListaCantantesFamosos, crea un ArrayList con los cantantes introducidos.
Código: [Seleccionar]
import java.util.ArrayList;
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class ListaCantantesFamosos {

    // Atributos de la clase ListaCantantesFamosos
    private String nombreDeLaLista;
    private ArrayList<String> lista_de_cantantes;

    /**
     * Constructor para objetos de la clase ListaCantantesFamosos
     */
    public ListaCantantesFamosos(String nombreCantante) {
        // Inicializa atributos
        nombreDeLaLista = nombreCantante;
        lista_de_cantantes = new ArrayList<String>();//Crea el objeto ArrayList con el tamaño por defecto
        //Estos tres cantantes siempre figurarán en la lista.
        addNombreNuevo("Sabina");
        addNombreNuevo("Madonna");
        addNombreNuevo("Julio Iglesias");
    } // Fin del constructor ListaCantantesFamosos

    // Siguen los setters para los atributos de la clase ListaCantantesFamosos

    // Ahora los getters para los atributos de la clase ListaCantantesFamosos

    // Y seguidamente, procedimientos y funciones varios.
    public void addNombreNuevo (String valorNombre) { lista_de_cantantes.add (valorNombre); }

    public String getNombreDeLaLista (int posicion) {
        if (posicion >= 0 && posicion < lista_de_cantantes.size()) {
            return lista_de_cantantes.get(posicion);
        } else {
            return "No hay ningún nombre en la posición: " + posicion;
        }
    }// fin del get
    public int getTamañoLista () { return lista_de_cantantes.size(); }

    public boolean removeNombreDeLaLista (int posicion) {
        if (posicion >= 0 && posicion < lista_de_cantantes.size()) {
            lista_de_cantantes.remove(posicion);
            return true;//remove OK
        } else {
            return false; // remove KO
        }
    }// fin del remove...
    /**
     * Presenta elementos del ArrayList usando un 'for extendido'
     */
    public void presentaElementos() {
        int i = 0;
        for (String nombre: lista_de_cantantes) {
            System.out.println ("Elemento " + (++i) + ": " + nombre);
        }
        if (i == 0) { System.out.println ("Sin elementos. Lista vacía."); }
    }// fin del presentaElementos
} // Fin de la clase ListaCantantesFamosos
Clase Mensaje, presenta mensajes en pantalla o/y devuelve entradas de teclado.
Código: [Seleccionar]
import java.util.Scanner;
/**
 * Detalles de la clase. El método presenta mensajes por pantalla... y devuelve entradas de teclado
 * @author (Toni)
 * @version (0)
 */
public class Mensaje { // Atributos de la clase Mensaje
    private String texto;
    private int valor;
    /**
     * Mostrará el texto con salto de línea final.
     */
    public Mensaje (String frase) { //Constructor 1 parámetro para objetos de la clase Mensaje. Inicializa atributos
        texto = frase;
        valor = 1;
        muestra (texto, valor);
    }

    /**
     * Valores param:
     * 0 = Sin salto de línea.
     * 1, u otro valor = Con salto de línea.
     */ 
    public Mensaje (String frase, int param) {
        texto = frase;
        valor = param;
        muestra (texto, valor);
    }
    // Siguen los setters para los atributos de la clase Mensaje
    public void setTexto (String texto) { this.texto = texto; }

    public void setValor (int valor)    { this.valor = valor; }
    // Ahora los getters para los atributos de la clase Mensaje
    public String getTexto ()           { return texto; }

    public int getValor ()              { return valor; }

    // Y seguidamente, procedimientos y funciones varios.
    /**
     * Mostrar el texto con salto de línea (sin segundo parámetro)
     */   
    public void muestra (String frase) {
        muestra (frase, 1);
    }// fin de muestra 1 parámetro

    /**
     * Valores param:
     * 0 = Sin salto de línea.
     * 1, u otro valor = Con salto de línea.
     */   
    public void muestra (String frase, int param) {
        texto = frase;
        valor = param;
        if (valor == 0) { System.out.print (texto + " ");
        }          else { System.out.println (texto); }
    }// fin de muestra 2 parámetros

    /**
     * Sin segundo parámetro el mensaje incluirá salto de línea. Devuelve entrada de teclado
     */
    public String responde (String frase) {
        return responde (frase, 1);
    }// fin de responde 1 parámetro

    /**
     * Valores param:
     * 0 = Sin salto de línea + entrada por teclado.
     * 1, u otro valor = Con salto de línea + entrada por teclado.
     */
    public String responde (String frase, int param) {
        texto = frase;
        valor = param;
        muestra (texto, valor);
        Scanner entradaEscaner = new Scanner(System.in);
        return entradaEscaner.nextLine();
    }// fin de responde 2 parámetros
} // Fin de la clase Mensaje
Ya me habéis dicho que hago los mains recargados. Si, lo reconozco. Pero es que quiero que hagan cosas y necesito cargarlos.
Pregunta: ¿Sería preferible desglosar el main en varios métodos aunque eso implicara más líneas de código en la clase?

Como siempre, apreciaré vuestros consejos.

Saludos

24
Hola. Presento ejercicio propuesto por César Krall "Moderador Global"
Una clase con main que usa dos clases accesorias "ManejadorDeVocales" y "ComparadorLetraALetra"
Ejercicio con el propósito de conducir el código a la Programación Orientada a Objetos.
Aquí envio 4 clases:

"Test2Texto"
Código: [Seleccionar]
/**
 * Detalles de la clase.
 * Clase con método main
 * @author (Toni)
 * @version (0)
 */
public class Test2Texto {
    // Atributos de la clase Test2Texto

    //Constructor para objetos de la clase Test2Texto
    public Test2Texto() {
        // Inicializa atributos

    } // Fin del constructor Test2Texto

    // Siguen los setters para los atributos de la clase Test2Texto

    // Ahora los getters para los atributos de la clase Test2Texto

    // Y seguidamente, procedimientos y funciones varios.
    public static void main (String [] args) {
        System.out.println ("Este es un test para trabajar con cadenas de texto introducidas por teclado.");
        String lectura = "";
        do {
            System.out.println ("Hay dos test disponibles. Escoja un número por favor:\n\t" +
                "1. Comparar dos cadenas letra a letra.\n\t2. Contar caracteres dentro de una frase.\n\tPulsar (ENTER) para terminar.");
            lectura = entradaATexto();
            if (lectura.length() == 0) {
                // saliendo
            } else if (lectura.substring(0,1).equals("1")) {
                miComparador();
            } else if (lectura.substring(0,1).equals("2")) {
                miContador();
            } else {
                System.out.println ("Opción inválida. Escoja otra vez por favor.");
            }
        } while (lectura.length() > 0);
        System.out.println ("\tFinalizado el test múltiple.");
    }// fin del main

    private static void miContador() {
        System.out.println ("Introducir el texto a inspeccionar.");
        String lectura = entradaATexto();
        ManejadorDeVocales texto = new ManejadorDeVocales(lectura);   
        do {
            System.out.println ("\tPara ver las estadísticas del texto, pulsar:\n" +
                "Una tecla cualquiera, \" \" (espacio) para ver toda la información recopilada, o (ENTER) para terminar.");
            lectura = entradaATexto();
            if (lectura.length() == 0) {
                //salir
            } else {
                if (!lectura.substring(0,1).equals(" ")) {texto.setCaracterVar(lectura); }
                texto.estadisticaLetras (lectura); // muestra estadísticas
            }
        } while (lectura.length() > 0);
        System.out.println ("Finalización de la consulta de caracteres para la frase:\n\t\"" + texto.getTexto() + "\"");
    }// fin de miContador

    private static void miComparador() {
        String lectura = "", entrada1 = "", entrada2 = "";
        boolean repetir = false;
        System.out.println ("Vamos a comparar dos cadenas de texto letra a letra.");
        do {
            System.out.println ("Introduzca la primera cadena, por favor.");
            lectura = entradaATexto();
            if (lectura.length() == 0) {
                repetir = true;
                System.out.println ("La entrada introducida no tiene contenido. Debe introducir algún texto.");
            } else {
                entrada1 = lectura;
                repetir = false;
            }
        } while (repetir);
        do {
            System.out.println ("Introduzca la segunda cadena, por favor.");
            lectura = entradaATexto();
            if (lectura.length() == 0) {
                repetir = true;
                System.out.println ("Entrada vacía. Debe introducir algún texto. Se pueden comparar cadenas vacías, pero no es divertido.");
            }else {
                entrada2 = lectura;
                repetir = false;
            }
        } while (repetir);
        ComparadorLetraALetra comparaYa = new ComparadorLetraALetra(entrada1, entrada2);
        comparaYa.resultadoDeLaComparacion();
        System.out.println ("\tFinalizada la comparación, vamos a otra cosa.");
    }

    private static String entradaATexto() {
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        return entrada.getEntrada();
    }
} // Fin de la clase Test2Texto

"ManejadorDeVocales"
Código: [Seleccionar]
/**
 * Detalles de la clase.
 * Destripa el texto aportado en vocales, pulsación variable y resto de caracteres.
 * @author (Toni)
 * @version (0)
 */
public class ManejadorDeVocales {
    // Atributos de la clase ManejadorDeVocales
    private int numA, numE, numI, numO, numU, numVocales;
    private int numVar, numResto, numTotal;
    private String caracterVar;
    private String texto;
    //Constructor para objetos de la clase ManejadorDeVocales
    public ManejadorDeVocales(String texto) {
        // Inicializa atributos
        numA = 0; numE = 0; numI = 0; numO = 0;  numU = 0;  numVocales = 0;
        numVar = 0; numResto = 0;
        this.texto = texto;
        caracterVar = " ";
        numTotal = texto.length();
        cuentaLetras();
    } // Fin del constructor ManejadorDeVocales

    // Siguen los setters para los atributos de la clase ManejadorDeVocales
    /**
     * Establece el texto a manejar.
     */
    public void setTexto (String texto) {
        this.texto = texto;
        cuentaLetras();
    }
    /**
     * Método para establecer el carácter a inspeccionar.
     */
    public void setCaracterVar (String caracterVar) {
        this.caracterVar = caracterVar;
        cuentaLetras();
    }
    // Ahora los getters para los atributos de la clase ManejadorDeVocales
    public String getCaracterVar () { return caracterVar; }

    public String getTexto () { return texto; }

    public int getNumA () { return numA; }

    public int getNumE () { return numE; }

    public int getNumI () { return numI; }

    public int getNumO () { return numO; }

    public int getNumU () { return numU; }

    public int getNumVocales () { return numVocales; }

    public int getNumVar () { return numVar; }

    public int getNumResto () { return numResto; }

    public int getNumTotal () { return numTotal; }
    // Y seguidamente, procedimientos y funciones varios.
    /**
     * Médoto contador de letras.
     */
    private void cuentaLetras () {
        String letra = "";
        inicializaContadores();
        for (int i = 0; i < numTotal; i++) {
            letra = texto.substring(i,i+1).toUpperCase();
            if (letra.equals("A")) {
                numA ++; numVocales ++;
            } else if (letra.equals("E")) {
                numE ++; numVocales ++;
            } else if (letra.equals("I")) {
                numI ++; numVocales ++;
            } else if (letra.equals("O")) {
                numO ++; numVocales ++;
            } else if (letra.equals("U")) {
                numU ++; numVocales ++;
            } else if (letra.equals(caracterVar.substring(0,1).toUpperCase())) {
                numVar ++;
            } else {
                numResto ++;
            }// fin del if
        }//fin del for
    }//fin del cuentaLetras
    /**
     * Método para presentar resultados estadísticos...
     */
    public void estadisticaLetras(String valor) {
        if (valor.substring(0,1).toUpperCase().equals("A")) {//detecta la A
            grafismo("A");
            System.out.println ("Vocal A = \t" + numA + " veces. \t" + perCent(numA) + "%");
        } else if (valor.substring(0,1).toUpperCase().equals("E")) {//detecta la E
            grafismo("E");
            System.out.println ("Vocal E = \t" + numE + " veces. \t" + perCent(numE) + "%");
        } else if (valor.substring(0,1).toUpperCase().equals("I")) {//detecta la I
            grafismo("I");
            System.out.println ("Vocal I = \t" + numI + " veces. \t" + perCent(numI) + "%");
        } else if (valor.substring(0,1).toUpperCase().equals("O")) {//detecta la O
            grafismo("O");
            System.out.println ("Vocal O = \t" + numO + " veces. \t" + perCent(numO) + "%");
        } else if (valor.substring(0,1).toUpperCase().equals("U")) {//detecta la U
            grafismo("U");
            System.out.println ("Vocal U = \t" + numU + " veces. \t" + perCent(numU) + "%");
        } else if (valor.substring(0,1).equals(" ")) {
            if (numA > 0) { System.out.println ("Vocal A = \t" + numA + " veces. \t" + perCent(numA) + "%"); }
            if (numE > 0) { System.out.println ("Vocal E = \t" + numE + " veces. \t" + perCent(numE) + "%"); }
            if (numI > 0) { System.out.println ("Vocal I = \t" + numI + " veces. \t" + perCent(numI) + "%"); }
            if (numO > 0) { System.out.println ("Vocal O = \t" + numO + " veces. \t" + perCent(numO) + "%"); }
            if (numU > 0) { System.out.println ("Vocal U = \t" + numU + " veces. \t" + perCent(numU) + "%"); }
            System.out.println ("Suma vocales = \t" + numVocales + " letras. \t" + perCent(numVocales) + "%");
            if (numVar > 0) { System.out.println ("Tecla \"" + caracterVar.substring(0,1) + "\" = \t" + numVar + " veces. \t" + perCent(numVar) + "%"); }
            System.out.println ("Resto letras = \t" + numResto + " letras. \t" + perCent(numResto) + "%");
            System.out.println ("Total = \t" + numTotal + " letras. \t" + perCent(numTotal) + "%");
        } else {
            grafismo(caracterVar.toUpperCase().substring(0,1));
            System.out.println ("Tecla \"" + caracterVar.substring(0,1) + "\" = \t" + numVar + " veces. \t" + perCent(numVar) + "%");
        }//fin del if 
    }// fin de estadisticas
    // porcentaje de los valores.
    private  double perCent(int valor) {
        return (double)(valor * 1000 / numTotal) / 10;
    }

    private void inicializaContadores() {
        numA = 0; numE = 0; numI = 0; numO = 0;  numU = 0;  numVocales = 0;
        numVar = 0; numResto = 0;
    }

    // Este método muestra gráficamente la aparición del carácter inspeccionado.
    private void grafismo(String letra) {
        System.out.println (texto);
        String caracter = "";
        for (int i = 0; i < texto.length(); i++) {
            caracter = "-";
            if (texto.substring(i,i+1).toUpperCase().equals(letra)) { caracter = "|"; }
            System.out.print (caracter);
        }
        System.out.println();
    }
} // Fin de la clase ManejadorDeVocales

"ComparadorLetraALetra"
Código: [Seleccionar]
// import java.util.Scanner;
/**
 * Detalles de la clase.
 * Pide dos entradas, y compara letra por letra si son iguales o no.
 * @author (Toni)
 * @version (0)
 */
public class ComparadorLetraALetra {

    // Atributos de la clase ComparadorLetraALetra
    private String cadena1;
    private String cadena2;

    /**
     * Constructor para objetos de la clase ComparadorLetraALetra
     */
    public ComparadorLetraALetra(String cadena1, String cadena2) {
        // Inicializa atributos
        this.cadena1 = cadena1;
        this.cadena2 = cadena2;
    } // Fin del constructor ComparadorLetraALetra

    // Siguen los setters para los atributos de la clase ComparadorLetraALetra
    public void setCadena1 (String cadena1) { this.cadena1 = cadena1; }

    public void setCadena2 (String cadena2) { this.cadena2 = cadena2; }
    // Ahora los getters para los atributos de la clase ComparadorLetraALetra
    public String getCadena1 () { return cadena1; }

    public String getCadena2 () { return cadena2; }
    // Y seguidamente, procedimientos y funciones varios.
    /**
     * Método estrella. Presenta analogías y diferencias carácter a carácter.
     */
    public void resultadoDeLaComparacion () {
        System.out.println ("Vamos a comparar las entradas:\n\t" +
            "1 " + cadena1 + "\t y \t 2 " + cadena2);
        int largoMax = 0;//longitud de la entrada más larga
        int largo1 = cadena1.length();//longitud de la entrada1
        int largo2 = cadena2.length();//longitud de la enttrada2
        if (largo1 > largo2) {
            largoMax = largo1;
        } else {
            largoMax = largo2;
        }//se actualiza largoMax
        int porcion1 = 0, porcion2 = 0;//porción de las entradas que se va a mostrar
        for (int i = 0; i < largoMax; i++){
            if (i < largo1) { porcion1 = i+1;}//actualiza la porción a mostrar
            if (i < largo2) { porcion2 = i+1;}
            System.out.println ("\n¿La letra " + (i+1) + " es igual en las dos entradas?");
            System.out.print ("\t1 -" + cadena1.substring(0,porcion1) + "-\t2 -" +
                cadena2.substring(0,porcion2) + "-\nRespuesta " + (i+1) + ": ");//muestra las dos porciones
            if (largo1 < i+1) {
                System.out.println ("La entrada 1 no tiene letra " + (i+1));
            } else if (largo2 < i+1) {
                System.out.println ("La entrada 2 no tiene letra " + (i+1));
            } else {
                if (cadena1.substring(i,i+1).equals(cadena2.substring(i,i+1))) {
                    System.out.println ("True.");
                } else {
                    System.out.println ("False.");
                }// fin del if anidado
            }//fin del if
        }//fin del for
        System.out.println ("\nFin de la comparación.");
    }// fin de resultado
} // Fin de la clase ComparadorLetraALetra
y "EntradaDeTeclado"
Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class EntradaDeTeclado {

    // Atributos de la clase EntradaDeTeclado
    private String entradaTeclado;

    /**
     * Constructor para objetos de la clase EntradaDeTeclado
     */
    public EntradaDeTeclado() {
        // Inicializa atributos
        entradaTeclado = "";
        pedirEntrada();
    } // Fin del constructor EntradaDeTeclado

    // Siguen los setters para los atributos de la clase EntradaDeTeclado

    // Ahora los getters para los atributos de la clase EntradaDeTeclado

    // Y seguidamente, procedimientos y funciones varios.
    public void pedirEntrada() {
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
    }
/**
 * Método predilecto. Devuelve el texto introducido por teclado.
 */
    public String getEntrada() { return entradaTeclado; }
   
    public int getLongitud() {
        return entradaTeclado.length();
    }// fin dle método
} // Fin de la clase EntradaDeTeclado

Saludos.

25
Envío ejercicios del tipo responder a las preguntas.

Ejercicio CU00663B

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?

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

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

Respuestas:
a) Si, en una aerolínea de bajo coste se podría hacer eso.
Y en nuestra clase, también. Los tres (atributos) pilotos podrían apuntar al mismo (objeto) persona.

Ejemplo con un constructor:

    public TripulacionAvion(Persona piloto) {
        // Inicializa atributos
        this.piloto = piloto;
        copiloto1 = piloto;
        copiloto2 = piloto;
    } // Fin del constructor TripulacionAvion
----------------

b) Respuesta1: Mientras no se inicializen, no puede haber ni identidad (apuntan a la misma dirección), ni igualdad (tienen el mismo contenido).
Respuesta 2: Vaya. Si que puede haber identidad en los atributos, si se asigna en los setters. Pero eso, sería entrar por la puerta trasera.
-----------------

c) El contenido de los tres atributos sería <null> (hecho que ocurre todos los días cuando no se inicializa un atributo.)

---------------
Ejercicio CU00664B

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?.
R:   Es el método peek()

¿Cómo se llama el método para consultar si la pila está vacía?
R:   Es el método empty()

¿El método pop podríamos clasificarlo como tipo procedimiento, como tipo función, o como tipo mixto (procedimiento y función)?
R:   El método pop() es de tipo mixto, puesto que además de devolver el objeto que está encima de la pila, lo elimina de ésta.
----------------------------
Saludos.

26
Seguidamente de la lección CU00662B incluyo el ejercicio propuesto:
Código: [Seleccionar]
import java.util.Scanner;
/**
 * Detalles de la clase.
 * Pide dos entradas, y compara letra por letra si son iguales o no.
 * @author (Toni)
 * @version (0)
 */
public class ComparaLetraPorLetra {

    // Atributos de la clase ComparaLetraPorLetra
    //nada

    /**
     * Constructor para objetos de la clase ComparaLetraPorLetra
     */
    public ComparaLetraPorLetra() {
        // Inicializa atributos
        //nada
    } // Fin del constructor ComparaLetraPorLetra

    // Siguen los setters para los atributos de la clase ComparaLetraPorLetra

    // Ahora los getters para los atributos de la clase ComparaLetraPorLetra

    // Y seguidamente, procedimientos y funciones varios.
    public static void main (String [] args) {
        System.out.println ("Vamos a comparar dos entradas por teclado. Dame la primera.");
        Scanner entradaEscaner = new Scanner(System.in);
        String entrada1 = entradaEscaner.nextLine();
        System.out.println ("Dame la segunda");
        String entrada2 = entradaEscaner.nextLine();
        System.out.println ("Gracias. Vamos a comparar las entradas:\n\t" +
            "1 " + entrada1 + "\t y \t 2 " + entrada2);
        int largoMax = 0;//longitud de la entrada más larga
        int largo1 = entrada1.length();//longitud de la entrada1
        int largo2 = entrada2.length();//longitud de la enttrada2
        if (largo1 > largo2) {
            largoMax = largo1;
        } else {
            largoMax = largo2;
        }//se actualiza largoMax
        int porcion1 = 0, porcion2 = 0;//porción de las entradas que se va a mostrar
        for (int i = 0; i < largoMax; i++){
            if (i < largo1) { porcion1 = i+1;}//actualiza la porción a mostrar
            if (i < largo2) { porcion2 = i+1;}
            System.out.println ("\n¿La letra " + (i+1) + " es igual en las dos entradas?");
            System.out.print ("\t1 -" + entrada1.substring(0,porcion1) + "-\t2 -" +
                entrada2.substring(0,porcion2) + "-\nRespuesta " + (i+1) + ": ");//muestra las dos porciones
            if (largo1 < i+1) {
                System.out.println ("La entrada 1 no tiene letra " + (i+1));
            } else if (largo2 < i+1) {
                System.out.println ("La entrada 2 no tiene letra " + (i+1));
            } else {
                if (entrada1.substring(i,i+1).equals(entrada2.substring(i,i+1))) {
                    System.out.println ("True.");
                } else {
                    System.out.println ("False.");
                }// fin del if anidado
            }//fin del if
        }//fin del for
        System.out.println ("\tFin de la comparación.");
    } //fin del main
} // Fin de la clase ComparaLetraPorLetra

Espero vuestros comentarios.
Saludos.

27
Hola. De la lección CU00661B, envió aquí mi pequeño programa para contar vocales. A continuación van las dos clases "AparicionDeVocales" y "EntradaDeTeclado"

Código: [Seleccionar]
/**
 * Detalles de la clase.
 * Contador de la aparición de vocales en el texto introducido
 * @author (Toni)
 * @version (0)
 */
public class AparicionDeVocales {
    // Atributos de la clase AparicionDeVocales
    //Constructor para objetos de la clase AparicionDeVocales
    public AparicionDeVocales() {
        // Inicializa atributos
    } // Fin del constructor AparicionDeVocales
    // Siguen los setters para los atributos de la clase AparicionDeVocales

    // Ahora los getters para los atributos de la clase AparicionDeVocales

    // Y seguidamente, procedimientos y funciones varios.
    public static void main(String [] args) {
        int numA = 0;// contadores de caracteres
        int numE = 0;
        int numI = 0;
        int numO = 0;
        int numU = 0;
        int numResto = 0;
        int numCaracteres = 0;
        System.out.println ("Por favor, muéstrenos su frase.\n" +
            "Vamos a pedir a los duendecillos que vayan contando las vocales introducidas. Beep:");
        EntradaDeTeclado entrada1 = new EntradaDeTeclado();
        System.out.println ("Gracias por su colaboración.\n" +
            "Por favor. Déjenos unos millones de unidades de tiempo para realizar el trabajo.\n");
        String aCotejar = entrada1.getEntrada();
        numCaracteres = entrada1.getLongitud();
        String letra = ""; //letra la investigar
        for (int i = 0; i < numCaracteres; i++) {
            letra = aCotejar.substring(i,i+1).toUpperCase();
            if (letra.equals("A")) {
                numA ++;
            } else if (letra.equals("E")) {
                numE ++;
            } else if (letra.equals("I")) {
                numI ++;
            } else if (letra.equals("O")) {
                numO ++;
            } else if (letra.equals("U")) {
                numU ++;
            } else {
                numResto ++;
            }// fin del if
        } // fin del for
        System.out.println ("Bien. Ya hemos terminado.\n" +
            "Después de una árdua tarea, presentamos el resultado de nuestro trabajo.");
        System.out.println ("Se han introducido en total " + numCaracteres + " caracteres.");
        int sumaPorcentajes = 0;
        System.out.println ("Se ha usado " + numA + " veces la letra \"A\". Un " + numA * 100 / numCaracteres + "% del total.");
        sumaPorcentajes = numA * 100 / numCaracteres;
        System.out.println ("Se ha usado " + numE + " veces la letra \"E\". Un " + numE * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numE * 100 / numCaracteres;
        System.out.println ("Se ha usado " + numI + " veces la letra \"I\". Un " + numI * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numI * 100 / numCaracteres;
        System.out.println ("Se ha usado " + numO + " veces la letra \"O\". Un " + numO * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numO * 100 / numCaracteres;
        System.out.println ("Se ha usado " + numU + " veces la letra \"U\". Un " + numU * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numU * 100 / numCaracteres;
        System.out.println ("Añadiendo consonantes, espacios y demás, se han utilizado: " + numResto + " caracteres. " +
            "Un " + numResto * 100 / numCaracteres + "% del total.");
        sumaPorcentajes += numResto * 100 / numCaracteres;
        System.out.println ("\nLos duendecillos, además de sisarme el cambio. También se quedan con los decimales.\n" +
            "Los porcentajes, llegan hasta un " + sumaPorcentajes + "%. Pero ya me valen para mis estadísticas.\n\tFin del trabajo.");
    }// fin del main
} // Fin de la clase AparicionDeVocales

Me olvidé de la clase "EntradaDeTeclado"
La envío aquí.
Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class EntradaDeTeclado {

    // Atributos de la clase EntradaDeTeclado
    private String entradaTeclado;

    /**
     * Constructor para objetos de la clase EntradaDeTeclado
     */
    public EntradaDeTeclado() {
        // Inicializa atributos
        entradaTeclado = "";
        pedirEntrada();
    } // Fin del constructor EntradaDeTeclado

    // Siguen los setters para los atributos de la clase EntradaDeTeclado

    // Ahora los getters para los atributos de la clase EntradaDeTeclado

    // Y seguidamente, procedimientos y funciones varios.
    public void pedirEntrada() {
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
    }

    public String getEntrada() { return entradaTeclado; }

    public String getPrimeraPalabra() {
        for (int i = 0; i <entradaTeclado.length() -1 ; i++) {
            if (entradaTeclado.substring(i,i+1).equals(" ") ||
            entradaTeclado.substring(i,i+1).equals(",") ||
            entradaTeclado.substring(i,i+1).equals(";") ||
            entradaTeclado.substring(i,i+1).equals(".") ||
            entradaTeclado.substring(i,i+1).equals(":") ) {
                return entradaTeclado.substring(0,i);
            }//fin del if
        }//fin del for
        return entradaTeclado;//Caso de que no se detecte ningún espacio devolvemos lo que haya
    }// fin del método
   
    public int getLongitud() {
        return entradaTeclado.length();
    }// fin dle método
} // Fin de la clase EntradaDeTeclado

Saludos.


A mi, me funciona bien. Como veréis en mi código incluyo mensajes como si hablara con el usuario del programa. Eso lo hago a menudo, es mi manera de quitarle hierro a la respuesta cuadriculada de la computadora.

Dadme vuestra opinión.
Saludos
---------------

28
Hola, envío respuesta del ejercicio CU00653B

Citar
Reflexiona y responde a las siguientes preguntas:

a) ¿Es posible llamar a un método externo de un objeto que ha sido declarado pero no creado?

b) ¿Es posible llamar a un método externo de un objeto “A” que ha sido declarado y creado pero cuyo constructor está vacío?

c) Una llamada al método pow de la clase Math que hacemos dentro de un método definido en una clase ¿Es una llamada a un método interno o a un método externo? ¿La llamada al método pow se hace sobre un objeto declarado y creado o no declarado y no creado?

Respuesta a:   No. Si se ha declarado, se crea la caja que contendrá el objeto, pero al no crearlo, la caja está vacía, no hay métodos.

Respuesta b:   Si. Ya hemos visto clases con constructores vacíos pues no tienen atributos, el método, pedirá seguramente los parámetros que necesite.

Respuesta c:   En lecciones anteriores vimos que el método pow de la clase Math daba error si se intentaba declarar y crear un objeto de esa clase, pues es una clase "especial" de acceso privado...
El método pow se usa así  < Math.pow (double m, double n) > sin haber declarado ni creado, y sin importar la librería pues se carga automáticamente.

29
Clase Encadenador -parecida a la clase Combinador-
Propósito: Encadenar las tres primeras letras de los dos parámetros introducidos, usando dos métodos distintos.

Código: [Seleccionar]
/**
 * Detalles de la clase.
 * Encadenar las tres primeras letras de los dos parámetros introducidos, usando dos métodos distintos.
 * @author (Toni)
 * @version (0)
 */
public class Encadenador {

    // Atributos de la clase Encadenador
    private String texto1;
    private String texto2;

    /**
     * Constructor para objetos de la clase Encadenador
     */
    public Encadenador() {
        // Inicializa atributos
        texto1 = "";
        texto2 = "";
    } // Fin del constructor Encadenador

    // Siguen los setters para los atributos de la clase Encadenador
    public void setTexto1 ( String valorTexto1 ) { texto1 = valorTexto1; }

    public void setTexto2 ( String valorTexto2 ) { texto2 = valorTexto2; }

    // Ahora los getters para los atributos de la clase Encadenador
    public String getTexto1 () { return texto1; }

    public String getTexto2 () { return texto2; }

    // Y seguidamente, procedimientos y funciones varios.
    // encadena las 2 cadenas cogiendo 3 letras del principio de cada una, o protesta si no puede.
    public String encadenaDosCadenas ( String valorTexto1, String valorTexto2 ) {
        String cadena = "";
       
        if ( valorTexto1.length() < 3 || valorTexto2.length() <3 ) {
            cadena = "Los parámetros no tienen la longitud mínima.";
        } else {
            cadena = valorTexto1.substring (0,3) + " " + valorTexto2.substring (0,3);
        }

        return cadena;
    } // fin del método

    // encadena las dos cadenas aunque no tengan los tres caracteres.
    public String encadenaDosCadenasSioSi ( String valorTexto1, String valorTexto2 ) {
        // <cadena> guardará el resultado
        String cadena = "";
        // longitud máxima de caracteres a devolver para cada parámetro
        int largoTexto1 = 3;
        int largoTexto2 = 3;
        // actualización de la longitud disponible para las dos cadenas.
        largoTexto1 = actualizaLongitud ( largoTexto1, valorTexto1 );
        largoTexto2 = actualizaLongitud ( largoTexto2, valorTexto2 );
        // encadenar resultado
        cadena = valorTexto1.substring(0,largoTexto1) + " " + valorTexto2.substring(0,largoTexto2);

        // devolver resultado
        return cadena;
    } // fin del método

    //
    private int actualizaLongitud ( int largoMax, String valorTexto ) {
        int largoFinal =  largoMax;
        int largoActual = valorTexto.length();
       
        if ( largoActual < largoFinal ) {
            largoFinal = largoActual;
        }
        return largoFinal;
    }
} // Fin de la clase Encadenador

Citar
Fíjate en el resultado que ofrece el método CombinadoSiempre
cuando se le pasan como parámetros dos cadenas vacías. ¿Te parece lógico el resultado?
En la clase tenemos definidos dos atributos o campos. ¿Tienen utilidad conocida a la vista del código de la clase? ¿Se usan en los métodos que tenemos definidos?
-----------------------
Respuesta a la cita anterior.

Si, es lógico.
Al introducir dos cadenas vacías como parámetros, el método devuelve un espacio en blanco " ", el espacio que encadenaba las dos cadenas.

Los dos atributos de la clase, declarados e inicializados, no se utilizan para nada. Se podrían omitir.

Saludos

30
Hola. A mi me funciona la compilación y ejecución. Pido que me marquéis deficiencias y mejoras.
Van 3 clases Casa, Salon y Cocina
Gracias.

Código: [Seleccionar]
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class Casa {

    // Atributos de la clase Casa
    private double superficie;
    private String direccion;
    private Salon salonCasa; //Declaracion de objeto tipo Salon
    private Cocina cocinaCasa; // idem tipo Casa

    /**
     * Constructor para objetos de la clase Casa
     */
    public Casa() {
        // Inicializa atributos
        superficie = 0.0d;
        direccion = "DesConocida";
        salonCasa = new Salon(); //Inicializa con nuevo salon
        cocinaCasa = new Cocina(); // Inicializa con nueva cocina
    } // Fin del constructor Casa

    // Siguen los setters para los atributos de la clase Casa
    public void setSuperficie ( double valorSuperficie ) {
        superficie = valorSuperficie;
    }

    public void setDireccion ( String valorDireccion ) {
        direccion = valorDireccion;
    }
   
    public void setSalon ( int numeroTV, String valorTipoSalon ) {
        salonCasa.setNumeroDeTelevisores ( numeroTV );
        salonCasa.setTipoSalon ( valorTipoSalon );
    }
   
    public void setCocina ( boolean valorEsIndependiente, int valorNumeroDeFuegos ) {
        cocinaCasa.setEsIndependiente ( valorEsIndependiente );
        cocinaCasa.setNumeroDeFuegos ( valorNumeroDeFuegos );
    }

    // Ahora los getters para los atributos de la clase Casa
    public double getSuperficie () {
        return superficie;
    }

    public String getDireccion () {
        return direccion;
    }

    public String getSalon () {
        return "Salón tipo " + salonCasa.getTipoSalon() + ", con " +
        salonCasa.getNumeroDeTelevisores() + " televisor/es.";
    }

    public String getCocina () {
        String negacion = "";
        if ( cocinaCasa.getEsIndependiente() == false ) { negacion = "no "; }
        return "En cuanto a la cocina, " + negacion + "es independiente, y tiene " +
        cocinaCasa.getNumeroDeFuegos() + " fuego/s.";
    }
    // Y seguidamente, procedimientos y funciones varios.
    public void dimeloTodoTodoTodo () {
        String mensaje = "Casa con una superficie de " + superficie + " unidades.\n";
        mensaje = mensaje + "Localizada en: " + direccion + ".\n";
        mensaje = mensaje + "Donde destacamos lo siguiente:\n";
        mensaje = mensaje + getSalon () + "\n";
        mensaje = mensaje + getCocina ();
        mensaje = mensaje + "\n\n\tFin del comunicado.";
        System.out.println ( mensaje ) ;
    }
} // Fin de la clase Casa

Código: [Seleccionar]
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class Salon {

    // Atributos de la clase Salon
    private int numeroDeTelevisores;
    private String tipoSalon;

    /**
     * Constructor para objetos de la clase Salon
     */
    public Salon() {
        // Inicializa atributos
        numeroDeTelevisores = 0;
        tipoSalon = "DesConocido";
    } // Fin del constructor Salon
   
    // Siguen los setters para los atributos de la clase Salon
    public void setNumeroDeTelevisores ( int valorNumeroDeTelevisores ) {
        numeroDeTelevisores = valorNumeroDeTelevisores;
    }
   
    public void setTipoSalon ( String valorTipoSalon ) {
        tipoSalon = valorTipoSalon;
    }
   
    // Ahora los getters para los atributos de la clase Salon
    public int getNumeroDeTelevisores () {
        return numeroDeTelevisores;
    }
    public String getTipoSalon () {
        return tipoSalon;
    }
    // Y seguidamente, procedimientos y funciones varios.

} // Fin de la clase Salon

Código: [Seleccionar]
/**
 * Detalles de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class Cocina {

    // Atributos de la clase Cocina
    private boolean esIndependiente;
    private int numeroDeFuegos;

    /**
     * Constructor para objetos de la clase Cocina
     */
    public Cocina() {
        // Inicializa atributos
        esIndependiente = false;
        numeroDeFuegos = 0;
    } // Fin del constructor Cocina
   
    // Siguen los setters para los atributos de la clase Cocina
    public void setEsIndependiente ( boolean valorEsIndependiente ) {
        esIndependiente = valorEsIndependiente;
    }
   
    public void setNumeroDeFuegos ( int valorNumeroDeFuegos ) {
        numeroDeFuegos = valorNumeroDeFuegos;
    }
   
    // Ahora los getters para los atributos de la clase Cocina
    public boolean getEsIndependiente () {
        return esIndependiente;
    }
   
    public int getNumeroDeFuegos () {
        return numeroDeFuegos;
    }
    // Y seguidamente, procedimientos y funciones varios.

} // Fin de la clase Cocina

31
Hola envío el ejercicio CU00638B para revisión.
Agradecería comentarios en cualquier sentido.

Código: [Seleccionar]
/**
 * Descripción de la clase.
 *
 * @author (Toni)
 * @version (0)
 */
public class Motor
{
    // Variables de la intancia
    int tipoBomba;
    String tipoFluido;
    String combustible;

    /**
     * Constructor para objetos de la clase Motor
     */
    public Motor()
    {
        // Inicializa variables
        tipoBomba = 0;
        tipoFluido = "No hay establecido un valor definido para el tipo de bomba";
        combustible = "DesConocido";
    }

    // A continuación los métodos setters.
    public void setTipoBomba ( int valorTipoBomba ) {
        tipoBomba = valorTipoBomba;
        setTipoFluido ();
    }

    public void setCombustible (String valorCombustible ) {
        combustible = valorCombustible;
    }

    private void setTipoFluido () {
        switch ( tipoBomba ) {
            case 0:
            tipoFluido = "No hay establecido un valor definido para el tipo de bomba";
            break;

            case 1:
            tipoFluido = "La bomba es una bomba de agua";
            break;

            case 2:
            tipoFluido = "La bomba es una bomba de gasolina";
            break;

            case 3:
            tipoFluido = "La bomba es una bomba de hormigón";
            break;

            case 4:
            tipoFluido = "La bomba es una bomba de pasta alimenticia";
            break;

            default:
            tipoFluido = "No existe un valor válido para este tipo de bomba";
            break;
        } // fin. switch
    }

    // A continuación los métodos getters
    public int getTipoBomba () { return tipoBomba; }

    public String getTipoFluido () { return tipoFluido; }

    public String getCombustible () { return combustible; }

    // A continuación métodos varios
    public void dimeTipoMotor ( String quienLoPregunta ) {
        System.out.println ( "Hola " + quienLoPregunta +  ", mira. " + tipoFluido +
            ", y usa como combustible: " + combustible + "." );
        if ( dimeSiMotorEsParaAgua () == true ) {
            System.out.println ("Ah. Si el agua es para riego, hay que añadir el fertilizante." );
        }
    }// fin del procedimiento con un parámetro

    private boolean dimeSiMotorEsParaAgua () {
        boolean motorEsParaAgua = false;
        if ( tipoBomba == 1 ) {
            motorEsParaAgua = true;
        }
        return motorEsParaAgua;
    }
}// fin de la clase


32
Hola envío el ejercicio CU00633B

Código: [Seleccionar]
/**
 * @author (Toni)
 * @version (0)
 * Atributos de la clase Medico...
 * nombre, apellidos, edad, casado, numeroDNI y especialidad
 */
public class Medico {

    String nombre;
    String apellidos;
    int edad;
    boolean casado;
    String numeroDNI;
    String especialidad;

    /**
     * Constructor inicializador
     */
    public Medico()
    {
        nombre = "DesConocido";
        apellidos = "DesConocidos";
        edad = 0;
        casado = false;
        numeroDNI = "DesConocido";
        especialidad = "DesConocido";
    }

    //Métodos para establecer atributos

    public void setNombre (String valorNombre) {
        System.out.println ("El médico conocido por < " + nombre +
            " > se ha cambiado el nombre por el de < " + valorNombre + " >.");
        nombre =  valorNombre;
    }

    public void setApellidos (String valorApellidos) {
        apellidos = valorApellidos;
        System.out.println ("Al médico de nombre < " + nombre +
            " > le corresponden los apellidos < " + apellidos + " >.");
    }

    public void setEdad (int valorEdad) {
        edad =  valorEdad;
        System.out.println ("Se hace saber que el médico < " + nombre + " " + apellidos +
            " > tiene una edad de < " + edad + " > años.");
        calculoParaMultiploEdad();
    }

    public void setCasado (boolean valorCasado) {
        casado = valorCasado;
        System.out.println ("Se nos ha comunicado que el médico < " + nombre + " " + apellidos +
            " > está casado, y hemos de decir que eso es < " + casado + " >.");
    }

    public void setNumeroDNI (String valorNumeroDNI) {
        numeroDNI = valorNumeroDNI;
        System.out.println ("Terminados los procesos de verificación, certificamos que el DNI " +
            "del médico < " + nombre + " " + apellidos + " > es: \n" + numeroDNI);
    }

    public void setEspecialidad(String valorEspecialidad){
        especialidad = valorEspecialidad;
        System.out.println("Ejectivamente, tras cotejar las titulaciones aportadas, " +
            "aseguramos que el médico < " + nombre + " " + apellidos + " > tiene la especialidad de: < " +
            especialidad + " >");
    }

    //Métodos para leer atributos

    public String getNombre () { return nombre; }

    public String getApellidos () { return apellidos; }

    public int getEdad () { return edad; }

    public boolean getCasado () { return casado; }

    public String getNumeroDNI () { return numeroDNI; }

    public String getEspecialidad () { return especialidad; }

    //Años que faltan para tener una edad múltiplo de 5
    public void calculoParaMultiploEdad () {
        int tempEdad = edad;
        int faltanAños = 0;
        faltanAños = 5 - (tempEdad % 5);
        System.out.println ("\tAtención. \nAl médico < " + nombre + " " + apellidos + " > \n" +
            "Con especialidad en < " + especialidad + " > le faltan < " + faltanAños + " > años para que su edad sea múltiplo de 5.");
    }
}

Y también el ejercicio CU00634B (evaluación de expresiones)

Código: [Seleccionar]
Dadas las variables de tipo int con valores A = 5, B = 3, C = -12 indicar si la evaluación de estas expresiones daría como resultado verdadero o falso:

EVALUACION EXPRESION
<True> a) A > 3
<True> b) A > C

<False> c) A < C
<False> d) B < C

<True> e) B != C
<False> f) A == 3

<True> g) A * B == 15
<False> h) A * B == -30

<True> i) C / B < A
<False> j) C / B == -10

<True> k) C / B == -4
<False> l) A + B + C == 5

<True> m) (A+B == 8) && (A-B == 2)
<True> n) (A+B == 8) || (A-B == 6)

<False> o) A > 3 && B > 3 && C < 3
<True> p) A > 3 && B >= 3 && C < -3

Saludos.

33
Ejercicio CU00632B Código de la clase Medico:

Código: [Seleccionar]
/**
 * @author (Toni)
 * @version (0)
 * Atributos de la clase Medico...
 * nombre, apellidos, edad, casado, numeroDNI y especialidad
 */
public class Medico {

    String nombre;
    String apellidos;
    int edad;
    boolean casado;
    String numeroDNI;
    String especialidad;

    /**
     * Constructor inicializador
     */
    public Medico()
    {
        nombre = "DesConocido";
        apellidos = "DesConocidos";
        edad = 0;
        casado = false;
        numeroDNI = "DesConocido";
        especialidad = "DesConocido";
    }

    //Métodos para establecer atributos

    public void setNombre (String valorNombre) {
        System.out.println ("El médico conocido por < " + nombre +
            " > se ha cambiado el nombre por el de < " + valorNombre + " >.");
        nombre =  valorNombre;
    }

    public void setApellidos (String valorApellidos) {
        apellidos = valorApellidos;
        System.out.println ("Al médico de nombre < " + nombre +
            " > le corresponden los apellidos < " + apellidos + " >.");
    }

    public void setEdad (int valorEdad) {
        edad =  valorEdad;
        System.out.println ("Se hace saber que el médico < " + nombre + " " + apellidos +
            " > tiene una edad de < " + edad + " > años.");
    }

    public void setCasado (boolean valorCasado) {
        casado = valorCasado;
        System.out.println ("Se nos ha comunicado que el médico < " + nombre + " " + apellidos +
            " > está casado, y hemos de decir que eso es < " + casado + " >.");
    }

    public void setNumeroDNI (String valorNumeroDNI) {
        numeroDNI = valorNumeroDNI;
        System.out.println ("Terminados los procesos de verificación, certificamos que el DNI " +
            "del médico < " + nombre + " " + apellidos + " > es: \n" + numeroDNI);
    }

    public void setEspecialidad(String valorEspecialidad){
        especialidad = valorEspecialidad;
        System.out.println("Ejectivamente, tras cotejar las titulaciones aportadas, " +
            "aseguramos que el médico < " + nombre + " " + apellidos + " > tiene la especialidad de: < " +
            especialidad + " >");
    }
   
    //Métodos para leer atributos
   
    public String getNombre () { return nombre; }
    public String getApellidos () { return apellidos; }
    public int getEdad () { return edad; }
    public boolean getCasado () { return casado; }
    public String getNumeroDNI () { return numeroDNI; }
    public String getEspecialidad () { return especialidad; }
   
}


Saludos.

34
Hola. En el ejercicio CU00630B. Esquema de la clase  DiscoMusical
------------------------------------------
Clase DiscoMusical

   0 Constructor DiscoMusical ( )

   1 Función public float dimeDuracionCancion ( int valorNumeroCancion )

   2 Procedimiento public void saludaAndSolicitaDiezCancionesConSuDuracion ( )

   3 Función public float dameDuracionTodasLasCanciones ( )

   4 Procedimiento public void añadeNuevaCancion ( int numeroNuevaCancion, String tituloNuevaCancion, float minutosNuevaCancion )
-----------------------------------------

Saludos.

35
Hola. Presento ejercicio CU00624B para revisar. Gracias.

Código: [Seleccionar]
/**
 * @author (Toni)
 * @version (0)
 */
public class DiscoMusical {//Declaración de variables

    String titulo;
    String autor;
    int annoEdicion;
    String formato;
    boolean digital;

    public DiscoMusical() { // constructor inicializador
        titulo = "DesConocido";
        autor = "DesConocido";
        annoEdicion = 0;
        formato = "DesConocido";
        digital = false;
    }// fin constructor

    //métodos para establecer atributos
    public void setTitulo(String valorTitulo) {
        titulo = valorTitulo;
    }

    public void setAutor(String valorAutor) {
        autor = valorAutor;
    }

    public void setAnnoEdicion(int valorAnnoEdicion) {
        annoEdicion = valorAnnoEdicion;
    }

    public void setFormato(String valorFormato) {
        formato = valorFormato;
    }

    public void setDigital(boolean valorDigital) {
        digital = valorDigital;
    }

    // métodos para tomar atributos
    public String getTitulo() { return titulo; }

    public String getAutor() { return autor; }

    public int getAnnoEdicion() { return annoEdicion; }

    public String getFormato() { return formato; }

    public boolean getDigital() { return digital; }
}


36
Hola. Presento ejercicio CU00623B del curso básico de programación orientada a objetos POO para revisar. Gracias

Código: [Seleccionar]
/**
 * @author (Toni)
 * @version (0)
 * Atributos persona virtual
 */
public class Persona { // declaración de atributos

    String nombre;
    String apellidos;
    int edad;
    boolean casado;
    String numeroDNI;

    // el constructor inicializa atributos/campos/propiedades
    public Persona() {
        nombre = "";
        apellidos = "";
        edad = 0;
        casado = false;
        numeroDNI = "";
    }// este constructor solo inicializa

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

    public void setApellidos(String valorApellidos) {
        apellidos = valorApellidos;
    }

    public void setEdad(int valorEdad) {
        edad = valorEdad;
    }

    public void setCasado(boolean valorCasado) {
        casado = valorCasado;
    }

    public void setNumeroDNI(String valorNumeroDNI) {
        numeroDNI = valorNumeroDNI;
    }

    // tomar atributos
    public String getNombre() { return nombre; }

    public String getApellidos() { return apellidos; }

    public int getEdad() { return edad; }

    public boolean getCasado() { return casado; }

    public String getNumeroDNI() { return numeroDNI; }
}

37
He empezado el curso de programación Java de aprenderaprogramar haciendo los ejercicios para mí sin exponerlos en el foro, solo pidiendo ayuda cuando me ha aparecido un problema. Después he pensado que debería mostrar todos los ejercicios para que los profesores me corrijan las deficiencias y/o vicios que tenga. Así pues, empiezo con el primer ejercicio: Esquema de una clase.

Ejemplo CU00619B

Clase Avion { //inicio clase

   Propiedades/campos:
      Matrícula avión
      Fabricante
      Capacidad pasajeros
      Tipo propulsión
      Aerolínea propietaria
      Espacio aéreo de operación
      Coordenadas GPS

   Operaciones disponibles:
      Asignar matrícula
      Asignar fabricante
      Asignar capacidad pasajeros
      Asignar tipo propulsión
      Asignar propietario avión
      Asignar espacio aéreo
      Asignar posición radar
      Leer matrícula
      Leer fabricante
      Leer capacidad pasajeros
      Leer tipo propulsión
      Leer propietario avión
      Leer espacio aéreo
      Leer posición radar
}  //  fin clase

Gracias

38
Hola. En este ejercicio tengo un if cuya condición siempre es false, y no se porqué
-
if (primeraLetra(entradaTeclado) == "a")
-
Ahí va el código completo
Código: [Seleccionar]
import java.util.Scanner;

public class PracticaMain
{
    public  void main(){
        System.out.println("Introducir texto");
        String entradaTeclado ="";
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
        int largoTexto = longitudTexto(entradaTeclado);
       
        String mensaje = "";
        if (largoTexto < 5){
            mensaje = "Texto inferior a 5 caracteres.";
        } else if ( largoTexto >= 5 && largoTexto < 16 ){
            mensaje = "Texto con caracteres entre 5 y 15.";
        } else {
            mensaje = "Texto con más de 15 caracteres.";
        }
        System.out.println(mensaje);
        System.out.println(primeraLetra(entradaTeclado));
       
        if (primeraLetra(entradaTeclado) == "a"){
            System.out.println(entradaTeclado + " comienza con 'a'");
        }else{
            System.out.println(entradaTeclado + " no empieza con 'a'");
        }
        //
    }

    private static int longitudTexto(String valorTexto){
        int largo=valorTexto.length();
        return largo;
    }

    private String primeraLetra(String valorTexto){
        return valorTexto.substring(0,1);
    }
}

Podeis ayudarme, gracias

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