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 - Jorge lopez

Páginas: 1 2 [3] 4 5 6 7 8 ... 13
41
Ejercicio correcto  ;) !

42
 Hola aleexx1724!

Tu ejercicio es correcto, pero se puede mejorar, mas adelante (a partir de la entrega CU00645B) aprenderas a usar metodos ya creados, para obtener mejores resultados, por ejemplo:
Código: [Seleccionar]
public class MultiplicarDieces
{
    public MultiplicarDieces()
    {
      //Constructor vacio
    }

    /*A partir de la entrega CU00645B comenzaremos a conocer y a hacer uso del api de java y sus ventajas, como usar un metodo ya creado para obtener un resultado mas
     * preciso al realizar esta operación*/
    public double multiplicadorPorDieces(double n, int m)
    {
        int resultado = 1;
        for(int i=1; i<=m; i++){resultado = resultado * 10;}
        return Math.round(n * resultado * 100000) / 100000;//método (round(double a);) de la clase Math del api de java
    }
}
Aquí usamos el método round(double a); de la clase Math de la librería de java.

Con este método se obtiene un resultado mas preciso (2.55, 2 = 255.0 en lugar de: 254.99999999999997)

Saludos!

43
Aprender a programar desde cero / Re:Ejercicio (CU00669B) Arrays
« en: 27 de Diciembre 2014, 15:36 »
 Hola ZID!

 Tu código no compila y a simple vista se pueden identificar muchos errores, como el no incluir la sentencia: public class "NombreDeLaClase"{...}

Pienso que deberias detenerte a analizar tu código, corregirlo tomando en cuenta los pasos básicos para crear una clase y luego replantear tu ejercicio.

Saludos!

44
Arbol de navidad y muñeco de nieve con efecto animado en consola Java (la ejecución no se detiene, ver versión modificada en respuesta)

 :)
Código: [Seleccionar]
/**
 * Feliz Navidad para todos, familia de aprenderaprogramar.com
 *
 * @author J.lopez
 * @version 24122014
 */

public class FelizNavidad
{   /**Preferiblemente ejecutar usando el IDE BlueJ, para una correcta visualización.*/
    public static void main(String[] args)
    {
       int i = 1, j = 1, k=1;
       String efecto = "*", efectoLineaFinal = "", estrella = "", completivo = "";
       while(k<20)
       {           
            if(i % 2 == 0)
            {
                efecto = "★"; estrella = "☆"; completivo = "!!";
            }
            else
            {
               efecto = "☆"; estrella = "★"; completivo = "";
            }
            while(j<19)
            {
                if(i % 2 == 0)
                {
                    efecto = "★";
                }
                else
                {
                   efecto = "☆";
                }
                efectoLineaFinal += "!" + efecto; j++;
            }
            try{Thread.sleep(1000);}catch(Exception e){}
            k=k+1;
            System.out.println("\f                                               "+estrella+
            "\n                                             "+efecto+"Paz"+efecto+
            "\n                                            "+efecto+"Unión"+efecto+
            "\n                                           "+efecto+"Alegrías"+efecto+
            "\n                                          "+efecto+"Esperanza★"+efecto+
            "\n                                         "+efecto+"Amor✴y✪Éxito"+efecto+
            "\n                                        "+efecto+"Realizaciones★"+efecto+
            "\n                                       "+efecto+"Respeto❆armonía★"+efecto+
            "\n                                      "+efecto+"Salud☆⋆solidaridad★"+efecto+
            "\n                                     "+efecto+"Felicidad✪☆Humildad⋆★"+efecto+
            "\n                                    "+efecto+"Cofraternización☆✪Pureza"+efecto+
            "\n                                   "+efecto+"★Amistad☆Sabiduría★❆Perdón"+efecto+"                                              █████ "+
            "\n                                  "+efecto+"Igualdad✴Libertad☆BuenaSuerte"+efecto+"                                         █████████ "+
            "\n                                 "+efecto+"Sinceridad☆Estima✪❆Fraternidad✴"+efecto+"                                        ████████ "+
            "\n                                "+efecto+"Equilibrio✪☆Dignidad☆⋆Benevolencia"+efecto+"                                        ███████ "+
            "\n                               "+efecto+"Fé❆★Bondad☆Paciencia✴Ventura❆Fuerza"+efecto+"                                        ████████ "+
            "\n                              "+efecto+"Tenacidad★✪★Prosperidad☆Reconocimiento★"+efecto+"                                 ██████████████"+
            "\n                             "+efecto+"Son⋆mis✴★✴sinceros☆deseos★en✴estaNavidad"+efecto+"                              ███▒▒░░░░░░░░▒"+
            "\n                            "+efectoLineaFinal+completivo+"                                 ▒░░░░░ ⓤ░░ⓤ░░▒ "+
            "\n                                            [▒▒▒]"+"           ╔══╗──╔╦═╗                          ▒░░░░░░░░ >░░░▒"+
            "\n                                                [▒▒▒]"+"           ║═╦╩╦╗╠╬═║                           ██▒░░░░░·︾·░░▒"+
            "\n                                                [▒▒▒]"+"           ║╔╣╩╣╚╣║═╣                             ████▒░░░░░░░▒"+
            "\n                                                [▒▒▒]"+"           ╚╝╚═╩═╩╩═╝                          ▒▒███████████▒▒ "+
            "\n                                                [▒▒▒]"+"                                                    ▒#░░░░░▒▒▒▒█J██░░░▒"+
            "\n                                                [▒▒▒]"+"           ╔═╦╗─────╔╗╔╗───╔╗         ▒░░░▒░░░░░░████░░░▒"+
            "\n                                                [▒▒▒]"+"           ║║║╠═╦═╦═╬╬╝╠═╗╔╝║         ▒░░░░▒░░░░░█l███░░░▒ "+
            "\n                                                [▒▒▒]"+"           ║║║║╬╚╗║╔╣║╬║╬╚╣╬║         ▒░░░░░▒░░░░█o███░░░▒"+
            "\n                                                [▒▒▒]"+"           ╚╩═╩══╩═╝╚╩═╩══╩═╝         ▒░░░░▒░░░░░█p███░▒▒ "+
            "\n                                                [▒▒▒]"+"                                                    ▒#▒▒▒▒▒░###░█e██░░"+
            "\n                                                [▒▒▒]"+"                                                  ▒#▒░░░░░░░░░█z█░▒░▒ "+
            "\n                                                [FELIZ]"+"                                                 ▒░░░░░░░░░░░░░░Ѻ░░░▒ "+
            "\n                                               [NAVIDAD]"+"                                               ▒░░░░░░░░░░░░░░░░░░░▒ "+
            "\n                                             [COMPAÑEROS☆]"+"                                            ▒░░░░░░░░░░░░░░░Ѻ░░░░▒"+
            "\n                                            [▒▒▒☆DE▒▒▒]"+"                                           ▒░░░░░░░░░░░░░░░░░░░▒"+
            "\n                                        [aprenderaprogramar.com]"+"                                       #▒░░░░░░░░░░░░░Ѻ░░░░▒ "+
            "\n๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩..[▒▒▒▒▒▒▒▒▒▒▒▒▒▒]๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩.. .##▒░░░░░░░░░░░░░░░░##..۩۩๑๑۩۩.. ..۩۩๑๑۩۩.. ..۩۩๑๑۩۩....۩۩๑๑۩۩..");
            i++;
            j = 1;
            efectoLineaFinal = "";
           }     
    }
}

45
 Hola aleexx1724!

Este problema es frecuente a la hora de trabajar con decimales, debido a la precisión de los ordenadores con relación a números decimales.

Nosotros pensamos en un resultado (2.55), pero la forma del ordenador hacer los cálculos nos devuelve otro resultado  (254.99999999999997)

Es algo que lleva tiempo conocer y entender. Para solucionar este problema, disponemos del método
round(double a); de la clase Math.

El método seria el siguiente:
Código: [Seleccionar]
//metodo que devuelve el resultado de multiplicar el valor de la variable base por el resultado de elevar 10 al valor de la variable exponente
    public double multiplicadorPorDieces(double base, int exponente){
        int resultado = 1;
        for(int i=1; i<=exponente; i++){resultado = resultado * 10;}
        return Math.round(base * resultado * 100000) / 100000;
    }

Mas adelante (a partir de la entrega CU00645B) comenzaras a familiarizarte con lo que es el api de java, sus clases y métodos disponible para "facilitar" el trabajo a la hora de programar, de hay sale el método Math.round(double a);

Saludos!

46
 Hola nuevamente @dib_vz!

Disculpa la tardanza, estos días ando corto de tiempo, pero en fin, aquí estamos para ayudar.

Te comento por clase:

Famoso: Casi perfecta, solo que has olvidado incluir un modificador de acceso para las variables de clase. (preferiblemente private)

ListaCantantesFamosos: En esta clase tienes la variable nombreLista, esta variable pienso que no es muy útil, eso aparte de que dicho mensaje (nombre de la lista) quien debe de manejarlo es la clase con el método main
(mas comentarios en el código de la clase) .

Tu clase ListaCantantesFamosos quedaría similar a esta:
Código: [Seleccionar]
/**
 * Esta clase describe un objeto ArrayList;
 * compuesto por objetos de la clase Famoso
 * @div_vz
 */
import java.util.List;//No has usado este import, su correcto uso se hace declarando la variable listaCantantesFamosos del tipo dinámico "List" (polimorfismo CU00688B,91B)
import java.util.ArrayList;
import java.util.Iterator;

public class ListaCantantesFamosos
{
    private List<Famoso> listaCantantesFamosos;//Declaramos la variable listaCantantesFamosos del tipo dinamico "List"
    //private String nombreLista; esta variable la eliminamos

    /**
     * constructor:
     * Crea un nuevo objeto de tipo ArrayList;
     * contiene dos objetos Famoso
     */
    public ListaCantantesFamosos() {
        listaCantantesFamosos = new ArrayList<Famoso>();//Le asignamos como valor a la variable listaCantantesFamosos un objeto tipo ArrayList (que a su vez es tipo List)
        listaCantantesFamosos.add(new Famoso("Michael Jackson", "Thriller"));
        listaCantantesFamosos.add(new Famoso("Madonna", "All I want is you"));
    }

    //Método para añadir un objeto de tipo Famoso al objeto listaCantantesFamosos
    public void addFamoso()
    {
        Famoso cantante = new Famoso();//Objeto Famoso
        EntradaPalabras entrada = new EntradaPalabras();//Instancia manejadora de entradas de datos por teclado.
        System.out.println("\nPor favor! Introduzca el nombre del cantante: ");
        cantante.setNombre(entrada.pedirPalabra());//Le pasamos como parámetro un método de la clase EntradaPalabras que pide una entrada por teclado y devuelve un String
        System.out.println("\nPor favor! Introduzca el nombre del disco del cantante: ");
        cantante.setDiscoMasVendido(entrada.pedirPalabra());
        listaCantantesFamosos.add(cantante);//Agregamos el objeto Famoso a la lista, con sus atributos por defecto previamente modificados por métodos setters.
    }

    //Método para imprimir los objetos de la lista usando Iterator
    public void imprimirLista() {
        Iterator<Famoso> it = listaCantantesFamosos.iterator();
        Famoso tmpCantante;
        int i = 0;
        while (it.hasNext()) { //usamos while para recorrer todos los elementos de la lista
            //Aprovecho el metodo getTamaño para poder imprimir el orden numerado//No es necesario usar el bucle for aquí, el mismo while cumple la tarea que necesitas
            tmpCantante = it.next();
            System.out.println("\n" + (i+1) + " - Nombre:            " + tmpCantante.getNombre() +
            "\n    Disco más vendido: " + tmpCantante.getDiscoMasVendido());
            i++;
        }
    }

    //Método que devuelve el tamaño del objeto listaCantantesFamosos
    public int getTamaño() {//Este metodo es opcional, yo en su lugar usaría directamente el metodo size();
        return listaCantantesFamosos.size();
    }
}

TestCantantesFamosos: Esta clase debe de encargarse de manejar el programa, casi todos los mensajes a mostrar por pantalla debe de manejarlos esta clase, y solo si es necesario otra clase (por ejemp: ListaCantantesFamosos) puede mostrar mensajes directos por pantalla
(ejemp: System.out.println("\nPor favor! Introduzca el nombre del cantante: "); )

Otro punto en esta clase es que el tercer cantante según el enunciado del ejercicio no es opcional, tu das opción a finalizar el programa solo con los dos cantantes por defecto en la lista.

Tu clase TestCantantesFamosos: quedaría similar a esta:
Código: [Seleccionar]
/**
 * Esta clase describe el metodo main;
 * dirige el programa que relaciona las clases:
 * Famoso y ListaCantantesFamoso
 * @div_vz
 */

public class TestCantantesFamosos
{
    public static void main(String[] args)  {
        ListaCantantesFamosos lista = new ListaCantantesFamosos();
        EntradaPalabras entrada = new EntradaPalabras();
        System.out.println("________________________________________________________\nEsta es una lista de cantantes famosos y sus superventas\nLa lista inicial esta compuesta por " +
        lista.getTamaño() +  " cantantes famosos.\n________________________________________________________\n\n------- CANTANTES FAMOSOS -------\n");
        String confirmador = "";
        lista.imprimirLista();
        System.out.println("\n\n________________________________________________________\nAgregue otro cantante mas a nuestra lista.\n________________________________________________________");
        lista.addFamoso();
        System.out.println("\fEsta es su lista actualizada compuesta por " + (lista.getTamaño()) + " cantantes");
        lista.imprimirLista();
        //utilizo while para crear un bucle que me permita añadir todas las referencias que se deseen
        boolean lanzador = true;
        while (lanzador) { //No es necesaria la sentencia: lanzador == true, como se muestra ahora es igual y es mas apropiado, donde lanzador siempre sera evaluado como true
            System.out.println("\n¿Desea añadir un nuevo cantante a la lista?(y/n)");
            confirmador = entrada.pedirPalabra();
            if (confirmador.equalsIgnoreCase("y")) {
                lista.addFamoso();
                System.out.println("\f________________________________________________________\nEsta es su lista actualizada compuesta por " + (lista.getTamaño()) +
                " cantantes\n________________________________________________________");
                lista.imprimirLista();
            } else {
                lanzador = false;
                System.out.println("\nEspero que haya disfrutado del programa.\n\nDesarrollado por @dib_vz");
            }
        }
    }
}

Y por ultimo, tambien edite tu clase EntradaPalabras:
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaPalabras
{
    //Eliminamos la variable: private String palabra, una clase que sirve como entrada de teclado no necesariamente debe de guardar lo que se escriba,
    //el String ingresado por teclado puede ser guardado directamente en la variable tipo string deseada, incluso si esta variable es de otra clase.
    //constructor general
    public EntradaPalabras()
    {
        //Constructor vació, no llamamos al método pedirPalabra en el constructor para evitar tener que crear un nuevo objeto para cada entrada de datos.
    }

    //método para pedir una entrada de teclado, modificamos de tipo procedimiento (void) a tipo funcion (String);
    public String pedirPalabra() {
        Scanner entradaEscaner = new Scanner(System.in);
        return entradaEscaner.nextLine();
    }
}

Comentario en general: El objetivo de este ejercicio es que el programador entienda e implemente la clase Iterator, me parece que has manejado esa parte muy bien.

Te sugiero que tengas presentes los puntos ya comentados en tus futuros ejercicios.

Saludos!

47
 Hola Alex!

Citar
He intentado compilarlo y me salta una exceción "package javazoom.jl.decoder does not exist"

en la clase "ReproductorMp3" línea import javazoom.jl.decoder.JavaLayerException;

¿Falta el código de este paquete?
Ciertamente el proyecto usa librerías extras que incorporan packages como javazoom que no incluí en el archivo.rar del proyecto. Aquí dejo las librerías adicionales necesarias y las instrucciones de como incorporarlas al proyecto. Link: http://www.mediafire.com/download/p7p7tabxzab1cxc/McAppExtrasLibraries.rar

Citar
Si pulso sobre el disco para abrir otro mp3 mientras está sonando el que he abierto, desaparece la imagen. Si le doy a cancelar, la sigue sonando la música pero no aparece la imagen.

Ahí parece que tienes algún problema en el control de esa imagen, supongo que no debería desaparecer así porque sí.
Esto se debe a una linea de codigo (if(!"".equals(songTitle)){songTitle=""; estado.setIcon(null);})en la clase McApp en el método musicMouseClicked, esta linea la declare tratando de buscar una solucion al bug ya mencionado, pero es fácil de corregir.

Citar
Si pulso en el icono del disco, desaparece la imagen.
Cada vez que se pulse el icono de música (evento mouseClicked) , la imagen de estado desaparecerá debido a la instrucción music.setIcon(null); pero como te comente, esto es fácil de corregir.

Citar
Además, mientras está sonando la canción de mely, en ocasiones la música se para y se sigue viendo la imagen.
Aquí me descuide, creo que tengo que agregar una instrucción que desaparezca la imagen de estado si la música a terminado de reproducirse.

Citar
Hay una cosa que es extraña: la imagen de mely parece un vídeo ¿qué tamaño tiene? ¿puede ser que sea demasiado tamaño? ¿has probado a poner una imagen de pequeño tamaño de archivo?
La imagen de mely es un archivo.gif con tamaño de 514kb, creada a partir de escenas cortas de un vídeo, es 400kb mayor que el gif por defecto para las canciones normales. Si, eh probado usar una imagen de menor tamaño y de formato.png en lugar de la imagen mely pero el bug continua.

Citar
Aunque no he podido compilarlo pienso que si tuviera que depurar empezaría por separar el código de la calculadora y el código del reproductor mp3, es decir, crear dos programas. Tal y como lo tienes puede resultar complicado depurar y ver hasta qué punto te está influyendo una cosa y otra.
En la versión 6 del proyecto, aplicare estas y cualquier otra recomendación que me puedas o me puedan dar de cara a mejorar la eficiencia del programa.

Citar
Y finalmente felicitarte por el buen nivel de programación que se puede apreciar!!!
Muchas gracias,  :) ese viene siendo el resultado actual de trabajoDuro+Perseverancia+CompañerosQueAyudan
(como tu  y todos mis compañeros de aprenderaprogramar.com ;))

Saludos!

48
 Hola compañeros!

 Estoy trabajando en el diseño de un pequeño proyecto personal java, con la finalidad de ir asociándome con lo complejo de java. Este proyecto esta enfocado en el uso de interface gráfica, operaciones sencillas, operaciones complejas y funciones en base a  eventos.

Podría decir yo que el programa esta casi listo (en su versión super beta XD) y me gustaría que me echen una mano con un bug para el cual no he encontrado solucion, pese a que busque en todo google algo que me orientara a corregirlo.

mas adelante dejare un link de descarga que contiene un archivo.rar con todo lo necesario para correr el proyecto en netbeans (IDE usado para crear este proyecto) así como también un ejecutable.jar del programa. También se incluye la documentación (javadoc) del proyecto

El bug es el siguiente: El programa cuenta con un reproductor de musica, cuando se reproduce una canción cuyo titulo no contiene el String "mely" se muestra un visualizador de estado de reproducción (JLabel) con un gif en movimiento por defecto para todas las canciones que no contengan el String "mely".

Hasta aquí vamos bien, luego si reproducimos otra canción, cuyo titulo contenga el String "mely" la imagen del visualizador de estado de reproducción cambia a un gif especial para esta canción (un gif de la cantante melymel, yo la amo a ella XD)

Hasta aquí todo normal, el bug aparece cuando nuevamente cambiamos la canción por una canción que no contenga el String "mely", en lugar de mostrar nuevamente el gif por defecto para las canciones que no contengan el String "mely" ya no se muestra ninguna imagen, aun cuando la música esta sonando.

Lo raro de este bug, es que mientras corro el programa (RunProject) usando netbeans este bug nunca aparece, pero si aparece cuando ejecuto el ejecutable.jar que me genera netbeans mediante la operación clean and build.

Me parece que el bug se genera por conflictos con el EDT, (Event Dispatch Thread) intente crear un nuevo hilo para este evento pero no soluciono el bug.

Para  comprender mas sobre el bug que intento explicar, favor descargar el archivo.rar del link http://www.mediafire.com/download/vxk97nb20d9t0ko/McApp.rar y descomprimir usando la contraseña: j.lopez luego ubique el archivo.txt readme, el cual detalla todo sobre el programa, también puede consultar la documentación (javadoc) del proyecto.

Saludos!

49
Aprender a programar desde cero / Re:Ejercicio CU00641B
« en: 18 de Diciembre 2014, 00:31 »
 Hola rodrigo_avia!

Con relación a tu duda:
Citar
Lo compilo y va bien pero creo que tengo algo mal porque al probar los objetos creados no me relacionan las clases.

Si lo dices porque a la hora de compilar tus clases, Bluej "no crea una relación" entre clases usando la flecha con linea discontinua (ClaseAQueUsa-------------->LaClaseB) entonces te cito el siguiente párrafo de la entrega CU00641B:
Citar
En algunas circunstancias BlueJ puede mantener
erróneamente indicadores de relación que no son ciertos. En estos casos, las flechas pueden eliminarse
seleccionándolas y con botón derecho eligiendo la opción Remove. También pueden crearse eligiendo
el botón ----> en la parte superior izquierda de la pantalla y a continuación pulsando primero el icono de
la “clase que usa” y luego el icono de la “clase que es usada”.

En ocasiones BlueJ no crea la flecha de relación, pero como se explica en la anterior cita, si estamos consientes de que existe una relación entre clases, podemos indicarlo colocando la flecha de relación de uso manualmente.

Saludos!

50
 Hola felix.

La combinación por defecto es:  Ctrl + Space (Control + barra espaciadora)

Si no te funciona es porque has realizado algún ajuste que ha alterado la configuración por default de tu IDE Bluej relacionado con esto, para solucionarlo intenta restablecer los ajustes de tu IDE a su configuración por defecto (default)

Un consejo personal que podría yo darte, es que no uses mucho esa funcion de auto completar o ayuda por parte del IDE, y que en su lugar hagas todo manual, esto te ayudara bastante para aprender si es que estas empezando a aprender a programar java.

Saludos.

51
 Ahora si entiendo tu inquietud.

Mas adelante dejare un código para que comprendas mas sobre el tema, tema del que conocerás mas adelante en la entrega CU00680B donde se explica el uso de javadoc, comentarios en cabecera de constructor, comentario en cabecera de métodos, etiquetas, ext.

Por ahora no te detengas mucho a profundisar en esto, solo te explico lo necesario para aclarar tu duda.

Aqui el codigo de ejemplo:
Código: [Seleccionar]
public class Taxi
{
    private String matricula;
   
    /**Esto es un comentario de constructor.
      *Si creas un objeto Taxi usando este constructor (constructor general) se mostrara este mensaje en la ventana de asignación de nombre para objetos:
       Asignación de contenido, inicialización de una variable
       Es importante y recomendado para un buen estilo de programación
       En conclusión,se mostrara todo lo aquí escrito.*/
    public Taxi()//Constructor general
    {
      matricula = "Desconocida";
    }
   
    //Si creas un objeto Taxi usando este constructor (Constructor que recibe un parámetro) no se mostrara ningún mensaje en la ventana de asignación de nombre de objetos
    //Esto se debe a que estos comentarios no están asociados a este constructor (para asociarlo debe de estar escrito así: /**aquí el mensaje*/)
    public Taxi(String valorMatricula)//Constructor que recibe un parámetro
    {
      matricula = valorMatricula;
    }
}

Saludos!

52
 Hola Papipanchi.

No veo nada anormal en la imagen que envías en el archivo adjunto.

Si te salta algún error, pega el código para poder ayudarte.

53
 Hola @dib_vz!

Al parecer tienes dificultad para trabajar con listas (ArrayList) y funciones básicas como mostrar su contenido por pantalla, si estoy en lo correcto intentare aclararte algunos puntos para que puedas realizar este ejercicio.

Un objeto de tipo ArrayList es a su vez también de tipo List (lista) cuya funcion es almacenar algo,
(objetos, tipos primitivos, ext..) Para agregar un elemento a un ArrayList disponemos del método add(Element e); una vez el objeto ArrayList contiene algún elemento disponemos de varias opciones para consultar su contenido e interactuar con este. (mostrarlo por pantalla, borrarlo, editarlo, sustituirlo, ext..) Por ejemplo, podríamos tener una lista de colores y mostrar los colores de esa lista usando un for each como en el siguiente codigo:
Código: [Seleccionar]
import java.util.List;//Importamos las clases necesarias
import java.util.ArrayList;
public class TestArrayList
{
    public static void main(String[] args)
    {
       List<String> lista = new ArrayList<String>();/*Declaramos la lista del tipo dinámico "List" y creamos el objeto que contendrá la variable lista
       (un ArrayList de String)*/
       lista.add("Azul");//Agregamos elementos (objetos tipo String) a la lista
       lista.add("Rojo");
       lista.add("Blanco");
       lista.add("Amarillo");
       lista.add("Negro");
       System.out.println("Estos son los " + lista.size() + " colores que contiene la lista:\n");//Mensaje opcional
       for(String color: lista)//Usamos un for each (for extendido) para recorrer la lista y analizar su contenido
        {
          System.out.println("\t\t " + color);//Cada elemento que se encuentre durante la ejecución del for each sera mostrado por pantalla
        }
    }
}
O bien podríamos usar el método iterator(); de la clase Iterator para realizar la misma tarea, como se muestra en el siguiente codigo:
Código: [Seleccionar]
import java.util.List;//Importamos las clases necesarias
import java.util.ArrayList;
import java.util.Iterator;
public class TestArrayList
{
    public static void main(String[] args)
    {
       List<String> lista = new ArrayList<String>();/*Declaramos la lista del tipo dinámico "List" y creamos el objeto que contendrá la variable lista
       (un ArrayList de String)*/
       lista.add("Azul");//Agregamos elementos (objetos tipo String) a la lista
       lista.add("Rojo");
       lista.add("Blanco");
       lista.add("Amarillo");
       lista.add("Negro");
       System.out.println("Estos son los " + lista.size() + " colores que contiene la lista:\n");//Mensaje opcional
       Iterator<String> it = lista.iterator();//Creamos un objeto tipo Iterator que contendrá una especie de copia de cada elemento que contenga la lista
       while(it.hasNext())/*Usamos un ciclo while combinado con métodos propios de la clase Iterator invocados sobre el objeto it previamente creado, para recorrer la lista
       y analizar su contenido*/
        {
          System.out.println("\t\t " + it.next());//Cada elemento que se encuentre durante cada ciclo del bucle while sera mostrado por pantalla
        }
    }
}

Usar una u otra forma tiene sus ventajas y desventajas como ya fue explicado en las entregas CU00666B y CU00667B así que podríamos concluir que su provechoso uso es circunstancial.

Para realizar el ejercicio de la entrega CU00667B debes de crear una clase ListaCantantesFamosos que contendría una lista tipo ArrayList y esta lista contendría objetos de tipo CantantesFamoso, inicialmente la lista debe de contener 2 objetos CantanteFamoso los cuales debes de mostrar por pantalla y luego pedir al usuario que introduzca otro cantante mas a la lista, el cual debes de agregar a la lista usando el método add(); luego usando iterator(); debes de mostrar el nombre y el disco con mas ventas de cada objeto CantanteFamoso y posteriormente dar la opción al usuario de agregar mas cantantes a la lista o finalizar, al finalizar se debe de mostrar la lista actualizada.

Aquí te dejo una pista sobre como podrías mostrar por pantalla el nombre y disco con mas ventas de cada objeto CantanteFamoso: que contenga la lista
Código: [Seleccionar]
Iterator<CantanteFamoso> it = lista.iterator();
      CantanteFamoso tmpObjetoCantante;
      while(it.hasNext())
      {
        tmpObjetoCantante = it.next();
        System.out.println("Nombre: " + tmpObjetoCantante.getNombre() + ". Disco con mas ventas: " + tmpObjetoCantante.getDiscoConMasVentas() + ".");
      }

Espero que encuentres algo java.util; en este comentario ;)

Cualquier duda no dudes en preguntar.

Saludos!!

54
 Hola  @dib_vz!

Tu programa realiza la tarea requerida en el enunciado de este ejercicio correctamente, pero te comentare sobre algo que debes de tener claro y que debes corregir en este código que has planteado.

El nombre de una clase dice lo que es o lo que hace, por tanto si un programador mira el nombre de tu clase ComparadorPalabras sin necesidad de mirar su código podría deducir que esta clase compara palabras. Ahora bien, una cosa es lo que diga el nombre de una clase y otra cosa es el que el código contenido en dicha clase respalde lo que se interprete al leer el nombre de dicha clase o no.

En realidad tu clase ComparadorPalabras no es ni hace lo que se interpreta al leer su nombre, mas bien podría llamarse EntradaDeTeclado o EntradaPorTeclado. Tu clase (con main) TestComparador es la clase que en realidad se esta encargando de comparar las palabras que recibe al crear dos objetos tipo ComparadorPalabras respectivamente.

Cada clase debe de encargarse de realizar su funcion, si la clase se llama ComparadorPalabras esta clase debería de limitarse solo a comparar palabras y no incluir en ella mas funciones como ( import java.util.Scanner; ) pedir entradas de teclado ext..

Yo te recomendaría replantear este ejercicio de la siguiente manera:

1: Crea una clase EntradaPorTeclado que use la clase Scanner para crear una entrada de teclado y que dicha entrada no muestre ningún tipo de mensaje,(System.out.println) mas adelante en una clase con main se mostraria un mensaje de tipo: "Por favor escriba la primera palabra" seguido de un metodo pedirEntrada de la clase EntradaPorTeclado.

2: Crea una clase ComparadorPalabras que se encargue de realizar la comparación entre dos palabras y que muestre por pantalla el resultado de la comparación, en esta clase es donde es preferible hacer uso de los métodos substring, length, equals, entre otros posibles métodos de ser necesarios.

3: Crea una clase con el método main que se encargue de dirigir el programa, en dicha clase se crearían los mensajes adicionales a mostrar por pantalla, por ejemplo: saludos, pedir datos, cortesía para con el usuario,
(gracias, despedida, ext..) ext.

PD: Me a gustado la forma en que muestras los mensajes por pantalla, todo bien organizado, así como también las correctas declaraciones de variables.

Saludos.

55
 Hola rodrigo_avia!

Tu ejercicio esta correcto.

Con relacion a tu duda, te sito la respuesta del compañero Gilding donde en este hilo: https://www.aprenderaprogramar.com/foros/index.php?topic=1673.0 responde a tu inquietud.

Citar
Hola Rodrigo_avia.

Realmente no afecta al funcionamiento del programa donde situas los métodos setters y getters. Sin embargo es recomendable ponerlos juntos. Dependiendo de tus gustos o preferencias, o de lo te exijan en un puesto de trabajo, se pueden colocar antes o después del resto de métodos o funciones de la clase. No importa si pones antes los getters y después los setters o lo haces al revés. También puedes poner un método set y a continuación su método get, y así sucesivamente con cada atributo de la clase.

Personalmente yo normalmente establezco los métodos setters y getters tras la declaración de los constructores de la clase (salvo algún caso particular). Y suelo intercalarlos: establezco el set y el get para un atributo, después el del siguiente, etc etc. Todo ello con el fin de facilitar la lectura y comprensión del código.

Una vez dicho esto... sientete libre de hacerlo como prefieras.

Un saludo!

Yo agrego decirte que el orden de posición de ningún método (getters, setters, otros) de una clase afecta el correcto funcionamiento de un código, y como dijo el compañero Gilding, esto es una opción de diseño de cada programador según su estilo.

Saludos!

56
 Ahora esta mucho mejor Arja  ;)

Saludos!

57
 Para los métodos get y set de la variable numeroDocumentacionIdentidad te sito lo mismo que te comente en tu ejercicio de la entrega CU00624B https://www.aprenderaprogramar.com/foros/index.php?topic=1670.0 con relación a una correcta asignación de nombres para métodos get y set.
Citar
El nombre de un método set o un método get ha de ser exactamente el mismo nombre de la variable relacionada a este, mas el prefijo get o set ante puesto a el nombre de dicha variable.

Todo lo demás esta correcto.

Saludos!

58
 Hola Aleexx1724!

No hay mucho que comentar, solo que los métodos set y get de la variable añoEdicion no tienen un nombre muy apropiado, puesto que yo como un "programador con experiencia XD" al comenzar a mirar tu método public void setEdicion(int valorEdicion){añoEdicion=valorEdicion;} o tu metodo public int getEdicion(){return añoEdicion;} interpreto que en tu código existe una variable de nombre edicion.

El nombre de un método set o un método get ha de ser exactamente el mismo nombre de la variable relacionada a este, mas el prefijo get o set ante puesto a el nombre de dicha variable, por eso aunque te cueste mas trabajo escribirlo, lo correcto es: setAñoEdicion(int valorEdicion){añoEdicion=valorEdicion;} y public int getAñoEdicion(){return añoEdicion;}.

También te recomiendo evitar el uso de las eñes "ñ" en todo codigo que diseñes y en su lugar usar otro recurso, como podría ser "ni" (añoEdicion-aniioEdicion, pañuelo-paniuelo, ext...) ya que el uso de "ñ" en códigos muy extensos podría generar problemas.

A esepcion de esto comentado, tu ejercicio esta correcto y puedes continuar avanzando teniendo esto presente en tus futuros ejercicios.

Saludos!

59
 Hola Arja!

Aunque tu programa funciona correctamente en relación a lo que pide el enunciado, (comprobar dimensiones) en tu código se pueden notar algunos puntos que se pueden corregir.

1ro: Declaras las variables como public. Lo correcto es declarar toda variable como private y no como public, mas adelante conforme avances en el curso veras en que circunstancias es preferible declarar una variable como public o private o protected, por ahora y mientras no domines este tema, acostúmbrate a declarar toda variable como private.

2do: En el constructor de la clase, a las variables de tipo double le agregas una "d" al final del valor inicial asignado, (diametro = 0.0d;) esto no es que sea incorrecto pero si es opcional, agregar o no agregar la "d" al final no afecta el funcionamiento del código, a diferencia de las variables de tipo float donde si es obligatorio incluir una "f" al final para que el compilador no arroje un error de tipo: incompatible types. interpretando que estamos intentando asignar un valor booleano (0.0) a una variable que espera un valor float. (0.0f) Esto te lo comento solo para que tengas conocimiento sobre el asunto, pero en tu codigo es opcional que uses 0.0 y/o 0.0d.

3ro: Los nombres que asignas a los métodos setters no son de un todo correctos, el nombre de un método set o un método get ha de ser exactamente el mismo nombre de la variable relacionada a este, mas el prefijo get o set ante puesto a el nombre de dicha variable.
Ejemplo: setDiametro(double valorDiametro); en lugar de setValorDiametro(double valorDiametro); para la variable diametro donde valorDiametro es el nombre de un parámetro requerido por este método y que no debe de tener relación con el nombre del método en si.

4to: No has incluido los métodos getters en este ejercicio, a parte de que el enunciado lo requiere, acostumbrarte a incluir los metodos getters correspondientes a cada clase, te ayudara mucho en tus futuros códigos, mi consejo es que siempre incluyas los métodos setter y getters correspondientes en todas las clases que diseñes.

En cuanto al uso de condicionales if else y if con else if, veo que lo has dominado muy bien en este ejercicio.

Corrige estos puntos en tus futuros ejercicios y continua adelante.

Saludos!

60
 Hola  xBag!

Con relación a lo que pide el enunciado del ejercicio te comento que aunque tu programa realiza la tarea requerida, no has cumplido del todo lo que se pide en el enunciado del ejercicio, no has usado el método substring y en su lugar has usado el método startsWith. No es que esto este mal pero aparte de que no cumples del todo con el ejercicio, el método substring el cual no usas es muy útil para este ejercicio y mas adelante te mostrare como usarlo para aumentar la eficiencia de tu programa.

Con relación a tu código en general, te comento lo siguiente.

El nombre de la clase no es muy apropiado, el nombre de una clase debe de ser descriptivo de lo que es o lo que hace. Aunque tal vez solo elegiste un nombre para tu clase sin pensar en esto, es bueno que tengas esto presente siempre que estés buscando un nombre para una clase.

En el método main, tienes la variable local PalabraEscrita (y todas las demás variables), el nombre de una variable debe de comenzar preferiblemente con letra minúscula, (palabraEscrita) aunque esto no afecta la funcionalidad del código, si estas usando un standar de programación entre programadores que han convenido que esto debe de ser así en todo código java.

Con relación a tu duda:
Citar
Me surgió la duda, puedo hacer que el programa SE DETENGA, en caso de que durante el "For", en la pregunta 3 o 4 o cual sea, yo escriba "Salir" ? Lo intenté y fracasé alguien me ayuda?
Para tu bucle finalizar es necesario que la variable i alcance un valor mayor a 10, para lograr lo que quieres bastaría con igualar el valor de i a (un numero mayor que 10) 11 mediante un condicional if usando como condición que el valor de la variable palabraEscrita sea igual a el String "Salir".

A continuación dejo un nuevo código creado a partir de tu clase Vereda, con comentarios incluidos en cada cambio y/o mejora.
Código: [Seleccionar]
import java.util.Scanner;
public class AnalizarPalabra
{
    public static void main (String [] args)
    {
        String palabraEscrita = "";
        for (int i=0;i<10;i++){//Indicamos el tipo dinámico (int) de i en el mismo bucle for
            System.out.println("Introduzca una palabra: ");
            Scanner palabra = new Scanner(System.in);
            palabraEscrita = palabra.next();
            if(!palabraEscrita.equals("salir"))//El operador ! antes de la condición, niega el valor de esta, se leería: Si la palabra escrita NO ES IGUAL a salir.
            {
               System.out.println("La palabra \"" + palabraEscrita + "\" " + "ha sido introducida");
            }
            int largo = palabraEscrita.length();
            boolean inicio = false;
            if(palabraEscrita.substring(0,1).equalsIgnoreCase("a")){inicio = true;}/*Usamos el método subString para analizar la primera letra de la palabra escrita
            y usamos el método equalsIgnoreCase(String str); para que el programa ignore diferencia de mayúsculas y minúsculas ("a" o "A")*/
            if(palabraEscrita.equals("salir"))//Este condicional finalizaría el bucle en caso de cumplirse, puesto que asignara a "i" un valor mayor que 10.
            {
                i += 11; System.out.println("\fPrograma finalizado...");//Usar el operador += en esta linea es lo mismo que decir: i  = i + 11;
            }
            else  if (largo<5 && inicio){System.out.println("Tiene menos de 5 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));/*Extraemos
                la primera letra de la palabra escrita, podria ser "a" o "A"*/
            }else if (largo<5 && !inicio){System.out.println("Tiene menos de 5 caracteres y NO empieza por la letra a/A");//Usamos el operador ! en lugar de == false/true
            }else if (largo<=15 && inicio){System.out.println("Tiene entre 5 y 15 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));
            }else if (largo<=15 && !inicio){System.out.println("Tiene entre 5 y 15 caracteres y NO empieza por la letra a/A");
            }else if (largo>15 && inicio){System.out.println("Tiene más de 15 caracteres y empieza por la letra: " + palabraEscrita.substring(0,1));
            }else if (largo>15 && !inicio){System.out.println("Tiene más de 15 caracteres y NO empieza por la letra a/A");
            }
        }
    }
}
Espero que encuentres algo útil.

Saludos!

Páginas: 1 2 [3] 4 5 6 7 8 ... 13

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