¿Cuánto has gastado esta semana?
Apuntas lo que gastas en el bar cada día: 4, 7, 3, 9 y 5 euros.
Quieres saber tres cosas. ¿Cuánto has gastado en total? ¿Cuánto gastas de media? ¿Cuál fue tu día más caro?
Con un array y un bucle lo averiguas en pocas líneas. Funciona igual con 5 días que con 5000.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Acumulador | Una variable que empieza en 0 y va sumando valores. | total = total + spent[i]; |
| Media | La suma dividida entre cuántos valores hay. | 28 / 5 = 5,6 |
| Máximo | El valor más grande de la lista. | 9 |
| Contador | Una variable que sube de uno en uno cada vez que algo se cumple. | count++; |
| Buscar | Mirar caja por caja hasta encontrar un valor. | spent[i] == 3 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Sumar todos los valores
Creas un acumulador que empieza en 0. Es como una hucha vacía.
El bucle pasa por cada caja y mete su valor en la hucha. Al terminar, el acumulador tiene la suma.
Pruébalo: el gasto total
public class Main {
public static void main(String[] args) {
int[] spent = {4, 7, 3, 9, 5};
int total = 0;
for (int i = 0; i < spent.length; i++) {
total = total + spent[i];
}
System.out.println("Has gastado " + total + " euros.");
// Cambia un valor del array y mira el total.
}
}
Ejemplo resuelto: la suma vuelta a vuelta
| Vuelta (i) | Caja | Total antes | Total después |
|---|---|---|---|
| 0 | 4 | 0 | 4 |
| 1 | 7 | 4 | 11 |
| 2 | 3 | 11 | 14 |
| 3 | 9 | 14 | 23 |
| 4 | 5 | 23 | 28 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La media
La media es la suma entre el número de cajas: 28 entre 5 son 5,6 euros al día.
Cuidado: si divides dos int, Java quita los decimales y sale 5. En la lección de convertir entre tipos viste el arreglo: (double) delante de la suma.
Pruébalo: la media diaria
public class Main {
public static void main(String[] args) {
int[] spent = {4, 7, 3, 9, 5};
int total = 0;
for (int i = 0; i < spent.length; i++) {
total = total + spent[i];
}
// Sin (double), la división entera daría 5.
double average = (double) total / spent.length;
System.out.println("Gastas de media " + average + " euros.");
}
}
El valor más grande
Para el máximo, apuntas el primer valor como el mejor hasta ahora.
Después miras el resto. Si encuentras uno mayor, ese pasa a ser el mejor.
Al final, la variable guarda el máximo.
Ejemplo resuelto: buscar el máximo
| Vuelta (i) | Caja | Mejor antes | Mejor después |
|---|---|---|---|
| Inicio | - | - | 4 |
| 1 | 7 | 4 | 7 |
| 2 | 3 | 7 | 7 |
| 3 | 9 | 7 | 9 |
| 4 | 5 | 9 | 9 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pruébalo: el día más caro
public class Main {
public static void main(String[] args) {
String[] days = {"lunes", "martes", "miércoles", "jueves", "viernes"};
int[] spent = {4, 7, 3, 9, 5};
int best = 0;
for (int i = 1; i < spent.length; i++) {
if (spent[i] > spent[best]) {
best = i;
}
}
// Guardamos la posición, así sabemos el valor y el día.
System.out.println("Gastaste más el " + days[best]
+ ": " + spent[best] + " euros.");
}
}
Empieza por el primer valor, no por 0
Advertencia
Si empiezas el máximo en 0 y todos los valores fueran negativos, ganaría el 0 aunque no esté en la lista. Empezar con la primera caja siempre funciona.
Contar y buscar
Para contar, pones un if dentro del bucle y subes un contador cuando se cumple.
Para buscar, el if mira si la caja vale lo que buscas. Si es así, devuelves su posición. Si el bucle acaba sin encontrarlo, devuelves -1, porque ninguna posición vale -1.
Pruébalo: contar y buscar
public class Main {
public static void main(String[] args) {
int[] spent = {4, 7, 3, 9, 5};
// Cuántos días gastaste más de 5 euros.
int count = 0;
for (int i = 0; i < spent.length; i++) {
if (spent[i] > 5) {
count++;
}
}
System.out.println("Días de más de 5 euros: " + count);
// Qué día gastaste justo 3 euros. -1 significa que ninguno.
int found = -1;
for (int i = 0; i < spent.length; i++) {
if (spent[i] == 3 && found == -1) {
found = i;
}
}
System.out.println("Posición del gasto de 3 euros: " + found);
}
}