OP zapytał, jak rozwiązać ten problem bez pętli! Z jakiegoś powodu modne jest obecnie unikanie pętli. Dlaczego to? Prawdopodobnie istnieje świadomość, że używanie map
, reduce
, filter
i znajomych oraz metod takich jak each
ukrywa pętle i obcina programową wersję i jest w porządku. To samo dotyczy naprawdę słodkich rurociągów Uniksa. Lub kod jQuery. Wszystko wygląda świetnie bez pętli.
Ale czy Java ma metodę map
? Niezupełnie, ale możemy zdefiniować jeden z interfejsem Function
za pomocą metody eval
lub exec
. Nie jest to zbyt trudne i byłoby dobrym ćwiczeniem. To może być kosztowne i nie używane w praktyce.
Innym sposobem wykonania tego jest bez pętli jest użycie rekursji ogonowej. Tak, jest to trochę głupie i nikt nie używałby go w praktyce, ale okazuje się, że w tym przypadku pętle są w porządku.Niemniej jednak, po prostu pokazać „kolejny przykład” pętli darmo i baw się dobrze, tutaj jest:
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));
}
}
Nie jest ładna, ale w odpowiedzi na pytanie OP, nie ma jednoznacznychpętle.
ale dlaczego nie użyć pętli? –
@Caroline: Jeśli próbujesz zainicjować tablicę 2d za pomocą 0, nie musisz tego robić, ponieważ jest ona już zainicjalizowana przez 0 podczas przydzielania tablicy i nie możesz zainicjować żadnej tablicy bez użycia pętli.Możesz po prostu ukryć zapętla się w funkcji podobnie jak w pliku Arrays.fill. – Emil
Hej, nie przesadzajcie teraz. Wszystko, czego chciał, to jakaś metoda w Java API, która inicjuje wielowymiarowe tablice do pewnej wartości domyślnej w jednym kroku. To właśnie chciał powiedzieć bez pętli. –