W świecie programowania Java instrukcje przełączników są potężnym narzędziem do kontrolowania przepływu programu opartego na wartości wyrażenia. Oferują bardziej zwięzłą i czytelną alternatywę dla serii oświadczeń if - inaczej, szczególnie w przypadku wielu możliwych wartości. Jednak powszechnym pytaniem, które pojawia się wśród programistów Java, jest to, czy instrukcja przełącznika może obsłużyć zmienne wartości punktowe. Jako dostawca przełącznika, interesuje mnie nie tylko oferowane przez nas przełączniki sprzętowe, takie jakPrzełącznik PowerPoint z ładowarką USBWPojedynczy przełącznik PowerPoint, ISmart USB PowerPoint Gniazdo ścienne Wi -Fi PD30W, ale także w oprogramowaniu - przełączniki boczne w językach programowania. Zagłębiajmy się w ten temat, aby zrozumieć możliwości i ograniczenia instrukcji przełączników w Javie, jeśli chodzi o zmienne wartości punktowe.
Podstawy oświadczeń przełączników w Javie
Zanim omówimy wartości pływające - punktowe, najpierw przejrzyjmy podstawy instrukcji przełączników w Javie. Instrukcja przełącznika umożliwia testowanie zmiennej pod kątem równości w stosunku do listy wartości. Każda wartość nazywa się przypadkiem, a włączona zmienna jest porównywana z każdym przypadkiem. W przypadku znalezienia dopasowania blok kodu powiązany z tą sprawą jest wykonywany. Oto prosty przykład instrukcji przełącznika za pomocą liczby całkowitej:


int dzień = 3; switch (dzień) {case 1: System.out.println („poniedziałek”); przerwa; Przypadek 2: System.out.println („Wtorek”); przerwa; Przypadek 3: System.out.println („środa”); przerwa; Domyślnie: system.out.println („inny dzień”); }
W tym przykładzie zmiennadzieńjest porównywany z każdą wartością przypadku. Oddzieńjest równe 3, blok kodu dlaPrzypadek 3jest wykonywany, a „środa” jest drukowana do konsoli. .przerwaInstrukcja służy do wyjścia z bloku przełącznika po znalezieniu dopasowania, zapobiegając wykonaniu kolejnych bloków przypadków.
Typy danych obsługiwane przez instrukcje przełączników w Javie
Instrukcje przełączników Java obsługują ograniczony zestaw typów danych. Od Java 14 następujące typy danych można użyć w instrukcji Switch:
- Prymitywne typy:
bajtWkrótkiWzwęglać, Iint. Są to wszystkie typy integralne, co oznacza, że reprezentują liczby całkowitą. - Zajęcia opakowania:
BajtWKrótkiWCharakter, ILiczba całkowita. Są to obiektowe odpowiedniki prymitywnych typów. - Typy wyliczenia: Enums to specjalny typ danych, który pozwala zmiennej być zestawem predefiniowanych stałych.
- Typ ciągu: Począwszy od Java 7, instrukcje przełącznika mogą obsłużyć
SmyczkowyWartości, które są bardzo przydatne do obsługi warunków na podstawie tekstu.
Dlaczego wartości pływające - wartości punktowe nie są obsługiwane
Pływające - liczby punktów w Javie są reprezentowane przezplatformaIpodwójnietypy danych. Te typy służą do reprezentowania liczb rzeczywistych z częścią ułamkową. Jednak instrukcje przełączania w Javie nie obsługują zmiennych wartości punktowych. Istnieje kilka powodów tego ograniczenia:
Problemy precyzyjne
Liczby punktowe - liczby punktowe są przechowywane w formacie binarnym i nie wszystkie liczby dziesiętne mogą być reprezentowane dokładnie w binarie. Na przykład liczba dziesiętna 0.1 nie może być reprezentowana dokładnie jako binarna liczba zmiennoprzecinkowa. Podczas wykonywania operacji arytmetycznych na liczbach zmiennoprzecinkowych - małe błędy mogą się gromadzić, co prowadzi do problemów z precyzyjnymi. Rozważ następujący kod:
float a = 0,1f; float b = 0,2f; float c = a + b; if (c == 0,3f) {System.out.println („równy”); } else {System.out.println („nie równe”); }
W wielu przypadkach wyjście tego kodu będzie „nie równe” ze względu na precyzyjne problemy z arytmetyką zmiennoprzecinkową. Ponieważ instrukcje przełączników opierają się na dokładnych porównań równości, stosowanie wartości zmiennoprzecinkowych - wartości punktowe doprowadziłyby do nieprzewidywalnych wyników.
Wydajność i złożoność
Wdrażanie instrukcji przełączników dla wartości zmiennoprzecinkowych wymagałoby bardziej złożonego i kosztownego obliczeniowo mechanizmu porównawczego. W przeciwieństwie do typów integralnych, które można porównać przy użyciu prostych operacji bitowych, porównań zmiennoprzecinkowych obejmuje sprawdzenie znaku, wykładnika i mantissy liczb. Dodałoby to znaczne koszty ogólne do instrukcji przełącznika, która została zaprojektowana jako szybka i wydajna struktura sterowania.
Alternatywy dla używania wartości pływających - wartości punktowe w instrukcjach przełączników
Jeśli chcesz wykonać operacje warunkowe w oparciu o wartości zmiennoprzecinkowe, istnieje kilka alternatyw dla użycia instrukcji przełącznika:
Jeśli - inaczej stwierdzenia
Najprostszą alternatywą jest użycie serii instrukcji if - else. Możesz użyć operatorów porównawczych, takich jak<W>W<=W> =, I==Aby sprawdzić wartość zmiennej zmiennoprzecinkowej. Oto przykład:
podwójna temperatura = 25,5; if (temperatura <0) {System.out.println („zamrażanie”); } else if (temperatura> = 0 && temperatura <10) {System.out.println („zimno”); } else if (temperatura> = 10 && temperatura <20) {System.out.println („Cool”); } else if (temperatura> = 20 && temperatura <30) {System.out.println („ciepłe”); } else {System.out.println („hot”); }
Tabele wyszukiwania
Innym podejściem jest użycie tabeli wyszukiwania. Możesz utworzyć tablicę lubMapaTo mapy zakresy zmiennoprzecinkowych wartości do odpowiednich działań. Oto przykład za pomocąMapa:
import java.util.hashmap; import java.util.map; public class FloatingPointLookup {public static void main (string [] args) {Double Value = 22.5; Map <String, String> rangEmap = new HashMap <> (); rangEmap.put („0-10”, „zimno”); rangEmap.put („10-20”, „Cool”); rangEmap.put („20-30”, „ciepłe”); rangEmap.put („30+”, „gorący”); Kategoria strunowa; if (wartość <0) {kategoria = "freezing"; } else if (wartość <10) {kategoria = rangEmap.get („0-10”); } else if (wartość <20) {kategoria = rangEmap.get („10-20”); } else if (wartość <30) {kategoria = rangEmap.get („20-30”); } else {kategoria = rangEmap.get („30+”); } System.out.println (kategoria); }}
Wniosek
Podsumowując, instrukcje przełączania w Javie nie obsługują zmiennych wartości punktowych ze względu na precyzyjne problemy i względy wydajności. Podczas gdy instrukcje przełączników są potężnym narzędziem do obsługi ograniczonego zestawu typów danych, jeśli chodzi o wartości zmiennoprzecinkowe, musisz zastosować alternatywne podejścia, takie jak - inaczej inaczej lub tabele wyszukiwania.
Jako dostawca przełącznika, rozumiemy znaczenie zapewnienia niezawodnych i wydajnych rozwiązań. Czy szukasz przełączników sprzętowych, takich jakPrzełącznik PowerPoint z ładowarką USBWPojedynczy przełącznik PowerPoint, LubSmart USB PowerPoint Gniazdo ścienne Wi -Fi PD30Wlub radzenie sobie z oprogramowaniem - przełącznikiem bocznym - takim jak operacje w programowaniu, jesteśmy tutaj, aby Ci pomóc. Jeśli jesteś zainteresowany naszymi produktami lub masz pytania dotyczące rozwiązań związanych z przełącznikiem, skontaktuj się z nami w celu uzyskania zamówień i dalszych dyskusji.
Odniesienia
- Oracle Java Dokumentacja: https://docs.oracle.com/javase/specs/jls/se14/html/jls - 14.html#JLS - 14.11
- Floating - Point Arytmetic: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html





