El OP preguntó cómo resolver este problema sin un bucle! Por alguna razón, está de moda en estos días evitar los bucles. ¿Por qué es esto? Probablemente se dé cuenta de que el uso de map
, reduce
, filter
y amigos, y métodos como each
ocultan bucles y reducen el verbo del programa y son geniales. Lo mismo ocurre con las tuberías realmente dulces de Unix. O el código jQuery. Las cosas se ven muy bien sin bucles.
¿Pero Java tiene un método map
? No realmente, pero podríamos definir uno con una interfaz Function
con un método eval
o exec
. No es demasiado difícil y sería un buen ejercicio. Puede ser costoso y no se usa en la práctica.
Otra forma de hacerlo sin un bucle es utilizar recursividad de cola. Sí, es algo tonto y nadie lo usaría en la práctica tampoco, pero muestra, tal vez, que los bucles están bien en este caso.Sin embargo, sólo para mostrar "otra libre de bucles ejemplo" y para divertirse, aquí está:
import java.util.Arrays;
public class FillExample {
private static void fillRowsWithZeros(double[][] a, int rows, int cols) {
if (rows >= 0) {
double[] row = new double[cols];
Arrays.fill(row, 0.0);
a[rows] = row;
fillRowsWithZeros(a, rows - 1, cols);
}
}
public static void main(String[] args) {
double[][] arr = new double[20][4];
fillRowsWithZeros(arr, arr.length - 1, arr[0].length);
System.out.println(Arrays.deepToString(arr));
}
}
No es bonita, pero en respuesta a la pregunta de la OP, no hay lazos explícitos.
pero ¿por qué no utilizar un bucle? –
@Caroline: si está intentando inicializar el 2d array con 0, no necesita hacerlo ya que ya está inicializado con 0 cuando asigna el array, y no puede inicializar ningún array sin usar un loop. Puede simplemente ocultar el array en una función como lo hace Arrays.fill. – Emil
Hola chicos, no lo exageren ahora. Todo lo que quería era algún método en Java API para inicializar matrices multidimensionales a algún valor predeterminado en un solo paso. Eso es lo que quería decir sin un bucle. –