Witam. Mam problem z jednym zagadnieniem, które muszę opanować. Za pomocą jakiej instrukcji nie używając pętli for mogę utworzyć tablicę i wypełnić ją danymi a potem jaką instrukcją odczytać i wyświetlić te dane z tablicy?
Możesz użyć pętli while
albo do while
(nie wiem czy w javie jest jakiś foreach albo odpowiednik phpowego array_map()).
tylko goto
O rekurencji słyszał?
Prosty przykład:
import java.util.Arrays;
import java.util.function.Supplier;
public class Recursion {
public static void main(String[] args) {
final String[] array = new String[20];
initializeArray(0, Recursion::getNextValue, array);
Arrays.stream(array).forEach(System.out::println);
}
private static <T> T[] initializeArray(final int currentElement, final Supplier<T> supplier, final T[] array) {
if (currentElement >= array.length) {
return array;
}
else {
array[currentElement] = supplier.get();
return initializeArray(currentElement + 1, supplier, array);
}
}
private static String getNextValue() {
return "S";
}
}
Integer[] arr = new Integer[10]; //deklaracja tablicy
Arrays.fill(arr, 1); // wypelneinie jedynkami
Arrays.stream(arr).forEach(System.out::println); // wypisanie
Da się bez for i while :)
Można jednym stringiem wypełnić całą tablicę i wypisać jako string, w końcu string to też tablica, ale charów :D
Lecz wypełnienie tablicy intów charem, będzie zajmowało każde 4 znaki stringa jednego inta i ograniczenie tylko do printowalnych znaków.
Ogólnie wszystkie metody typu for, while, goto itp. działają na zasadzie jmpów, ale jest jedna metoda, która nie używa tego.
Jest nim kopiowanie vektorowe w assemblerze.
- GOTO (jeśli występuje w Javie)
- Rekurencja
- Kopiowanie bufora pamięci - nie wiem, jak pod tym względem wygląda Java. Ale generalnie chodzi o to, żeby zarezerwować sobie odpowiednio duży bufor, a potem go zapełnić danymi (np. kopiując dane z innego bufora)
Chyba, że masz powiedziane, że możesz posługiwać się pętlami, tylko nie for. No to wtedy zostają Ci inne pętle, np. while.
mdolata napisał(a):
Integer[] arr = new Integer[10]; //deklaracja tablicy Arrays.fill(arr, 1); // wypelneinie jedynkami Arrays.stream(arr).forEach(System.out::println); // wypisanie
Da się bez for i while :)
Fajna metoda tylko, jak zmienić wypełnienie jedynkami na zwiększanie np. o 1? skoro nie ma żadnego inta ani deklaracji
tiger77 napisał(a):
mdolata napisał(a):
Integer[] arr = new Integer[10]; //deklaracja tablicy Arrays.fill(arr, 1); // wypelneinie jedynkami Arrays.stream(arr).forEach(System.out::println); // wypisanie
Da się bez for i while :)
Fajna metoda tylko, jak zmienić wypełnienie jedynkami na zwiększanie np. o 1? skoro nie ma żadnego inta ani deklaracji
Integer[] arr = new Integer[10];
IntStream.range(0, arr.length).forEach(i -> arr[i] = i ); // wypełnienie obiektami Integer o wartościach od 0 do 9
Arrays.stream(arr).forEach(System.out::println); // wypisanie
mdolata napisał(a):
tiger77 napisał(a):
mdolata napisał(a):
Integer[] arr = new Integer[10]; //deklaracja tablicy Arrays.fill(arr, 1); // wypelneinie jedynkami Arrays.stream(arr).forEach(System.out::println); // wypisanie
Da się bez for i while :)
Fajna metoda tylko, jak zmienić wypełnienie jedynkami na zwiększanie np. o 1? skoro nie ma żadnego inta ani deklaracji
Integer[] arr = new Integer[10]; IntStream.range(0, arr.length).forEach(i -> arr[i] = i ); // wypełnienie obiektami Integer o wartościach od 0 do 9 Arrays.stream(arr).forEach(System.out::println); // wypisanie
IDE podkresla mi IntStream na czerwono. Nie brakuje przypadkiem jakiejś bibloteki?
try - catch oczywiście :-)
też zamiast for działa
Mały przykład:
import java.util.function.Consumer;
public class A {
public static void main(String[] args) {
final int[] tablica = new int[100];
try {
azDoPorzygu(tablica, 0, index ->tablica[index] = index*2 );
} catch (Exception e1) {
try {
azDoPorzygu(tablica, 0, index -> System.out.println(tablica[index]));
} catch (Exception e2) {
System.out.println("Dziekuje.");
}
}
}
static void azDoPorzygu(int[] t, int index, Consumer<Integer> coRobic) {
coRobic.accept(index);
azDoPorzygu(t, index+1, coRobic);
}
}