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

Páginas: 1 ... 19 20 21 22 23 [24] 25
461
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.

462
Aprender a programar desde cero / Re:Ejercicio CU00667B
« en: 11 de Julio 2014, 07:55 »
Hola Alex. Gracias por tus observaciones.

Comparo mi código:
Citar
CantanteFamoso cantanteF = new CantanteFamoso("Madonna","All I want is you");
        listaCF.addCantanteNuevo(cantanteF);
        cantanteF = new CantanteFamoso("Jorge Negrete","Jalisco");
        listaCF.addCantanteNuevo(cantanteF);

Con el que propones:
Citar
listaCF.addCantanteNuevo(new CantanteFamoso("Madonna","All I want is you"));
        listaCF.addCantanteNuevo(new CantanteFamoso("Jorge Negrete","Jalisco"));

Y veo lo siguiente:
Yo.  1) Creo un cantanteF. 2) Lo añado a la lista.
Tu.  1) Añades a la lista un cantanteF creado "in situ"

Comentarios: Yo. Desmenuzo los pasos para no atragantarme, pudiendo seguir los pasos uno a uno. ::)
Tu. Das una zancada y llegas a destino en un tiro. :o

Resumen: Tu código es, compacto, directo, sin intermediarios. 10 puntos.
El mio, es fácil de leer y entender para un principiante. 5 puntos.

Conclusión: La abstracción es una cualidad envidiable de la mente. Cualidad que necesita neuronas bien conectadas y práctica.
Espero que con la práctica, se me conecten bien las neuronas, y pueda comprender la  evidencia de lo que tengo delante sin tener que dar vueltas alrededor para comprenderlo.

Respecto al método "muestraElementos". No intentes buscarle una razón al hecho colocarlo en la clase del main en lugar de la clase nativa del ArrayList.
Lo que ha ocurrido, es que simplemente quería sacar ese código del main, y lo puse a continuación, sin pensar que el mejor lugar era la clase que gestionaba el ArrayList.

Por otra parte, recurriendo al refranero (No hay mal que por bien no venga) el hecho de querer manipular el ArrayList fuera de su clase, me he hecho ver la diferencia entre ligar un ArrayList con un iterator e intentar hacer lo mismo con un objeto que contiene un ArrayList.

Gracias por todo. Saludos.

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

464
Hola Javi. Gracias por tus comentarios.

Entiendo que, tal como dices, separar dos líneas de código en un método distinto. Se parece más a desperdigar el código en pequeñas motas, que a dividir esfuerzos para un mismo trabajo. Voy a sopesar bien mis necesidades en cada ocasión.

Tomo nota. Gracias.

465
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

466
Hola César. Que te voy a decir, que tú no sepas.

Estaba leyendo tu escrito cuando me ha sucedido algo extraño.
Si, ha sido... un agujero de gusano que me ha abducido.
He debido llegar al séptimo cielo por que estaba oyendo música celestial, y los oídos se me reblandecían de regalados que los tenía, pero...
Alto. Stop. Achtung. Creoquetengoretortijones...
No, es el ombligo, que me da un tirón y el cordón umbilical me devuelve a este lado.
Si, ya estoy de vuelta. Aunque todavía conservo media sonrisa, voy a hacer un esfuerzo y voy a hablar en serio, punto.

Como siempre César, tu Clase no tiene desperdicio.
Cosas como:
Comentarios afianzando conceptos.
Texto entrecomillado para enfatizar.
Meter una de cal y otra de arena.

Son maneras de hacer, que junto con la redacción hacen la lectura fácil, comprensible y aleccionable.

Por otro lado, tu exposición, me parece una pequeña joya.
La quiero comparar con el hallazgo arquelógico (no quiero decir antiguo, sino valioso) que precisa de estudio para extraer la máxima información.

Me gusta la programación "per se", no se hasta donde llegaré, pero el camino me lo hacéis fácil tú y tus compañeros del foro.

Saludos.

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

468
Hola Javi. Gracias por tu valoración.

Nota: Mi frase sobre la aerolínea de bajo coste, no era para tomar en serio. Tampoco quería ser la escusa para que los tres atributos apuntaran a la misma persona en la clase de java.
Ya supongo que en una aerolínea habrá normas de obligado cumplimiento. Normas que en una clase nos podemos "saltar a la torera", como añadir atributos innecesarios como el "flequillo" del avión, o quitar el atributo "trenDeAterrizaje"; y aún así nuestro avión made in "java" podría realizar vuelos transcontinentales con el siguiente atributo:
combustible = "Repique de castañuelas";

Como ves Javi, puedo ser un poco guasón, espero que me lo permitas.

Gracias otra vez por dedicarme tu tiempo.
Saludos.

469
Hola César, gracias por tu aliento.
El pequeño reto que mencionas, será para mi un gran reto POO (Para Orientarme a los Objetos). A ver si empiezo a acomodarme en ese espacio.

Gracias otra vez.
Saludos

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

471
Aprender a programar desde cero / Re:EJERCICIO CU00654B
« en: 02 de Julio 2014, 15:53 »
Hola Sniper
Tu clase Profesor con dos constructores, uno vacío y otro con parámetros usando "this" para distinguir entre atributos y parámetros.

La veo perfecta. La he probado y funciona todo.

Nota: El código lo veo muy limpio, es fácil de leer y entender.

Sal U2

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

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

474
Hola César, gracias por tus indicaciones.

Saludos.

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

476
Gracias Ogramar por tu visión sobre los métodos compactos y los independientes.
Para mí es un buen punto de partida. ::)

Saludos y gracias.

477
Hola Ogramar gracias por tus apuntes.

Si, si y si.
Si a los atributos declarados e iniciados, pero olvidados en el trabajo de la clase. Es
superfluo.
Si a usar los atributos en lugar de los parámetros en los métodos. Es práctico.
Si a agrupar el código dentro del método. Es compacto.

Son todas observaciones que meto en la saca para usar a conveniencia según la ocasión.

He de decirte que lees el pensamiento.
Empecé la clase sin atributos. Funcionaba. Ahí me pregunté el porqué de unos atributos
que no se usan.
Luego me dije, ¿y si los métodos trabajan con los atributos de la clase?. Empecé a hacer
los cambios, pero al final, me decidí por el código que incluía atributos superfluos.

Leyendo el texto del ejercicio, se hacían preguntas respecto de esos atributos, así que
para que la pregunta y la respuesta tuvieran un motivo de discusión, incluí esos
atributos, como un ejercicio de lo que no debe hacerse.

Finalmente, gracias por darme aire con lo del uso del método auxiliar.
 <actualizaLongitud>.

Aquí quiero preguntarte. ¿Cómo se gestiona la frontera entre: código sencillo/compacto y código con funciones separadas, independientes (cada una haciendo solo lo suyo)?


Saludos.

478
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

479
Hola Alex. Gracias por tu exposición.
Y gracias por tus ánimos.

Entiendo que un -get- ha de devolver un atributo. Si el atributo es un objeto, pues eso, que devuelva un objeto. Hay que cambiar el chip.

En cuanto al código:
Citar
CORRECTO PERO NO IDÓNEO

En lugar de (modo 1):

    public void setSalon ( int numeroTV, String valorTipoSalon ) {
        salonCasa.setNumeroDeTelevisores ( numeroTV );
        salonCasa.setTipoSalon ( valorTipoSalon );
    }

Podríamos pensar en (modo 2):

    public void setSalon ( Salon valorSalon ) {
        salonCasa = new Salon();
        salonCasa.setNumeroDeTelevisores(valorSalon.getNumeroDeTelevisores());
        salonCasa.setTipoSalon(valorSalon.getTipoSalon());
    }

Ha habido momentos en que mi coco ha visto la lógica del argumento, y al momento siguiente la ha perdido.
He visto, tomando el ejemplo del código escrito, indentaciones dentro de otras indentaciones hasta perder el hilo.

En fin. Voy a hacer caso de lo que dices. Espero verlo más claro en adelante.

Saludos y gracias.

480
Aprender a programar desde cero / Re:Ejercicio CU00619B
« en: 19 de Junio 2014, 06:59 »
Gracias por la información Alex.

No me voy a complicar en enviar imágenes a un servidor.
Yo quería enviar un esquema formateado en texto, cambiarlo a imagen e insertarlo en el mensaje. Pero veo que para texto, pues eso poner el texto.
 Y para las imágenes desde el web, la primera opción de colocar la ruta de la imagen entre el código (img /img) es perfecto.

Gracias y saludos.

Páginas: 1 ... 19 20 21 22 23 [24] 25

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