Autor Tema: Ejercicio CU00630B ejemplo código Java con menú e introducir datos por consola  (Leído 7855 veces)

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Hola a todos!!!

Vengo a hacer una entrega de este ejercicio con el siguiente enunciado:

Considera estás desarrollando un programa Java donde necesitas trabajar con objetos de tipo DiscoMusical. Define las signaturas para métodos dentro dicha clase e indica si deberán ser procedimientos o funciones para los siguientes objetivos planteados:

1) Obtener la duración de una canción expresada como un número decimal en minutos (por ejemplo podría ser 3,22 minutos) recibiendo como dato el número de canción dentro del disco.

2) Pedir a un administrador de una compañía discográfica que introduzca la duración de todas las canciones (dichas duraciones se almacenarán como información del objeto). Es decir, el método se encargará de saludar al usuario y pedirle que vaya introduciendo una por una la duración de las canciones.

3) Obtener la duración del disco completo (suma de las duraciones de cada una de las canciones).

4) Añadir una canción al disco recibiendo como información para ello el título de la canción y su duración (se añadirá como última canción en el disco. Si el disco tenía por ejemplo 10 canciones, al añadirse una canción pasará a tener 11).


Bien, hice el programa a mi estilo (pero claro, siguiendo según entendí el enunciado lo que piden!) Nos están pidiendo ahora ingresar los datos de cada disco al programa... Imagine un menú donde el usuario elija que acción realizar y demás! para los temas musicales, decidí crear un arreglo para los nombres, y otro arreglo para la duración de cada canción (Un arreglo bidimensional... también podía ser...) para el menú, cree una variable char para que el usuario ingresara la opción que quería ejecutar, al elegir el usuario la opción, use algo que no suelo utilizar... en la Universidad la profe se enojaba porque no me veía usarlo nada... se trata de la sentencia Switch, decidí usarlo por practica, razón principal porque sigo el curso! los arreglos tendrán un máximo de 20 espacios.

El constructor contrendra las variables nombreDisco, autor, formato, indiceCancion, duracion, nombreCancion y duracionCancion. Sera los atributos que contendrá cada objeto que creemos.

Aquí presento el código:
Código: [Seleccionar]
package DiscMan;
import java.util.Scanner;

public class DiscoMusical {
    private String nombreDisco, autor, formato, nombreCancion[];
    private int indiceCancion;
    private double duracion, duracionCancion[];
    private static int salir, elige, num, full;
    private static char opcion;
   
    public DiscoMusical(){
        nombreDisco = "";
        autor = "";
        formato = "";
        duracion = 0;
        indiceCancion = 0;
        nombreCancion = new String [20];
        duracionCancion = new double [20];
    }
   
   
    public static void main (String[]args){
    String data;
    int can = 0;
    DiscoMusical Disco1, Disco2, Disco3;   
    Disco1 = new DiscoMusical();
    Disco2 = new DiscoMusical();
    Disco3 = new DiscoMusical();
    Scanner in = new Scanner(System.in);   
    do{
        System.out.println("Bienvenido seas a este programa, ¿que actividad deseas ejecutar?");
        System.out.println("Ingresa A para añadir datos al disco.");
        System.out.println("Ingrese B para añadir una cancion al disco.");
        System.out.println("Ingrese C para obtener la duracion total del disco y sus datos.");
        System.out.println("Ingrese D para salir del programa");
        opcion = in.next().charAt(0);
        switch(opcion){
            case 'A':
            case 'a':
                System.out.println("***************************************************");
                System.out.println("A cual de los 3 discos deseas añadirle informacion?");
                elige = in.nextInt();
                if (elige == 1){
                    System.out.println("Has elegido el disco 1!");
                    System.out.println("Ingesa el nombre del disco 1: ");
                    data = in.next();
                    Disco1.setNombreDisco(data);
                    System.out.println("Ingresa el autor del disco 1: ");
                    data = in.next();
                    Disco1.setAutor(data);
                    System.out.println("Ingresa el formato del disco 1: ");
                    data = in.next();
                    Disco1.setFormato(data);
                    System.out.println("<------------------------------------------------->");
                    System.out.println("Ahora ingrese, ¿cuantas canciones tiene el albúm?: ");
                    num = in.nextInt();
                    if (num > 20) {
                        System.out.println("Solo se pueden almacenar un maximo de 20 canciones.");
                    }
                    else {
                    Disco1.setIndiceCancion(num);
                    can = 0;
                    for (int i = 0; i < Disco1.getIndiceCancion(); i++){
                        can++;
                        System.out.println("Ingrese el nombre de la cancion " + can + " :");
                        Disco1.nombreCancion[i] = in.next();
                        System.out.println("Ingrese la duracion de la cancion " + can + " :");
                        Disco1.duracionCancion[i] = in.nextDouble();
                        Disco1.duracion = Disco1.duracion + Disco1.duracionCancion[i];
                    }
                    full++;
                    }
                    System.out.println("Ingreso exitoso.");
                    System.out.println("***************************************************");
                }
                else if (elige == 2) {
                    System.out.println("Has elegido el disco 2!");
                    System.out.println("Ingesa el nombre del disco 2: ");
                    data = in.next();
                    Disco2.setNombreDisco(data);
                    System.out.println("Ingresa el autor del disco 2: ");
                    data = in.next();
                    Disco2.setAutor(data);
                    System.out.println("Ingresa el formato del disco 2: ");
                    data = in.next();
                    Disco2.setFormato(data);
                    System.out.println("<------------------------------------------------->");
                    System.out.println("Ahora ingrese, ¿cuantas canciones tiene el albúm?: ");
                    num = in.nextInt();
                    if (num > 20) {
                        System.out.println("Solo se pueden almacenar un maximo de 20 canciones.");
                    }
                    else {
                    Disco2.setIndiceCancion(num);
                    can = 0;
                    for (int i = 0; i < Disco2.getIndiceCancion(); i++){
                        can++;
                        System.out.println("Ingrese el nombre de la cancion " + can + " :");
                        Disco2.nombreCancion[i] = in.next();
                        System.out.println("Ingrese la duracion de la cancion " + can + " :");
                        Disco2.duracionCancion[i] = in.nextDouble();
                        Disco2.duracion = Disco2.duracion + Disco2.duracionCancion[i];
                    }
                    full++;
                    }
                    System.out.println("Ingreso exitoso.");
                    System.out.println("***************************************************");
                }
                else if (elige == 3){
                    System.out.println("Has elegido el disco 3!");
                    System.out.println("Ingesa el nombre del disco 3: ");
                    data = in.next();
                    Disco3.setNombreDisco(data);
                    System.out.println("Ingresa el autor del disco 3: ");
                    data = in.next();
                    Disco3.setAutor(data);
                    System.out.println("Ingresa el formato del disco 3: ");
                    data = in.next();
                    Disco3.setFormato(data);
                    System.out.println("<------------------------------------------------->");
                    System.out.println("Ahora ingrese, ¿cuantas canciones tiene el albúm?: ");
                    num = in.nextInt();
                    if (num > 20) {
                        System.out.println("Solo se pueden almacenar un maximo de 20 canciones.");
                    }
                    else {
                    Disco3.setIndiceCancion(num);
                    can = 0;
                    for (int i = 0; i < Disco3.getIndiceCancion(); i++){
                        can++;
                        System.out.println("Ingrese el nombre de la cancion " + can + " :");
                        Disco3.nombreCancion[i] = in.next();
                        System.out.println("Ingrese la duracion de la cancion " + can + " :");
                        Disco3.duracionCancion[i] = in.nextDouble();
                        Disco3.duracion = Disco3.duracion + Disco3.duracionCancion[i];
                    }
                    full++;
                    }
                    System.out.println("Ingreso exitoso.");
                    System.out.println("***************************************************");
                }
                else
                    System.out.println("No se encuentra el disco.");
                System.out.println("***************************************************");
            break;
            case 'B':
            case 'b':   
                System.out.println("Elige a cual disco quieres agregarle una nueva cancion: ");
                elige = in.nextInt();
                if (elige == 1){
                    if (Disco1.indiceCancion >= 20){
                        System.out.println("Se ha llegado al limite de canciones.");
                    }
                    else{
                    System.out.println("***************************************************");
                    Disco1.indiceCancion++;
                    System.out.println("Ingrese el nombre de la nueva cancion: ");
                    Disco1.nombreCancion[Disco1.indiceCancion] = in.next();
                    System.out.println("Ingrese la duracion de la nueva cancion: ");
                    Disco1.duracionCancion[Disco1.indiceCancion] = in.nextDouble();
                    Disco1.duracion = Disco1.duracion + Disco1.duracionCancion[Disco1.indiceCancion];
                    System.out.println("***************************************************");
                    }
                }
                else if (elige == 2){
                    if (Disco2.indiceCancion >= 20){
                        System.out.println("Se ha llegado al limite de canciones.");
                    }
                    else{
                    System.out.println("***************************************************");
                    Disco2.indiceCancion++;
                    System.out.println("Ingrese el nombre de la nueva cancion: ");
                    Disco2.nombreCancion[Disco2.indiceCancion] = in.next();
                    System.out.println("Ingrese la duracion de la nueva cancion: ");
                    Disco2.duracionCancion[Disco2.indiceCancion] = in.nextDouble();
                    Disco2.duracion = Disco2.duracion + Disco2.duracionCancion[Disco2.indiceCancion];
                    System.out.println("***************************************************");
                    }
                }
                else if (elige == 3){
                    if (Disco3.indiceCancion >= 20){
                        System.out.println("Se ha llegado al limite de canciones.");
                    }
                    else{
                    System.out.println("***************************************************");
                    Disco3.indiceCancion++;
                    System.out.println("Ingrese el nombre de la nueva cancion: ");
                    Disco3.nombreCancion[Disco3.indiceCancion] = in.next();
                    System.out.println("Ingrese la duracion de la nueva cancion: ");
                    Disco3.duracionCancion[Disco3.indiceCancion] = in.nextDouble();
                    Disco3.duracion = Disco3.duracion + Disco1.duracionCancion[Disco3.indiceCancion];
                    System.out.println("***************************************************");
                    }
                }
                else
                    System.out.println("No se encuentra el disco.");
                System.out.println("***************************************************");                         
            break;
            case 'C':
            case 'c':
                System.out.println("***************************************************");
                System.out.println("¿A cual disco quieres elegir para ser su informacion?: ");
                elige = in.nextInt();
                if(elige == 1){
                   System.out.println(Disco1.getNombreDisco());
                   System.out.println(Disco1.getAutor());
                   System.out.println(Disco1.getFormato());
                   System.out.println("Duracion del disco 1: " + Disco1.duracion);
                   System.out.println("Canciones del disco ( canciones: " + Disco1.getIndiceCancion() + "): ");
                   for(int i = 0; i <= Disco1.getIndiceCancion(); i++){
                       System.out.println(Disco1.nombreCancion[i]);
                   }
                   System.out.println("***************************************************");
                }
                else if (elige == 2){
                   System.out.println(Disco2.getNombreDisco());
                   System.out.println(Disco2.getAutor());
                   System.out.println(Disco2.getFormato());
                   System.out.println("Duracion del disco 1: " + Disco2.duracion);
                   System.out.println("Canciones del disco ( canciones: " + Disco2.getIndiceCancion() + "): ");
                   for(int i = 0; i <= Disco2.getIndiceCancion(); i++){
                       System.out.println(Disco2.nombreCancion[i]);
                   }
                   System.out.println("***************************************************");
                }
                else if (elige == 3){
                   System.out.println(Disco3.getNombreDisco());
                   System.out.println(Disco3.getAutor());
                   System.out.println(Disco3.getFormato());
                   System.out.println("Duracion del disco 1: " + Disco3.duracion);
                   System.out.println("Canciones del disco ( canciones: " + Disco3.getIndiceCancion() + "): ");
                   for(int i = 0; i <= Disco3.getIndiceCancion(); i++){
                       System.out.println(Disco3.nombreCancion[i]);
                   }
                   System.out.println("***************************************************");
                }
                else
                    System.out.println("No se encuentra el disco.");
                System.out.println("***************************************************");
            break;
            case 'D':
            case 'd':
                salir++;
            break;
            default:
                System.out.println("El caracter que has introducido no es valido.");
            break;
        }
    }while(salir < 1);
    System.out.println("Gracias por tu atencion. <( º c º )> ");
    }
   
    public void setNombreDisco(String ingresoNombreDisco){
        nombreDisco = ingresoNombreDisco;
    }
   
    public void setAutor(String ingresoAutor){
        autor = ingresoAutor;
    }
   
    public void setFormato(String ingresoFormato){
        formato = ingresoFormato;
    }
   
    public void setIndiceCancion(int ingresoIndiceCancion){
        indiceCancion = ingresoIndiceCancion;
    }
   
    public int getIndiceCancion(){
        return indiceCancion;
    }
   
    public String getNombreDisco(){
        return nombreDisco;
    }
   
    public String getAutor(){
        return autor;
    }
   
    public String getFormato(){
        return formato;
    }
}

Utilize metodos y funciones a la vez como se puede apreciar... tengo un pequeño inconveniente a la hora de imprimir mi arreglo... a continuación se muestra:



Aquí se puede apreciar la ejecución del menú principal del programa.




*Elegimos la primera opción, claramente porque no tenemos ningún dato en el disco. Si apretáramos de una vez la tecla C se nos imprimiría todos los datos vacíos (o nulos).

*Como acto siguiente nuestro programa nos preguntara cual disco vamos a ingresarle los datos... aquí como podemos apreciar, estamos eligiendo uno de los 3 objetos ya creados de la clase DiscoMusical. Si llegáramos a teclear un numero mayor a 3, nuestro programa respondería mandando el siguiente mensaje: "No se encuentra el disco.".

*Luego de ingresar los datos, el programa nos preguntara cuantas canciones nuestro disco tendrá. Esto sera el indice de los arreglos que declare mas arriba....





Aquí como se puede ver, elegimos la opción B que es agregar una canción mas al disco. Aquí lo que se necesitaba hacer era sumarle 1 a nuestra variable indiceCancion del objeto para poder agregarle un dato mas. Cada vez que aprieto B se le sumara, hasta el limite que es 20.




Aqui solo se ve cuando le estamos añadiendo datos al objeto 2.


Bueno, aquí va el pequeño inconveniente y las preguntas:



*Mi duración... tiene un montón de números a la derecha! En visual basic, para no imprimir esos numerotes, uso la funcion format.. en powerbuilder también (que por cierto es super similar al visual basic):

Visual Basic: textbox1.text = Format(total,"#.00")
PowerBuilder: st_num.text = String(total, "#.00")

Mi pregunta seria, ¿que escribo para que java me redondee a dos decimales?

*El programa me cuenta bien las canciones que he agregado, me imprime todos los nombres... pero, ¿Porque me sale ese null?, la verdad busque y busque cual pudo ser ese error... pero no pude ver que hice mal... si igualo la variable i del for a 1 me imprimira 2 canciones en vez de las 3... :S

Agradecería mucho su ayuda! Muchas gracias por cierto, yo no sabia como manejar perfectamente las clases, constructores y demás!! Gracias a ustedes mi duda se ha esclarecido !!  ;D
« Última modificación: 08 de Marzo 2015, 20:58 por Alex Rodríguez »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Dan_SB

Antes de comentar tu clase DiscoMusical, quiero decirte lo siguiente:
Este ejercicio, no era práctico, (no había que construir ninguna clase), era un ejercicio de preguntas y respuestas.

En esta lección se trata del (Concepto de signatura en Java)
Tu tienes que construir 4 signaturas para los métodos del  1) al 4)   propuestos en el enunciado.
En la lección se explica que es una sigunatura de método y varios ejemplos de ello.
Ese era el trabajo de esta lección, y para pasar al siguiente tema, deberías tener este concepto claro.

----------
Dicho lo anterior, ahora comento tu código:

En primer lugar he de decirte que elogio tu dedicación en la confección de este programa. Se nota que tienes una idea de lo que vas a hacer, y te pones a ello.

Verás que avanzando en este curso, podrás crear una versión de tu programa de la que estarás orgulloso. Por ahora te faltan conceptos y algo de práctica que ganarás con los próximos ejercicios.

Pero, siempre hay un pero. Has construido tu programa con pequeñas deficiencias, teóricas y prácticas.

Aquí va una pequeña lista:

. La clase DiscoMusical incluye el main. Ineficiente.
En Java, cualquier proyecto consta de varias clases. Solo una de ellas tendrá el main, las otras son usadas por el main para llevar a cabo la tarea.

. Creas un main extenso. Ineficiente. El director de una empresa no se pone a fabricar componentes o envasar el producto. El director, da órdenes y controla el funcionamiento general.

. Creas atributos de la clase sin métodos set y get. Como el main está en la misma clase, manipulas los atributos directamente.
Bajo este concepto tampoco debías crear los métodos set y get del resto de los atributos.

. El método next() de la clase Scanner toma el espacio en blanco como separador de las entradas. Eso te obliga a escribir RamonRamirez o Ramon_Ramirez  en lugar de Ramon Ramirez.
Si no, lo toma como dos entradas del teclado distintas.
El método nextLine() acepta el espacio en blanco y usa la tecla ENTER como separador de las entradas desde teclado.

. Hay código repetido. Ineficiente. Si en tu clase vas a trabajar con tres discos, repites el código una vez para cada disco.

. Por último, cuando usas la opción C para mostrar los datos, sucede lo siguiente.
Si tu disco tiene 3 canciones, en el contador vas desde 0 hasta 3, que son 4 pasos. El último dato siempre sera null, pues ese elemento del array no se ha inicializado.


Final del mensaje.
Quisiera que intentes responder al enunciado del ejercicio, el de crear las signaturas.
Y en cuanto al programa, guárdalo. Verás que dentro de poco podrás presentar tu proyecto DiscoMusical eficiente al 100%

Saludos

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Huy... que pena, mil disculpas por mi falta de atención... por eso mismo vine aquí a ver en que mejoro.. la verdad que esa profe del cuatrimestre pasado solo programaba en un main, me esforzare un poco mas..  :-[

Una preguntita, cuando hablas de signaturas a que se refiere? :-\

"Luchar por tus sueños y cumplirlos... eso es vivir.."

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Dan_SB

En el texto de esta lección, encontrarás estas dos signaturas sobre un fondo gris.

    float calcularCapacidadDeposito ()

    float calcularCapacidadDeposito (float valorDiametro, float valorAltura)

Todo el texto alrededor de estas signaturas te hablan de que es y en que consiste una signatura. Solo tienes que estudiarlo. Y si hay algo que no entiendes, lo preguntas aquí y te ayudamos.

Saludos

 

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