Autor Tema: DiscMan 3 (final), despedida temporal de java! Ejemplo System.exit(0) Java  (Leído 3834 veces)

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Muy buenas tardes!

Primero que nada, muchas gracias a todas las personas y moderadores que tuvieron la paciencia para corregir mis códigos y enseñarme muchísimas cosas nuevas sobre Java, créanme que ahora soy totalmente distinto de que cuando entre a esta pagina por primera vez. Vengo a mostrar en esta tarde mi ultimo código de java (temporalmente, claro ;) ) que estaba pendiente... algo que empezó como una metida de pata y propuse remediarlo mas adelante..!

Les mostrare mi versión final de DiscMan, las cosas nuevas que verán ahora son:
1. Cada disco (o objeto), tendrá un ID especifico que lo identifique, así es, se trata de un atributo nuevo de la clase DiscoMusical.
2. 3 métodos nuevos en la clase DiscoMusical.
3. Experimente con algo que no conocia antes, el System.exit(0); . . .

Lo que mas me dejo satisfecho ahora, es que ya no necesito repetir código para cada objeto. . . puedo tener 25 objetos, y realizar lo que yo deseo sin repeticiones como códigos anteriores...

Este era el antiguo:
Citar
switch(elige){
                case 1:
                    System.out.println("--------------------------------------------");
                    System.out.println("Has elegido el disco 1!: ");
                    MenuOperaciones();
                    if(opcion == 'A'||opcion == 'a'){Disco1.setNombreDisco(); Disco1.setAutor(); Disco1.setFormato(); Disco1.setCanciones();}
                    else if(opcion == 'B'||opcion == 'b'){
                    System.out.println("Nombre del disco: " + Disco1.getNombreDisco());
                    System.out.println("Nombre del autor: " + Disco1.getAutor());
                    System.out.println("Nombre del formato: " + Disco1.getFormato());
                    System.out.println("Canciones: ");
                    Disco1.getCanciones();}
                    else if(opcion == 'C'||opcion == 'c'){ System.out.println("Saliendo... "); sal1 = true;}
                    else
                        System.out.println("Opcion desconocida. Intente de nuevo.");
                        System.out.println("                                     ");
                    System.out.println("--------------------------------------------");
                break;
                case 2:
                    System.out.println("--------------------------------------------");
                    System.out.println("Has elegido el disco 2!: ");
                    MenuOperaciones();
                    if(opcion == 'A'||opcion == 'a'){Disco2.setNombreDisco(); Disco2.setAutor(); Disco2.setFormato(); Disco2.setCanciones();}
                    else if(opcion == 'B'||opcion == 'b'){
                    System.out.println("Nombre del disco: " + Disco2.getNombreDisco());
                    System.out.println("Nombre del autor: " + Disco2.getAutor());
                    System.out.println("Nombre del formato: " + Disco2.getFormato());
                    System.out.println("Canciones: ");
                    Disco2.getCanciones();}
                    else if(opcion == 'C'||opcion == 'c'){ System.out.println("Saliendo... "); sal1 = true;}
                    else
                        System.out.println("Opcion desconocida. Intente de nuevo.");
                        System.out.println("                                     ");
                    System.out.println("--------------------------------------------");
                break;
                case 3:
                    System.out.println("--------------------------------------------");
                    System.out.println("Has elegido el disco 3!: ");
                    MenuOperaciones();
                    if(opcion == 'A'||opcion == 'a'){Disco3.setNombreDisco(); Disco3.setAutor(); Disco3.setFormato(); Disco3.setCanciones();}
                    else if(opcion == 'B'||opcion == 'b'){
                    System.out.println("Nombre del disco: " + Disco3.getNombreDisco());
                    System.out.println("Nombre del autor: " + Disco3.getAutor());
                    System.out.println("Nombre del formato: " + Disco3.getFormato());
                    System.out.println("Canciones: ");
                    Disco3.getCanciones();
                    }
                    else if(opcion == 'C'||opcion == 'c'){ System.out.println("Saliendo... "); sal1 = true;}
                    else
                        System.out.println("Opcion desconocida. Intente de nuevo.");
                        System.out.println("                                     ");
                    System.out.println("--------------------------------------------");
                break;
                default:
                    System.out.println("No se reconoce la opcion insertada. Intente de nuevo.");
                    System.out.println("                                                     ");
                break;
            }

Bueno, aquí las clases del programa:
Clase Lectores: No cambio absolutamente nada.
Código: [Seleccionar]
package Discos;
import java.util.Scanner;

public class Lectores {     
    public Lectores(){} 
    public String LeerCadena(){
        Scanner in = new Scanner(System.in);       
        return in.nextLine();
    }
   
    public Double LecturaDecimal(){
        Scanner in = new Scanner(System.in);
        return in.nextDouble();
    }
   
    public int LecturaEntero(){
        Scanner in = new Scanner(System.in);
        return in.nextInt();
    }
   
    public char LecturaChar(){
        Scanner in = new Scanner(System.in);
        return in.next().charAt(0);
    }
}

Clase DiscoMusical: Se les agrego atributo ID_DISCO, el metodo equals, las funciones redondear y toString.
Código: [Seleccionar]
package Discos;

public class DiscoMusical{
 private String nombreDisco, autor, formato, nombreCancion[]= new String[19], ID_DISCO;
    private double duracion, duracionCancion[] = new double[19];
    private int numeroCanciones;
   
    public DiscoMusical(){
        nombreDisco = "";
        autor = "";
        formato = "";
        duracion = 0;
        ID_DISCO = "";
        numeroCanciones = 0;
        nombreCancion = new String[]{"","","","","","","","","","","","","","","","","","","",""};
        duracionCancion = new double[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};     
    }   
   
     public void setNombreDisco(){
        System.out.println("--------------------------------------------");
        Lectores leer = new Lectores();
        System.out.println("Ingrese el nombre del disco: ");
        nombreDisco = leer.LeerCadena();
    }
     
     public void setAutor(){
         Lectores leer = new Lectores();
         System.out.println("Ingrese el nombre del autor de este disco: ");
         autor = leer.LeerCadena();
     }
     
     public void setFormato(){
         Lectores leer = new Lectores();
         System.out.println("Ingrese el formato del disco: ");
         formato = leer.LeerCadena();
     }
     
     public void setID_Disco(){
         Lectores leer = new Lectores();
         System.out.println("Ingrese el ID del disco: ");
         ID_DISCO = leer.LeerCadena();
     }
     
     public void setCanciones(){
         Lectores leer = new Lectores();
         do{
         System.out.println("¿Cuantas canciones son?: ");
         numeroCanciones = leer.LecturaEntero();
         if(numeroCanciones > 20){System.out.println("Solo se pueden ingresar hasta 20 temas musicales. \nIntente de nuevo.");
         System.out.println("                                     ");
         }
         }while(numeroCanciones > 20);
         for (int i = 0, j = 1; i < numeroCanciones; i++, j++){
         System.out.println("Ingrese el nombre de la cancion numero " + j + ": ");
         nombreCancion[i] = leer.LeerCadena();       
         System.out.println("Ingrese la duracion de la cancion numero " + j + ": ");
         duracionCancion[i] = leer.LecturaDecimal();
         duracion = duracion + duracionCancion[i];
     }
         System.out.println("Datos Listos!.");
         System.out.println("--------------------------------------------");
     }
     
     public boolean Equals(Object obj){
         if(obj instanceof DiscoMusical){
         DiscoMusical temp = (DiscoMusical)obj;
         if(this.ID_DISCO.equals(temp.ID_DISCO)) return true;
         else return false;
         }
         else return false;
     }
             
     public String getNombreDisco(){return nombreDisco;}   
     public String getAutor(){return autor;}   
     public String getFormato(){return formato;}   
     public String getID_Disco(){return ID_DISCO;}
     
     public double Redondear(double numero,int digitos){
      int cifras=(int) Math.pow(10,digitos);
      return Math.rint(numero*cifras)/cifras;
}   
     public void getCanciones(){
         System.out.println("\nCanciones del disco: ");
         for (int i = 0, j = 1; i < numeroCanciones; i++, j++){
             System.out.println(j + ". " + nombreCancion[i] + " (Duracion: " + Redondear(duracionCancion[i],2) + ").");
         }
         System.out.println("*************************************************************************");
         System.out.println("Duracion total del disco: " + Redondear(duracion,2));
         System.out.println("-------------------------------------------------------------------------");
     }
     public String toString(){
         return "ID del disco: ".concat(ID_DISCO).concat("\nNombre del disco: ").concat(nombreDisco).concat("\nAutor: ").concat(autor).concat("\nFormato: ").concat(formato);
     }
}


Clase Menú: El único que recibió un cambio drástico...
Código: [Seleccionar]
package Discos;
import java.util.Iterator;
import java.util.ArrayList;

public class Menu {
    Lectores leer = new Lectores();
    DiscoMusical Disco1 = new DiscoMusical();
    DiscoMusical Disco2 = new DiscoMusical();
    DiscoMusical Disco3 = new DiscoMusical();
    ArrayList <DiscoMusical> listaDisco = new ArrayList <>();
    int elige; String opcion; boolean ingresoInicial = false;
   
    public void MenuPrincipal(){
        listaDisco.add(Disco1); listaDisco.add(Disco2); listaDisco.add(Disco3);
        while(true){
        System.out.println("Bienvenido a la ultima version de DISCMAN!!\nEscriba Si continuar, de lo contrario, escriba Salir.");                 
        opcion = leer.LeerCadena();
        if(opcion.equalsIgnoreCase("Si")){           
            if(ingresoInicial == false){
            int num = 1, cont = 0;
            System.out.println("Para continuar, se necesita ingresar el ID del disco: ");           
            for(DiscoMusical aux1: listaDisco){             
                System.out.println("Disco numero " + num++ + ":");               
                do{
                aux1.setID_Disco(); cont = 0;
                for(int i =0; i < listaDisco.size(); i++){
                    if(aux1.Equals(listaDisco.get(i))){cont++;}}
                if(cont > 1) System.out.println("Ha ingresado un ID repetido, ingrese otro diferente.");
                }while(cont != 1);}
            }
            ingresoInicial = true;
            MenuOperaciones();
            }   
        else if(opcion.equalsIgnoreCase("Salir")){ System.out.println("Hasta luego!"); System.exit(0);}
        else System.out.println("Caracter desconocido, intente de nuevo.");             
}}
   
    public void MenuOperaciones(){       
        while(opcion.equalsIgnoreCase("D") == false){
            System.out.println("\n¿Que accion deseas ejecutar?:");
            System.out.println("A)Ingresar datos a un disco.\nB)Imprimir datos de un disco.\nC)Imprimir todos los datos de los discos.\nD)Salir de este menu.");
            opcion = leer.LeerCadena();
            switch(opcion){
                case "a":
                case "A": boolean detectado = false;
                    System.out.println("Escriba el ID del disco al que se le va a ingresar datos: ");
                    while(detectado != true){
                        opcion = leer.LeerCadena();
                        for(int i = 0; i<listaDisco.size(); i++){
                            if(listaDisco.get(i).getID_Disco().equals(opcion)){
                                listaDisco.get(i).setNombreDisco(); listaDisco.get(i).setAutor(); listaDisco.get(i).setFormato(); listaDisco.get(i).setCanciones();
                                detectado = true;
                            }
                        }if(detectado == false){System.out.print("No se ha encontrado el ID ingresado, intente de nuevo: ");}}
                    System.out.println();
                break;
                case "b":
                case "B": detectado = false;
                    System.out.println("Escriba el ID del disco para mostrar sus datos: ");
                    while(detectado != true){
                    opcion = leer.LeerCadena();
                    for(int i = 0; i<listaDisco.size(); i++){
                        if(listaDisco.get(i).getID_Disco().equals(opcion)){
                            System.out.println(listaDisco.get(i).toString());
                            listaDisco.get(i).getCanciones(); detectado = true;
                        }
                    }if(detectado == false){System.out.print("No se ha encontrado el ID ingresado, intente de nuevo: ");}}
                    System.out.println();
                break;
                case "c":
                case "C":
                    Iterator <DiscoMusical> recorre = listaDisco.iterator();
                    while(recorre.hasNext()){
                        DiscoMusical temp = recorre.next();
                        System.out.println(temp.toString()); temp.getCanciones();
                        System.out.println();
                    }
                break;
                case "d":
                case "D": System.out.println("Saliendo . . . \n"); MenuPrincipal(); break;
                default: System.out.println("Opcion desconocida."); break;
            }
        }
    }     
}

Para el menú como se ve, ahora cada acción que quiera realizar, tengo que escribir el ID del disco que quiero modificar. Con el método equals evito la repetición de ID's en el programa y ahorrarme un crash:
Citar
do{
                aux1.setID_Disco(); cont = 0;
                for(int i =0; i < listaDisco.size(); i++){
                    if(aux1.Equals(listaDisco.get(i))){cont++;}}
                if(cont > 1) System.out.println("Ha ingresado un ID repetido, ingrese otro diferente.");
                }while(cont != 1);}

Esta parte compara cada objeto con otro con un for, obviamente conseguirá un ID igual porque llegara un momento que va a comparar con el mismo objeto, mi solución para eso fue colocarle un contador que cuente las veces que los ID fueron iguales. Si el contador conto 2 veces una repetición, el programa avisara que hay un ID repetido... y como la condición del while sigue cumpliéndose (cont es distinto a 1..), retornara de nuevo al inicio (contador vuelve a ser igual a 0) y el usuario tendra que ingresar otro ID.

Los redondeos ahora se valen, puedo redondear ahora con 2 cifras, el metodo toString() ahora se incorpora para imprimir los datos de cada objeto!

Ya lo demás funciona exactamente igual como antes, publico una prueba rápida en breve!
« Última modificación: 01 de Mayo 2015, 08:12 por Mario R. Rancel »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Re:DiscMan 3 (final), despedida temporal de java!
« Respuesta #1 en: 29 de Abril 2015, 22:52 »
Se me olvido colocar la clase main (Que es exactamente igual por cierto):
Código: [Seleccionar]
package Discos;
public class Main {
    public static void main(String[]args){
        Menu main = new Menu();
        main.MenuPrincipal();
    }
}

Bueno, aquí la ejecución:

Este es el menu inicial. Como se puede ver, para continuar con el programa, debo teclear un "Si", y para salir, teclear "Salir".


Continuamente se nos piden los ID's de los discos (Si  es primera vez):


Al terminar pasamos al menu con las siguientes opciones:


Voy a cargar datos, asi que elegi la A. Seguidamente nos pregunta cual disco vamos a ingresarle los datos, tenemos que ingresar su ID:


Lo demás funciona exactamente igual como pueden ver.


Cargue datos  a los 3 objetos, ahora quiero ver los datos del disco 2, y aquí se muestran:


Y si apretamos la opcion C, se imprimiran todos los datos de cada objeto:


Cosas que ocurren si hacemos algo incorrecto:

Escribir algo fuera de "Si" o "Salir" al inicio:


Repetir un ID:


Colocar una opción fuera del menú de operaciones:


Colocar un ID desconocido (cadena de caracteres que no hayas ingresado):


Intentar ingresar en un disco mas de 20 temas musicales:


El redondeo no funciono a la perfección... es algo que me quedara de tarea, pero me siento bien con estos resultados :)

Dejo claro otra vez que esto es temporal, no es que abandonare el foro, solo es Java. Quiero explorar eso del html y el CSS, y claro... espero que me vuelvan apoyar con su paciencia!  :P

Esta demás decir que colaborare en lo que pueda de mi parte!
Saludos!  ;)
"Luchar por tus sueños y cumplirlos... eso es vivir.."

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:DiscMan 3 (final), despedida temporal de java! Aplauso
« Respuesta #2 en: 01 de Mayo 2015, 08:30 »
Hola Dan! Felicitarte por haber completado el curso Java. Es cierto que gracias a todas las personas que colaboran has contado con ayuda, pero has sido tú quien lo ha hecho, así que enhorabuena.


Creo que sí, que ahora eres distinto, en distintos aspectos, eso por un lado se puede observar pero por otro lado eres tú el único que lo sabe verdaderamente.

Ahora DiscMan ya no es lo que era, es mejor. Y lo mejor de todo es que como tú dices eres capaz de diseñar código de forma más eficiente. No voy a comentar el código, está muy bien. Todavía podrás mejorarlo en el futuro, ya habrás oído que los programadores tienen que estar formándose y mejorando toda la vida...

Esperamos que nos ayudes en los foros respondiendo en aquellos temas donde puedas participar y quizás más adelante uniéndote al "foro´s team", y con seguridad que tendrás apoyo con todo lo que emprendas por parte de quienes participamos de los foros.

Saludos
« Última modificación: 02 de Mayo 2015, 11:44 por Alex Rodríguez »

 

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