Zadanie z klasą optional

Zadanie z klasą optional
KP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Witam

Przerabiam temat optional i natrafiłem na pewien problem

Mam zadanie, które muszę rozwiązać wykorzystując optional. Nie wiem jak zaimplementowac klase optional.
Treść zadania brzmi zapytaj użytkownika o jego imie, jeśli imie będzie podane to wypisz długość imienia, jeśli nie to wypisz 0.

  • zapytaj użytkownika o pesel, jeśli będzie podany poprawny pesel (11 zankow powiedzmy wiekszej walidacji nie ma co robic, no i nie null i nie pusty) to bierzemy date urodzenia z tego numeru, w przeciwnym przypadku rzucamy wyjatkiem InvlaidPeselException
    Poniżej rozwiązanie zadania moim sposobem, ale nie dokonca jestem pewny co do mojego rozwiązania.
    Prosiłbym o pomoc
Kopiuj


public class Runner {

    static void pesel(String pe) throws MyException {

        if (pe.length() != 11) {
            throw new MyException("\n InvalidPeselException");
        } else {
            String birthdate = "";
            for (int i = 0; i < 6; i++) {
                birthdate = birthdate + pe.charAt(i);
            }

            System.out.println("\n Birthdate: " + birthdate);

        }

    }


    public static void main(String[] args) {

        Scanner s1 = new Scanner(System.in);
        System.out.print(" Enter the name : ");
        String name = s1.nextLine();
        if (!name.isEmpty()) {
            System.out.println("\n Length : " + name.length());

        } else System.out.println("\n Length : 0");


        System.out.print("\n Enter the pesel: ");
        String s = s1.nextLine();


        try {
            pesel(s);


        } catch (MyException ex) {

            System.out.println(ex);
        }

    }
}

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1910
2

Gdzie w tym zadaniu jest mowa o Optionalu, bo nie widzę? :) w Twoim rozwiązaniu również go nie ma

KP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

@Charles_Ray: w treści zadania jest mowa o tym by wykorzystać optional w rozwiązaniu .
Napisałem kod taki jaki potrafiłem:).
Generalnie moim problemem jest implementacja optionala w tym zadania

ZN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 49
2

Zacznij od Optional.of() lub Optional.ofNullable(), ogólnie nie chce być nie miły ale wystarczy fraza java optional w google i już w 2 linku znajduje się cała wiedza potrzebna do wykonania zadania,
jeżeli masz problem z implementacją to powiedz na którym etapie ? bo wygląda na to że oczekujesz po prostu gotowego rozwiązania

KP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

@ZabawnyNick: mam problem na etapie implementowania optionala. W którym momencie go wrzucić?
Nie szukam gotowca, w poście dodałem kod ale bez tego nieszczęsnego optionala z którym mam problem:)

PanamaJoe
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 310
1

@KrisPaton:

Przeklej może 1:1 treść tego zadania, bo to jest niejasne, co napisałeś. Masz wykorzystać Optionala czy go zaiplementować? To jest zasadnicza różnica.

KP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

@PanamaJoe: wykorzystac go optionala do rozwiązania zadania

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1910
2

Możesz podać pełna treść zadania? Mamy zgadywać? Pokaz kod z Optionalem, który Ci nie działa.

PanamaJoe
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 310
1
KrisPaton napisał(a):

@PanamaJoe: wykorzystac go optionala do rozwiązania zadania

To np. String s, który idzie później do walidacji może wykorzystać optionala, tu masz różne przykłady: https://www.baeldung.com/java-optional Może Cię to natchnie do przebudowy całości. Druga rzecz, która od razu się rzuca w oczy - zapoznaj się z metodą substring()

KP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Panowie wracam z rozwiązaniem zadania (kod działa), ale chciałbym wykorzystać potencjał optionala, najlepiej bez ifow, wszystko optionalem
map, filter, orElseThrow, zmodyfikować kod i usprawnić go. Głowię się nad modyfikacją tego kodu, prosiłym o pomoc.

Kopiuj

public class Main {

    static void pesel(String pe) throws MyException {
        if (pe.length() != 11) {
            throw new MyException("\n InvalidPeselException");
        } else {
            String birthdate = "";
            for (int i = 0; i < 6; i++) {
                birthdate = birthdate + pe.charAt(i);
            }
            System.out.println("\n Birthdate: " + birthdate);
        }
    }

    static Optional<String> readLine(Scanner scanner) {
        String text = scanner.nextLine();
        return Optional.ofNullable(text);
    }

    public static void main(String[] args) {

        Scanner s1 = new Scanner(System.in);
        Optional<String> nameOptional = readLine(s1);
        if (!nameOptional.isPresent()) {
            System.out.println("\n Length : " + nameOptional.get().length());

        } else {
            System.out.println("\n Length : 0");
        }

        System.out.print("\n Enter the pesel: ");
        String s = s1.nextLine();
        try {
            pesel(s);
        } catch (MyException ex) {
            System.out.println(ex);
        }

    }
}

E9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 216
2
Kopiuj
nameOptional.ifPresentOrElse(value => System.out.println("jest"), () => System.out.println("nie ma"));

Sposobów użycia jest oczywiście więcej, ale nie bardzo wiem co Ty chcesz tu zrobić z tym optionalem, czy w ogóle wiesz w jakim celu się go używa?

ZN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 49
1

przykład użycia .map() dla twojego przypadku:

Kopiuj
    Integer peselLength = readLine(s1)
        .map(value -> value.length())
        .orElse(0);
    System.out.println("Length : " + peselLength);

metodę .filter() oraz .orElseThrow() powinieneś zastosować gdy sprawdzasz poprawność dla pesla

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.