una dudilla de matrices...
buenas a tod@s!
tengo un problemilla con un ejercicio...es sobre los meses y dias...el array seria...
int[][] lluvia= new int[MESES][DIAS];
y el caso esk kiero recorrer desde el 21 de marzo...desde int[2][20], hasta el 20 de junio....int[5][19]...
alguien me puede ayudar??????\\'
gracias y un saludo!!
tengo un problemilla con un ejercicio...es sobre los meses y dias...el array seria...
int[][] lluvia= new int[MESES][DIAS];
y el caso esk kiero recorrer desde el 21 de marzo...desde int[2][20], hasta el 20 de junio....int[5][19]...
alguien me puede ayudar??????\\'
gracias y un saludo!!
Yo una vez tuve que hacer una práctica similar, y mi consejo es que utilices un array en lugar de una matriz, que te facilitará las operaciones secuenciales, y emplees un array auxiliar que te indique en qué día empiezan los meses.
private static final short[] inicioMes={0,31,59,90,120,151,181,212,243,273,304,334,365};
private final double [] lluvia=new double[365];
public double getPrecipitaciones(int dia,int mes){
int diaAnual=convierte(dia,mes);
if(dia<0||diaAnual>=inicioMes[mes+1])
throw new IllegalArgumentException("Dia fuera del mes");
return lluvia[diaAnual];
}
public void setPrecipitaciones(int dia,int mes,double precipitaciones){
int diaAnual=convierte(dia,mes);
if(dia<0||diaAnual>=inicioMes[mes+1])
throw new IllegalArgumentException("Dia fuera del mes");
luvia[diaAnual]=precipitaciones;
}
public static int convierte(int dia,int mes){
inicioMes[mes]+dia;
}
Esta estructura te permite sobrecargar métodos para obtener información de forma fácil y sencilla:
// Precipitaciones anuales
public Iterator<Double>temperaturas(){
return temperaturas(0,lluvia.length);
}
// Precipitaciones de un mes
public Iterator<Double>temperaturas(int mes){
return temperaturas(inicioMes[mes],inicioMes[mes+1]);
}
// Precipitaciones entre un dia y otro
public Iterator<Double> temperaturas(int diaInicio,int diaFin){
return new Iterator<Double>(){
int i=diaInicio;
public boolean hasNext(){
return i<diaFin; //O <= si se desea incluir el último día
}
public Double next(){
!hasNext()
throw new NoSuchElementException();
return lluvia[i++];
}
public void remove(){
if(i==diaInicio)
throw new IllegalStateException();
lluvia[i-1]=0.0;
}
};
}
De este modo, para recorrer el rango de temperaturas, entre el 21 del 3 y el 20 del 6, sería:
for(double temperatura:temperaturas(convierte(21,3),convierte(20,6))){
//Operar con la temperatura.
}
Espero que te sirva.
private static final short[] inicioMes={0,31,59,90,120,151,181,212,243,273,304,334,365};
private final double [] lluvia=new double[365];
public double getPrecipitaciones(int dia,int mes){
int diaAnual=convierte(dia,mes);
if(dia<0||diaAnual>=inicioMes[mes+1])
throw new IllegalArgumentException("Dia fuera del mes");
return lluvia[diaAnual];
}
public void setPrecipitaciones(int dia,int mes,double precipitaciones){
int diaAnual=convierte(dia,mes);
if(dia<0||diaAnual>=inicioMes[mes+1])
throw new IllegalArgumentException("Dia fuera del mes");
luvia[diaAnual]=precipitaciones;
}
public static int convierte(int dia,int mes){
inicioMes[mes]+dia;
}
Esta estructura te permite sobrecargar métodos para obtener información de forma fácil y sencilla:
// Precipitaciones anuales
public Iterator<Double>temperaturas(){
return temperaturas(0,lluvia.length);
}
// Precipitaciones de un mes
public Iterator<Double>temperaturas(int mes){
return temperaturas(inicioMes[mes],inicioMes[mes+1]);
}
// Precipitaciones entre un dia y otro
public Iterator<Double> temperaturas(int diaInicio,int diaFin){
return new Iterator<Double>(){
int i=diaInicio;
public boolean hasNext(){
return i<diaFin; //O <= si se desea incluir el último día
}
public Double next(){
!hasNext()
throw new NoSuchElementException();
return lluvia[i++];
}
public void remove(){
if(i==diaInicio)
throw new IllegalStateException();
lluvia[i-1]=0.0;
}
};
}
De este modo, para recorrer el rango de temperaturas, entre el 21 del 3 y el 20 del 6, sería:
for(double temperatura:temperaturas(convierte(21,3),convierte(20,6))){
//Operar con la temperatura.
}
Espero que te sirva.