Zadanie z klasą optional

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


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);
        }

    }
}

2

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

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

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

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:)

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.

0

@PanamaJoe: wykorzystac go optionala do rozwiązania zadania

2

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

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()

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.


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);
        }

    }
}

2
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?

1

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

    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

1 użytkowników online, w tym zalogowanych: 0, gości: 1