Menu
Coddy logo textTech

Dopasowywanie wzorców

Część sekcji Logika i przepływ sterowania ścieżki Java w Coddy. Lekcja 37 z 59.

Dopasowywanie wzorców w Javie pozwala sprawdzić, czy obiekt ma określony typ, i wyodrębnić z niego składowe. Upraszcza sprawdzanie typów i rzutowanie.

Zobaczmy, jak używać dopasowywania do wzorca z instanceof:

Object obj = "Hello";
if (obj instanceof String str) {
   // str jest automatycznie rzutowany na String
   System.out.println(str.toUpperCase());
}

Po wykonaniu powyższego kodu wynikiem jest:

"HELLO"

Możesz też łączyć sprawdzanie dopasowania wzorców za pomocą else if:

Object value = 42;
String result;
if (value instanceof Integer i) {
    result = "Number: " + i;
} else if (value instanceof String s) {
    result = "Text: " + s;
} else {
    result = "Unknown";
}

Po wykonaniu powyższego kodu result zawiera:

“Number: 42”

challenge icon

Wyzwanie

Łatwy

Utwórz metodę o nazwie processValue, która przyjmuje jeden argument:

  1. Obiekt (value), który może być różnych typów

Metoda powinna używać dopasowywania wzorców z instanceof, aby przetworzyć wartość i zwrócić ciąg znaków zgodnie z poniższymi regułami:

  • Jeśli jest to Integer: zwróć "Number: " i podwojoną wartość
  • Jeśli jest to String: zwróć "Text: " i wartość zapisaną wielkimi literami
  • Jeśli jest to Boolean: zwróć "Boolean: " i przeciwną wartość (true zmienia się w false i odwrotnie)
  • W przypadku każdego innego typu: zwróć "Unknown"

Spróbuj swoich sił

import java.util.Scanner;

public class Main {
    public static String processValue(Object value) {
        // TODO: Użyj dopasowywania wzorców z instanceof, aby przetworzyć wartość
        // Jeśli jest typu Integer: zwróć "Number: " + (value * 2)
        // Jeśli jest typu String: zwróć "Text: " + value.toUpperCase()
        // Jeśli jest typu Boolean: zwróć "Boolean: " + (!value)
        // Dla każdego innego typu: zwróć "Unknown"
        
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String type = scanner.nextLine();
        String inputValue = scanner.nextLine();
        
        Object value = switch(type) {
            case "Integer" -> Integer.parseInt(inputValue);
            case "String" -> inputValue;
            case "Boolean" -> Boolean.parseBoolean(inputValue);
            default -> inputValue;
        };
        
        System.out.println(processValue(value));
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Java online