sábado, 8 de noviembre de 2014

Ejercicio Examen Discos

import javax.swing.*;
public class Ejercicio1{
   public static void main(String args[]){
      //Declaracion de variables que se piden
      String nombreAutor,tituloDisco,generoDisco;
      double pvpDisco;
      int numeroAutores,duracionDisco;
      //Declaracion de variables que se devuelven
      //Como supongo que como minimo se introduce un autor,inicializo algunos datos
      String autorMasDiscos="",generoMenosDiscos,autorMayorDuracionMedia="";
      int mayorNumeroDiscos=0,contArtistasDiscoPrecioMenorUno=0;
      double mayorDuracionMedia=0.0,numeroMedioDiscosPorArtista;
      //Declaracion de variables auxiliares
      int contDiscos=0,contGeneroJazz=0,contGeneroPop=0,contGeneroRock=0,menorDiscosGenero,contTotalDiscos=0;
      boolean hayDiscoMenosUno = false;
      double sumaDuracionDiscos = 0.0,mediaDuracionDiscos;
      final double PRECIO_MENOS_UNO = 1.0;
     
      //Se pide el numero de autores que se van a introducir
      numeroAutores = Integer.parseInt(JOptionPane.showInputDialog("Indique el número de autores que va a introducir"));
     
      //Bucle en el cual se van a leer los autores y sus discos segun el numero de autores
      //Asumo que se meterá por lo menos un autor
      for(int i=0;i<numeroAutores;i++){
         nombreAutor = JOptionPane.showInputDialog("("+(i+1)+"/"+numeroAutores+") Nombre del autor");
         tituloDisco = JOptionPane.showInputDialog("("+(i+1)+"/"+numeroAutores+") Título del disco");
         //Bucle para tomar los datos de los discos
         while(!tituloDisco.equals("fin")){ //Asumo que el usuario va a introducir "fin" en minusculas y no de otra forma
            generoDisco = JOptionPane.showInputDialog("("+(i+1)+"/"+numeroAutores+") Genero del disco "+tituloDisco); //Asumo que se va a introducir solo POP/JAZZ/ROCK y con mayusculas
            pvpDisco = Double.parseDouble(JOptionPane.showInputDialog("("+(i+1)+"/"+numeroAutores+") Precio del disco "+tituloDisco));
            duracionDisco = Integer.parseInt(JOptionPane.showInputDialog("("+(i+1)+"/"+numeroAutores+") Duracion del disco "+tituloDisco+" en segundos"));
           
            //Se va llevando la cuenta de los discos
            contDiscos++;
           
            //Se va llevando cuenta de los discos que hay de cada genero
            if(generoDisco.equals("JAZZ")){
               contGeneroJazz++;
            }
            else if(generoDisco.equals("POP")){
               contGeneroPop++;
            }
            else{
               contGeneroRock++;
            }
           
            //Se usa un interruptor para ver si el autor tiene por lo menos un disco que valga menos de 1 euro
            if(pvpDisco<PRECIO_MENOS_UNO){
              hayDiscoMenosUno=true;
            }
           
            //Se va llevando la suma de las duraciones de los discos
            sumaDuracionDiscos+=duracionDisco;
           
            //Se pide de nuevo el nombre del disco
            tituloDisco = JOptionPane.showInputDialog("("+(i+1)+"/"+numeroAutores+") Título del disco");
         }
         //Comprobar quien tiene el mayor numero de discos
         if(mayorNumeroDiscos<contDiscos){
            mayorNumeroDiscos = contDiscos;
            autorMasDiscos = nombreAutor;
         }
       
         //Si el autor tiene por lo menos un disco que cueste menos de 1 euro,se suma 1 al contador
         if(hayDiscoMenosUno){
            contArtistasDiscoPrecioMenorUno++;
         }
       
         //Se calcula la media de la duracion de los discos y a continuacion se compara con la mayor duracion media de los discos hasta ahora
         mediaDuracionDiscos = sumaDuracionDiscos/contDiscos;
         if(mayorDuracionMedia<mediaDuracionDiscos){
            mayorDuracionMedia = mediaDuracionDiscos;
            autorMayorDuracionMedia = nombreAutor;
         }
       
         //Se suma los discos para llevar la cuenta del total de discos
         contTotalDiscos+=contDiscos;
       
         //Se reinicia la variable "contDiscos" para el siguiente autor
         contDiscos = 0;
       
         //Se reinicia la variable "hayDiscoMenosUno" para el siguiente autor
         hayDiscoMenosUno = false;
       
         //Se reinicia la variable "sumaDuracionDisco" para el siguiente autor
         sumaDuracionDiscos = 0.0;
      }
     
      //Se comprueba cual genero tiene menos discos:  generoMenosDiscos<contGeneroPop  y generoMenosDiscos<contGeneroRock
      //Para ello inicializo "menorDiscosGenero" con el "contGeneroJazz" y "generoMenosDiscos" con "JAZZ" para tener una referencia
      //Si hay dos con el mismo numero,se escogera el primero
      menorDiscosGenero = contGeneroJazz;
      generoMenosDiscos = "JAZZ";
      if(menorDiscosGenero>contGeneroPop){
         menorDiscosGenero=contGeneroPop;
         generoMenosDiscos = "POP";
      }
      if(menorDiscosGenero>contGeneroRock){
         generoMenosDiscos = "ROCK";
      }
     
      //Se calcula el numero medio de discos por artista
      numeroMedioDiscosPorArtista =(double) contTotalDiscos/numeroAutores;
     
     
      //Devolucion de los datos pedidos
      JOptionPane.showMessageDialog(null,"Autor con más discos: "+autorMasDiscos+", "+mayorNumeroDiscos+
                                         " discos\nGénero con menos discos: "+generoMenosDiscos+
                                         "\nArtistas con al menos un disco con precio menor de 1€: "+contArtistasDiscoPrecioMenorUno+
                                         "\nArtista con mayor duracion media de sus discos: "+autorMayorDuracionMedia+" ("+mayorDuracionMedia+
                                         ")\nNúmero medio de discos que tienen los artistas: "+numeroMedioDiscosPorArtista);
   }
}

1 comentario:

Nota: solo los miembros de este blog pueden publicar comentarios.