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:
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 !!