if switchCzęść NR.5Kolejny krótki wpis, który ma porównać składnie C# i Javy.
W tym wpisie warunki.
Wyrażenia if
Wyrażenie if wywoła się tylko, gdy warunek podany w nawiasach jest równy prawdzie. Warunek w nawiasach może składać się z porównania i logicznych operatorów.
Poniżej znajduje się wyrażenie if. Korzystając z klasy Random losuje liczbę od 0 do 10.
Jeśli wylosowana liczba jest mniejsza od 6, to kod wewnątrz bloku if się wykona.
int numRandom = new System.Random().Next(10);
if (numRandom < 6)
{
System.Console.Write(numRandom + " < 6");
}
Jeśli chcemy sprawdzić kolejny warunek, gdy poprzedni się nie wykonał, wtedy korzystamy z klauzury “else if”.
else if (numRandom > 6)
{
System.Console.Write(numRandom + " > 6");
}
Zapisów else if może być wiele.
Jeśli chcemy wykonać kod, gdy wszystkie poprzednie wyrażenia if i else if nie zostały spełnione, wtedy korzystamy z bloku “else”.
int numRandom = new System.Random().Next(10);
if (numRandom < 6)
{
System.Console.Write(numRandom + " < 6");
}
else if (numRandom > 6)
{
System.Console.Write(numRandom + " > 6");
}
else
{
System.Console.Write(numRandom + " == 6");
}
Blok else wykona się tylko, gdy pierwszy warunek nie został spełniony oraz następny. Czyli przy wyrażeniu else jesteśmy pewni, że liczba musi być równa sześć, skoro nie jest ona ani większa ani mniejsza od sześciu.
Oto ten sam kod w Javie. Poza różnicami użycia w klasie Random oraz w System.out różnic nie ma. Czyli wyrażenia if, else if i else działają tak samo w Javie jak i w C#.
import java.util.Random;
public class if_ {
public static void main(String[] args) {
Random rand = new Random();
int randomNum = rand.nextInt(10);
if (randomNum < 6) {
System.out.print(randomNum + " < 6");
}
else if (randomNum > 6) {
System.out.print(randomNum + " > 1");
}
else {
System.out.print(randomNum + " == 6");
}
}
}
Warunek podany w nawiasach może być bardziej złożony. Przykładowo może zawierać operator operacji logicznej omówiony w poprzednich wpisach.
int i = 20;
if (i < 19 || i > 21)
{
}
else if (i == 19 || i == 21)
{
}
else if (i == 20)
{
}
else
{
}
Wyrażenie Switch
Wyrażenie switch sprawdza równość liczb całkowitych, napisów i serii wartości danego typu wyliczeniowego.
Przykładowo ułamki nie mogą być użyte.
Jeżeli zmienna równa się tyle, co wartość w danym słowie case, wtedy ten kod się wykonuje.
By przerwać wywoływanie danego wyrażenia case musimy użyć słowa kluczowego break. Gdy chcemy wykonać ten sam kod dla wielu wyrażeń case, wtedy nie używamy wrażenia break, aż do momentu, gdy nasze życzenie zostało spełnione.
Dla liczby całkowitej
int r = 10;
switch (r)
{
case 0: System.out.print(r + " is 0"); break;
case 1: System.out.print(r + " is 1"); break;
case 2: System.out.print(r + " is 2"); break;
case 3: case 4: case 5: case 6:
System.out.print(r + " is 3,4,5 or 6");
break;
default:System.out.print(r + " is something else");break;
}
Dla napisu.
String r = "10";
switch (r)
{
case "0": System.out.print(r + " is 0"); break;
case "1": System.out.print(r + " is 1"); break;
case "2": System.out.print(r + " is 2"); break;
case "3": case "4": case "5": case "6":
System.out.print(r + " is 3,4,5 or 6");
break;
default:System.out.print(r + " is something else");
break;
}
Wyrażenia switch działają tak samo w C#.
int r = 10;
switch (r)
{
case 0: System.Console.Write(r + " is 0"); break;
case 1: System.Console.Write(r + " is 1"); break;
case 2: System.Console.Write(r + " is 2"); break;
case 3:
case 4:
case 5:
case 6:
System.Console.Write(r + " is 3,4,5 or 6");
break;
default: System.Console.Write(r + " is something else");
break;
}
Goto
Wyrażenia Goto są zakazane. Dlatego, że rodzą one więcej problemów niż rozwiązują.
W Javie, mimo, iż keyword jest zarezerwowany, nie może być on użyty.
"The keywords const and goto are reserved, even though they are not currently used."
W C# słowo kluczowe goto działa. Co ono robi, że jest zakazane. Pozwala na skakanie po kodzie.
W tym przykładzie, gdy liczba w zmiennej r będzie równa sześć wywoła się wyrażenie goto. Wyrażenie to sprawi, że skoczę do zapisu “myPoint” czyli wyświetlę napis “End”.
switch (r)
{
case 6:
goto myPoint;
default:
System.Console.Write(r + " is something else");
myPoint:
System.Console.Write("End");
break;
}
Wyrażenie goto może być użyte nie tylko wewnątrz wyrażenia switch.
goto myPoint;
// ...
myPoint:
System.Console.Write("Yeh");
Operator Ternary
Do dodatku wyrażeń if i switch oba języki mają operator Ternary. Ja go nazywam operatorem trójargumentowym.
Operator ten przyjmuje trzy wyrażenia. Pierwsze wyrażenie przyjmuje logiczne wyrażenie. Dwa następne określają wartości zwracane w zależności od wyniku logicznego wyrażenia.
Druga wartość zostanie zwrócona, gdy pierwsze wyrażenie jest prawdziwe. Trzecia wartość zostanie zwrócona, gdy pierwsze wyrażenie jest fałszywe.
Kod ten działa i w C# i w Javie.
double r2 = 0.4;
r2 = (r2 < 0.8) ? 0 : 1; // (?:)