Foros del Web » Programación para mayores de 30 ;) » Java »

Ejercicio pluviómetro - como saber que mes es

Estas en el tema de Ejercicio pluviómetro - como saber que mes es en el foro de Java en Foros del Web. Hola. Tengo que hacer un ejercicio de un pluviómetro, en el que creo yo mismo las precipitaciones, con un random, y luego tengo que mostrar ...
  #1 (permalink)  
Antiguo 04/07/2011, 09:15
 
Fecha de Ingreso: marzo-2008
Mensajes: 197
Antigüedad: 16 años, 2 meses
Puntos: 3
Ejercicio pluviómetro - como saber que mes es

Hola.
Tengo que hacer un ejercicio de un pluviómetro, en el que creo yo mismo las precipitaciones, con un random, y luego tengo que mostrar las medias, total.. de cada mes.
Mi problema es que no sé como hacer referencia al mes. Es decir, tengo un interface con todos los meses. Y por ejemplo, cuando hago la media del mes, no sé como hacer referencia al mes que quiero, ya que estos datos estan en hashmap.
Les pongo el código de todo:

La clase meses:
Código HTML:
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";
}
La clase pluviómetro:

Código HTML:
import java.util.HashMap;
import java.util.LinkedList;

public class Pluviometro {
    // Atributos de la clase
    private HashMap aljibe;
    LinkedList precipitaciones=new LinkedList();

    // Constructor
    public Pluviometro() {
                   aljibe=new HashMap();
                   aljibe.put(Meses.ENERO, new Probeta());
                   aljibe.put(Meses.FEBRERO, new Probeta());
                   aljibe.put(Meses.MARZO, new Probeta());
                   aljibe.put(Meses.ABRIL, new Probeta());
                   aljibe.put(Meses.MAYO, new Probeta());
                   aljibe.put(Meses.JUNIO, new Probeta());
                   aljibe.put(Meses.JULIO, new Probeta());
                   aljibe.put(Meses.AGOSTO, new Probeta());
                   aljibe.put(Meses.SEPTIEMBRE, new Probeta());
                   aljibe.put(Meses.OCTUBRE, new Probeta());
                   aljibe.put(Meses.NOVIEMBRE, new Probeta());
                   aljibe.put(Meses.DICIEMBRE, new Probeta());
    }

    // Métodos
    protected void putPrecipitacion(String m,int litros) {
                   precipitaciones.add(litros,m);
    }
    
    protected String getPrecipitaciones(String m) {
                   String s="";
                   for(int i=0; i<=100000; i++){
                                   s+=precipitaciones.get(i) + " ";
                   }
                   return s;
    }

    protected int totalMes(String m) {
                   int litros=0;

                   for(int i=0; i<=30; i++){
                               //    litros=litros+precipitaciones.get(i);
                                 //  litros=precipitaciones.get(i) +litros;
                   }
                   return litros;
    }
    
    protected int mediaDiaria(String m) {
                   return Math.round(totalMes(m)/30);
    }
    

    protected int mediaMensual(String m){
		return 0;
    	
    }
}
Y la clase del main:
Código HTML:
public class Ejercicio8 {
	public static void main(String args[]){
        
            Pluviometro p=new Pluviometro();

// Código para insertar datos de forma aleatoria
String[] meses={Meses.ENERO, Meses.FEBRERO, Meses.MARZO, Meses.ABRIL, Meses.MAYO, Meses.JUNIO,Meses.JULIO, Meses.AGOSTO, Meses.SEPTIEMBRE,Meses.OCTUBRE, Meses.NOVIEMBRE, Meses.DICIEMBRE};
 int mes;
 int litros;
 for(int i=0; i<50; i++) {
                                             mes=(Integer.valueOf(Double.toString(Math.random()).substring(2,4))%12);
                                             litros=Integer.valueOf(Double.toString(Math.random()).substring(2,4));
                                             p.putPrecipitacion(meses[mes], litros);
                             }  // FIN de generación aleatoria


                             // Visualización de datos
                             for(int i=0; i<12; i++) {
                                             System.out.println(meses[i] + ": " + p.getPrecipitaciones(meses[i])
                                                                            + "    Total mensual: " + p.totalMes(meses[i])
                                                                            + "    Media diaria: " + p.mediaDiaria(meses[i]));
                             }
                             System.out.println("-------------------------------------------");
                             //System.out.println("Total anual: " + p.totalAnual()
                              //                               + "    Media mensual: " + p.mediaMensual());
              }             

	}
Alguien me podría decir como tendría que hacer esto?
Si tienen algun duda frente al ejercicio, me lo pueden comunicar.
También, me crea este error:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 84, Size: 0

Muchas gracias, y espero sus respuestas.
  #2 (permalink)  
Antiguo 04/07/2011, 09:59
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Ejercicio pluviómetro - como saber que mes es

No sé cual es exactamente tu problema, pero puedes utilizar el método get para obtener el valor de un mes.

Si es otra cosa, explícalo mejor.
  #3 (permalink)  
Antiguo 04/07/2011, 13:10
 
Fecha de Ingreso: marzo-2008
Mensajes: 197
Antigüedad: 16 años, 2 meses
Puntos: 3
Respuesta: Ejercicio pluviómetro - como saber que mes es

A ver, me explico mejor, en un problema concreto que tengo:
Agrego al hashmap, las precipitaciones así:
Código HTML:
    public void putPrecipitacion(String m,int litros) {
    	Probeta p1=new Probeta(m, litros);
        aljibe.put(m, p1);
        //System.out.println("El tamaño del HashMap = "+ aljibe.size());
    }
Y quiero hacer el total de precipitaciones en un método.
Pero tengo el problema de que no sé como sumar todas las precipitaciones que sean de ese mes en concreto, por ejemplo, enero.
Código HTML:
public int totalMes(String m) {

    				int litros=100;
                   for(int i=0; i<=50; i++){
                	   
                	   litros+=aljibe.get(i);
                	   //litros=litros+a;
                	   //litros=litros+aljibe.get(m);
                         //          litros=litros+aljibe.get(i);
                           //        litros=precipitaciones.get(i) +litros;
                   }
                   return litros;
    }
Ya que del hashmap, no me deja sumar... y a parte, que no sé como hacer que sepa que es enero, aunque llege como un String con nombre enero.

No sé como hacerlo...
Muchas gracias de antemano.
  #4 (permalink)  
Antiguo 04/07/2011, 21:28
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Ejercicio pluviómetro - como saber que mes es

Hola pues si dices que recibes como argumento de un metodo la cadena "Enero" y dentro de este metodo quieres validar que exista una cadena "Enero"sería de esta forma

Código java:
Ver original
  1. public int totalMes(String m) {
  2.         if(m.equalsIgnoreCase("EnErO")){
  3.             //Hay un enero en el argumento
  4.         }
  5.     }

Puedes usar solo equals, el equalsIgnoreCase va a ignorar si hay mayusculas o minusculas (Util por si se te pasa una mayuscula de diferente entre la cadena que mandas como argumento y la cadena con la que comparas en la condición).

Y sobre el hasmap, aunque se me ocurren algunas soluciones a tu problema, son rebuscadas pienso que tu mejor opcion no es un hashmap.

De cualquier forma te comento.

Cuando le asignes una llave a cada elemento que metas al hashmap puedes asignarle una cadena de texto con el nombre del mes + un indice que incremente

enero1
enero2
enero3
enero4
....................

De esta manera despues podrás accesar a todos los elemento de tu hashmap buscandolo por "enero" siempre y cuando ignores los numeros de esa cadena. Aqui puedes usar muchos metodos o hacerte el tuyo

Si concideras esta cadena como un arreglo, puedes recorrerlo con un for each y eliminar los numeros que tenga, produciendote una cadena nueva.

por ejemplo
enero33
antes del for each
String variable =enero33;
despues del for each
String variable = enero;

Y como te mencionabamas arriba, ya con esto puedes obtener todos los elementos del hashmap cuya llave contenga el nombre del mes que quieras.

Pero te comentaba que es un método algo rebuscado, en caso de que sea necesario seguir con los hashmap.

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Etiquetas: ejercicio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:24.