Foro de elhacker.net

Programación => Java => Mensaje iniciado por: winnipu en 20 Diciembre 2014, 22:04 pm



Título: mejorar codigo
Publicado por: winnipu en 20 Diciembre 2014, 22:04 pm
Vereis estoy intentando sacar este enunciado:
Desarrollar un programa que simule un pluviómetro en el que se van registrando las precipitaciones a lo largo del año. En cualquier momento, se le pueden pedir las medias de un mes concreto o del año completo.

Utilizar constantes para especificar el mes.

Por último, crearemos una clase Actividad8 donde instanciaremos el pluviómetro, registraremos algunas precipitaciones para los distintos meses y mostraremos las medias de precipitación de todos los meses y del año.


Lo he logrado mas o menos, pero me parece que podria estar mucho mas optimizado. He picado demasiado codigo creo yo que repetitivo. Pero no quiero usar la clase hashtable, quiero hacerlo todo de un modo lo mas rudimentario posible, sin usar clases externas. Os pego lo que tengo para ver si alguien me puede decir como mejorarlo y optimizarlo.

Código:
public interface Meses {

public static final String ENERO = "Enero";
public static final String FEBRERO = "Febrero";
public static final String MARZO = "Marzo";
public static final String ABRIL = "Abril";
public static final String MAYO = "Mayo";
public static final String JUNIO = "Junio";
public static final String JULIO = "Julio";
public static final String AGOSTO = "Agosto";
public static final String SEPTIEMBRE = "Septiembre";
public static final String OCTUBRE = "Octubre";
public static final String NOVIEMBRE = "Noviembre";
public static final String DICIEMBRE = "Diciembre";
}

Código:
import java.util.ArrayList;

public class Pluviometro implements Meses{
ArrayList<Double> arrayEnero = new ArrayList<Double>();
ArrayList<Double> arrayFebrero = new ArrayList<Double>();
ArrayList<Double> arrayMarzo = new ArrayList<Double>();
ArrayList<Double> arrayAbril = new ArrayList<Double>();
ArrayList<Double> arrayMayo = new ArrayList<Double>();
ArrayList<Double> arrayJunio = new ArrayList<Double>();
ArrayList<Double> arrayJulio = new ArrayList<Double>();
ArrayList<Double> arrayAgosto = new ArrayList<Double>();
ArrayList<Double> arraySeptiembre = new ArrayList<Double>();
ArrayList<Double> arrayOctubre = new ArrayList<Double>();
ArrayList<Double> arrayNoviembre = new ArrayList<Double>();
ArrayList<Double> arrayDiciembre = new ArrayList<Double>();

double precipitacionEnero, precipitacionFebrero, precipitacionMarzo,
precipitacionAbril, precipitacionMayo, precipitacionJunio, precipitacionJulio,
precipitacionAgosto, precipitacionSeptiembre, precipitacionOctubre,
precipitacionNoviembre, precipitacionDiciembre;



public void setPrecipitacion(String m, double precipitacion){
if (m.equalsIgnoreCase("Enero")){
arrayEnero.add(precipitacion);
precipitacionEnero = precipitacion;}

if (m.equalsIgnoreCase("Febrero")){
arrayFebrero.add(precipitacion);
precipitacionFebrero = precipitacion;}

if (m.equalsIgnoreCase("Marzo")){
arrayMarzo.add(precipitacion);
precipitacionMarzo = precipitacion;}

if (m.equalsIgnoreCase("Abril")){
arrayAbril.add(precipitacion);
precipitacionAbril = precipitacion;}

if (m.equalsIgnoreCase("Mayo")){
arrayMayo.add(precipitacion);
precipitacionMayo = precipitacion;}

if (m.equalsIgnoreCase("Junio")){
arrayJunio.add(precipitacion);
precipitacionJunio = precipitacion;}
if (m.equalsIgnoreCase("Julio")){
arrayJulio.add(precipitacion);
precipitacionJulio = precipitacion;}

if (m.equalsIgnoreCase("Agosto")){
arrayAgosto.add(precipitacion);
precipitacionAgosto = precipitacion;}

if (m.equalsIgnoreCase("Septiembre")){
arraySeptiembre.add(precipitacion);
precipitacionSeptiembre = precipitacion;}

if (m.equalsIgnoreCase("Octubre")){
arrayOctubre.add(precipitacion);
precipitacionOctubre = precipitacion;}

if (m.equalsIgnoreCase("Noviembre")){
arrayNoviembre.add(precipitacion);
precipitacionNoviembre = precipitacion;}

if (m.equalsIgnoreCase("Diciembre")){
arrayDiciembre.add(precipitacion);
precipitacionDiciembre = precipitacion;}

}


public double getPrecipitacion(String m){
if (m.equalsIgnoreCase("Enero")){
return precipitacionEnero;}
if (m.equalsIgnoreCase("Febrero")){
return precipitacionFebrero;}
if (m.equalsIgnoreCase("Marzo")){
return precipitacionMarzo;}
if (m.equalsIgnoreCase("Abril")){
return precipitacionAbril;}
if (m.equalsIgnoreCase("Mayo")){
return precipitacionMayo;}
if (m.equalsIgnoreCase("Junio")){
return precipitacionJunio;}
if (m.equalsIgnoreCase("Julio")){
return precipitacionJulio;}
if (m.equalsIgnoreCase("Agosto")){
return precipitacionAgosto;}
if (m.equalsIgnoreCase("Septiembre")){
return precipitacionSeptiembre;}
if (m.equalsIgnoreCase("Octubre")){
return precipitacionOctubre;}
if (m.equalsIgnoreCase("Noviembre")){
return precipitacionNoviembre;}
return precipitacionDiciembre;
}

public double precipitacionMedia(String m){
double precipitacionTotal = 0;

if (m.equalsIgnoreCase("Enero")){
for (int a=0; a < arrayEnero.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayEnero.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Febrero")){
for (int a=0; a < arrayFebrero.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayFebrero.get(a);
}
return precipitacionTotal/28;}

if (m.equalsIgnoreCase("Marzo")){
for (int a=0; a < arrayMarzo.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayMarzo.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Abril")){
for (int a=0; a < arrayAbril.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayAbril.get(a);
}
return precipitacionTotal/30;}

if (m.equalsIgnoreCase("Mayo")){
for (int a=0; a < arrayMayo.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayMayo.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Junio")){
for (int a=0; a < arrayJunio.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayJunio.get(a);
}
return precipitacionTotal/30;}

if (m.equalsIgnoreCase("Julio")){
for (int a=0; a < arrayJulio.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayJulio.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Agosto")){
for (int a=0; a < arrayAgosto.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayAgosto.get(a);
}

if (m.equalsIgnoreCase("Septiembre")){
for (int a=0; a < arraySeptiembre.size(); a++){
precipitacionTotal = precipitacionTotal+ arraySeptiembre.get(a);
}
return precipitacionTotal/30;}

if (m.equalsIgnoreCase("Octubre")){
for (int a=0; a < arrayOctubre.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayOctubre.get(a);
}
return precipitacionTotal/31;}

if (m.equalsIgnoreCase("Noviembre")){
for (int a=0; a < arrayNoviembre.size(); a++){
precipitacionTotal = precipitacionTotal+ arrayNoviembre.get(a);
}
return precipitacionTotal/30;}

return precipitacionTotal/31;}

return precipitacionTotal/31;
}
}

Código:
public class Actividad {

public static void main(String[] args) {
Pluviometro p = new Pluviometro();
for (int a=1; a<= 31; a++){
p.setPrecipitacion(Meses.ENERO,Math.random());
System.out.println("Precipitacion dia "+a+" Enero:"+p.getPrecipitacion(Meses.ENERO));}
System.out.println("La PRECIPITACION MEDIA DEL MES DE ENERO ES: "+p.precipitacionMedia("eNero"));
System.out.println("");
for (int a=1; a<= 28; a++){
p.setPrecipitacion(Meses.FEBRERO,Math.random());
System.out.println("Precipitacion dia "+a+" Febrero:"+p.getPrecipitacion(Meses.FEBRERO));}
System.out.println("La PRECIPITACION MEDIA DEL MES DE FEBRERO ES: "+p.precipitacionMedia("febrero"));
System.out.println("");
}

}


Título: Re: mejorar codigo
Publicado por: NullP0inter en 27 Diciembre 2014, 14:28 pm
Podrías crear una clase emboltorio creo que se llama, para ir creando un objeto con sus datos y luego ir guardándolos en la lista e ir accediendo por el valor de la fecha para las comparaciones. Además puedes crear un array para las precipitaciones numerando el índice en orden.


Un saludo


Título: Re: mejorar codigo
Publicado por: winnipu en 2 Enero 2015, 16:04 pm
Gracias nullpointer, miro lo de la clase envoltorio. Lo del array me parece buena idea.