Metoda finalize() w Javie została uznana za przestarzałą z powodu licznych problemów, jakie niesie jej stosowanie. Finalizacja może powodować problemy z wydajnością, blokady i zawieszanie się aplikacji, a także może prowadzić do wycieków zasobów. Brak jest możliwości anulowania finalizacji, a jej wywołanie może nastąpić z opóźnieniem lub wcale. Zamiast tego, klasy zarządzające zasobami spoza sterty powinny implementować interfejs AutoCloseable i udostępniać metodę do ręcznego zwalniania zasobów. Alternatywnymi i bardziej efektywnymi mechanizmami są Cleaner oraz PhantomReference. Warto unikać nadpisywania metody finalize() w podklasach, chyba że jest to absolutnie konieczne, i zawsze wywoływać super.finalize() w bloku try-finally, aby uniknąć przerwania łańcucha finalizacji w przypadku wystąpienia wyjątku.
A ja w ostatnim użyłem pętli i logiki czyli tego co powinienem na ten moment użyć. Jedynie z komentarzy się dowiedziałem, że liczbę po każdym obrocie pętli dzielić przez 10.
while (liczba >= 1){
if (liczba % 2 == 0){
parzyste++;
} else {
nieparzyste++;
}
liczba = liczba / 10;
}
Wygodnym jest skorzystanie ze strumieni w ostatnim zadaniu:
String sNum = new BufferedReader(new InputStreamReader(System.in)).readLine();
nieparzyste = (int)Arrays.stream(sNum.split("")).mapToInt(Integer::parseInt).filter(x -> x%2==1).count();
parzyste = (int)Arrays.stream(sNum.split("")).mapToInt(Integer::parseInt).filter(x -> x%2==0).count();
ostatnie zadanie wykonalem z uzyciem metody length() potem petle for wywolalem tyle razy ile metoda length zwrocila wyniku dla podanej liczby. za kazdym razem sprawdzany byl warunek ((liczba % 2) == 0) i dla prawdy zwiekszylem licznik parzystych o 1 a dla nieprawdy licznik nieparzystych o 1. na koniec liczba zostaje podzielona przez 10 co skutkuje tym ze nastepna liczba od konca zostaje sprawdzana
pod
count = count / 10;
dopisz sobie
System.out.println(count);
i zobaczysz co się dzieje
to dzielenie sprawia poprostu że program poruszą po liczbie cyfra po cyfrze bo tak działa dzielenie dowolnego int przez 10
There is an error in the last one task (in polish version of "Even and odd numbers"). During check, even (parzyste) and odd (nieparzyste) must be swapped to complete the task, as in the example:
parzyste=b;
nieparzyste=a;
System.out.println("Parzyste: "+a+" Nieparzyste: "+b);
GO TO FULL VERSION