L'OP ha chiesto come risolvere questo problema senza un ciclo! Per qualche motivo è di moda in questi giorni per evitare i loop. Perchè è questo? Probabilmente c'è la consapevolezza che usando map
, reduce
, filter
e gli amici, e metodi come each
nascondono i loop e riducono il verbage del programma e sono piuttosto interessanti. Lo stesso vale per le pipeline Unix davvero dolci. O codice jQuery. Le cose sembrano grandi senza loop.
Ma Java ha un metodo map
? Non proprio, ma potremmo definirne uno con un'interfaccia Function
con un metodo eval
o exec
. Non è troppo difficile e sarebbe un buon esercizio. Potrebbe essere costoso e non utilizzato nella pratica.
Un altro modo per fare questo senza un ciclo consiste nell'utilizzare la ricorsione della coda. Sì, è un po 'stupido e nessuno lo userebbe in pratica, ma mostra, forse, che i loop vanno bene in questo caso.Tuttavia, solo per mostrare "l'ennesimo anello libera esempio" e di divertirsi, ecco:
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));
}
}
Non è abbastanza, ma in risposta alla domanda del PO, non ci sono espliciti loop.
fonte
2011-08-19 07:40:55
ma perché non utilizzare un ciclo? –
@Caroline: se si sta tentando di inizializzare l'array 2d con 0, non è necessario farlo poiché è già stato inizializzato con 0 quando si assegna l'array e non è possibile inizializzare alcun array senza utilizzare un ciclo. È possibile solo nascondere il loop in una funzione proprio come fa Arrays.fill. – Emil
Hey ragazzi non esagerare ora. Tutto quello che voleva era un metodo in Java API per inizializzare array multidimensionali ad un valore predefinito in un singolo passaggio. Questo è quello che voleva dire senza un ciclo. –