Jedną z charakterystycznych cech języka jest możliwość realizacji rozwidleń programu w zależności od wartości warunku do sprawdzenia. Najbardziej rozpowszechnioną wersją rozwidleń warunkowych jest:
if … else
Przykładem działania tego polecenia jest kod:
if (yy>zz) System.out.println("jest większe");
else System.out.println("jest mniejsze");
Po wyrażeniu if następuje blok warunku, który w () jest obliczany zgodnie z zasadami matematycznymi. Jeśli ewaluacja warunku daje wynik true, to wykonywana jest wtedy sekwencja rozkazów rozpoczęta i zakończona {}, w przypadku pojedynczego rozkazu można pominąć obramowanie bloku. Jeśli chcemy, aby w tym rozgałęzieniu była sekwencja nie tylko dla spełnionego warunku, ale także obsługa sytuacji, gdy warunek jest niespełniony, wtedy używamy słowa kluczowego else i po nim znowuż w sekwencji rozkazów okolonej {} umieszczamy ten kod, który ma się wykonać w takiej sytuacji.
switch/case
Ta struktura rozgałęziania przydaje się w sytuacji, kiedy chcemy obsłużyć większą liczbę możliwych stanów, nie tylko tak/nie. Stosowana jest często w menu, gdzie uruchamia odpowiednie procedury w zależności od wartości warunku, tak więc:
String komenda="czytaj";
switch (komenda) {
case "test" : testuj();
break;
case "czytaj": czytaj(); // w niniejszym przykładzie do tego miejsca skoczy program napotykając switch/case z takimi wartościami warunku.
break;
case "pisz" : pisz();
break;
default: brak();
}
To co jest istotne w switch/case to fakt, że case … tak naprawdę oznacza zgodną z warunkiem etykietę do której „skacze” wskaźnik wykonywania programu i od którego miejsca dalej program jest realizowany. Jeśli nie mamy na celu zrealizowania poleceń dla innych etykiet (innych case’ów umieszczonych poniżej punktu do którego „wskoczyliśmy”, to musimy przerwać wykonywanie tej sekwencji programowej i poinstruować kompilator aby przeszedł do kolejnego rozkazu, ale już po pasującym bloku w switch/case. Odbywa się to poleceniem break; Jeśli nie użylibyśmy słowa break; to program wykonałby wszystkie instrukcje od momentu „wskoczenia” na pasującą pozycję, aż do końca bloku switch/case, co z reguły jest błędne. Innym poleceniem jest continue; który w odróżnieniu powoduje przejście na początek bloku i ponowną ewaluację warunku. Polecenia break; i continue; dotyczą każdego stworzonego bloku programistycznego {}, co z reguły dotyczy pętli i nakazują opuszczenie, bądź ponowną ewaluację takiej struktury.
Trój-argumentowy operator warunkowy ? :
Jest ciekawym, aczkolwiek nieporęcznym rozgałęzieniem programu – w przypadku dużych bloków jest nieczytelny i sprzyja powstawaniu błędów. Tym niemniej jest wygodny, a jego używanie wskazuje na swobodę programistyczną z jaką programista potrafi podchodzić do zleconych mu zagadnień. Jego konstrukcja to:
( warunek ) ? { rozkazy jeśli warunek jest na true} : { rozkazy jeśli warunek jest na false}
Często ten typ rozwidlenia stosowany jest w wyświetlaniu różnych komunikatów w uzależnieniu od stanu warunku, np.:
System.out.println( (yy>zz) ? "jest większe" : "jest mniejsze" );