Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Trabajar con arrays.

Hola a todos,

Me han propuesto hacer un ejercicio que me resulta bastante dificil.

Tengo dos arrays uno con los meses del año y otro el valor de cada mes.

He de sacar el valor min y max de cada mes, y el promedio del año entero.

Valor mínimo del array:
Mes: ....
Valor maximo del array:
Mes: ....
Valor medio del año : ...

Había pensado hacer una reordenación del array de valores de menor a mayor, pero luego no podrias ordenar los meses.

No se otra manera de hacerlo.
Alguién podría hecharme una mano?
Muchas gracias,

noviembre 27, 2013 | Registered Commenterjoserodriguezan

Puedes ordenar una copia del array, no necesariamente el original.
Una vez que sabes cuáles son esos valores máximo y mínimo, ya es fácil obtener el mes a que pertenecen.

noviembre 27, 2013 | Registered Commenterchoces

Buenas,

To no veo que tengas que ordenar nada.

Creas cinco variables. Una para almacenar el maximo, otra para el indice del maximo, otra para almacenar el minimo, otra para el indice del minimo y otra para almacenar el total acumulado de valores.

Recorres el array de valores con un for. En cada iteracion:
-Si el valor es mayor que el maximo lo asignamos a la variable de maximo y actualizamos el indice correspondiente
-Si el valor es menor que el minimo lo asignamos a la variable de minimo y asignamos el indice correspondiente.
-Acumulamos el valor en la variable de acumulacion.

Cuando termine el bucle ya tenemos el acumulado junto con los indices de maximo y minimo. Aplicamos estos indices sobre el array de meses para obtener el nombre del mes correspondiente. Para el valor medio hacemos: acumulado/12

Un saludo

noviembre 28, 2013 | Unregistered CommenterUnoPorAhi

Por si estás muy perdido, sigue un test.

import java.util.Arrays;

public class Test {

public static void main(String[] args) {

final int[] meses = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
final int[] valores = {20, 50, 30, 40, 80, 120, 70, 90, 100, 130, 10, 60};

final int[] valoresOrdenados = Arrays.copyOf(valores, valores.length);
Arrays.sort(valoresOrdenados);
System.out.println("ordenados: " + Arrays.toString(valoresOrdenados));

final int maximo = valoresOrdenados[valoresOrdenados.length - 1];
final int minimo = valoresOrdenados[0];
System.out.println("máximo: " + maximo);
System.out.println("mínimo: " + minimo);

int suma = 0;
int mesMaximo = 0;
int mesMinimo = 0;
for (int i = 0; i < valores.length; i++) {
if (maximo == valores[i]) {
mesMaximo = meses[i];
}
if (minimo == valores[i]) {
mesMinimo = meses[i];
}
suma += valores[i];
}
System.out.println("mes máximo: " + mesMaximo);
System.out.println("mes mínimo: " + mesMinimo);
System.out.println("media: " + suma / 12);
}

}

noviembre 28, 2013 | Registered Commenterchoces

Perdonad mi retraso. Lo he arreglado de la siguiente manera:

float mayor;
int posmayor;
mayor=valorDolar[1];
posmayor=1;
for(int min=1;min<mesos.length;min++) {
if (valorDolar[min]>mayor) {
mayor=valorDolar[min];
posmayor=min;
}
}
//Buscamos valor máximo del año
System.out.println("\nValor maximo Euro/dolar:" );
System.out.println("Mes: "+mesos[posmayor]);
System.out.println("Valor:"+mayor);
float menor;
int posmenor;
menor=valorDolar[1];
posmenor=1;
for(int max=1;max<mesos.length;max++) {
if (valorDolar[max]<menor) {
menor=valorDolar[max];
posmenor=max;
}
}
//Buscamos valor mínimo del año
System.out.println("\nValor mínim Euro/dolar:");
System.out.println("Mes: "+mesos[posmenor]);
System.out.println("Valor:"+menor);
float sumar=0;
int pos=1;
for(int media=1;media<valorDolar.length;media++) {
sumar += valorDolar[media];
pos++;
}
//Buscamos valor medio del año
System.out.print("\nValor mitjà del Euro/dolar al 2012 :"+ df.format(sumar/12) +"\n");

}

Muchas gracias,

noviembre 30, 2013 | Registered Commenterjoserodriguezan