Commit 6c61aaa4 by Patryk Czarnik

Dodatkowe przykłady switch

parent 1397cd4c
package p06_switch;
import javax.swing.JOptionPane;
public class DzienTygodnia4 {
/* W tak prostym przypadku, gdy dla liczby chcemy znać wartość (nazwę dnia tygodnia), zamiast switch można użyć tablicy. */
public static void main(String[] args) {
String[] tydzien = {"poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota", "niedziela"};
int numer = Integer.parseInt(JOptionPane.showInputDialog("Podaj numer dnia tygodnia"));
if(numer < 1 || numer > 7) {
JOptionPane.showMessageDialog(null, "Niepoprawny numer " + numer, "Błąd", JOptionPane.ERROR_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "To jest " + tydzien[numer-1]);
}
}
}
package p06_switch;
import javax.swing.JOptionPane;
public class DzienTygodnia5 {
// W tej wersji definiujemy funkcję, która zajmuje się zamianą numeru dnia tygodnia na jego nazwę.
static String nazwaDniaTygodnia(int numer) {
switch (numer) {
case 1: return "poniedziałek";
case 2: return "wtorek";
case 3: return "środa";
case 4: return "czwartek";
case 5: return "piątek";
case 6: return "sobota";
case 7: return "niedziela";
default: return "Niepoprawny numer";
}
}
public static void main(String[] args) {
int numer = Integer.parseInt(JOptionPane.showInputDialog("Podaj numer dnia tygodnia"));
String nazwa = nazwaDniaTygodnia(numer);
JOptionPane.showMessageDialog(null, "To jest " + nazwa);
}
}
package p06_switch;
import javax.swing.JOptionPane;
public class DzienTygodnia6 {
// W tej wersji definiujemy funkcję, która zajmuje się zamianą numeru dnia tygodnia na jego nazwę.
// Sytuację błędnych danych obsłużymy za pomocą wyjątków.
static String nazwaDniaTygodnia(int numer) {
switch (numer) {
case 1: return "poniedziałek";
case 2: return "wtorek";
case 3: return "środa";
case 4: return "czwartek";
case 5: return "piątek";
case 6: return "sobota";
case 7: return "niedziela";
default: throw new IllegalArgumentException("Niepoprawny numer");
}
}
public static void main(String[] args) {
try {
int numer = Integer.parseInt(JOptionPane.showInputDialog("Podaj numer dnia tygodnia"));
String nazwa = nazwaDniaTygodnia(numer);
JOptionPane.showMessageDialog(null, "To jest " + nazwa);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e, "Błąd!", JOptionPane.ERROR_MESSAGE);
}
JOptionPane.showMessageDialog(null, "Koniec programu");
}
}
package p06_switch;
import javax.swing.JOptionPane;
public class DzienTygodnia7 {
// W tej wersji używamy "switch expression" - od Java 14.
// switch expression to jest coś, co przypomina funkcję i zwraca jedną z z wartości na podstawie argumentu.
// (tutaj na podstawie wartości numer zwracane są napisy "poniedziałek" albo "wtorek" itd)
// ale nie jest to pisane jako odzielna funkcja, która ma swoją nazwę i może być wywoływana z różnych miejsc,
// tylko jest to wpisane w formie switcha w tym miejcu, gdzie jest potrzebne.
public static void main(String[] args) {
try {
int numer = Integer.parseInt(JOptionPane.showInputDialog("Podaj numer dnia tygodnia"));
String nazwa = switch (numer) {
case 1 -> "poniedziałek";
case 2 -> "wtorek";
case 3 -> "środa";
case 4 -> "czwartek";
case 5 -> "piątek";
case 6 -> "sobota";
case 7 -> "niedziela";
default -> throw new IllegalArgumentException("Niepoprawny numer");
};
JOptionPane.showMessageDialog(null, "To jest " + nazwa);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e, "Błąd!", JOptionPane.ERROR_MESSAGE);
}
JOptionPane.showMessageDialog(null, "Koniec programu");
}
}
package p06_switch;
import javax.swing.JOptionPane;
// W tej wersji użyjemy switch expression
// Gdy w danym case jest jeden wynik do zwrócenia, to piszemy go bezpośrednio za znakiem ->
// Gdy w danym case (jak tutaj dla lutego) trzeba wykonać jeszcze dodatkowe kroki,
// to wynik switcha jest wtedy zwracany za pomocą słowa yield
public class IleDniMaMiesiac7 {
public static void main(String[] args) {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
int ileDni = switch(miesiac) {
case "styczeń", "marzec", "maj", "lipiec", "sierpień", "październik", "grudzień" -> 31;
case "kwiecień", "czerwiec", "wrzesień", "listopad" -> 30;
case "luty" -> {
int rok = Integer.parseInt(JOptionPane.showInputDialog("Podaj rok"));
if(rok % 4 == 0 && rok % 100 != 0 || rok % 400 == 0) {
yield 29;
} else {
yield 28;
}
}
default -> throw new IllegalArgumentException("Niepoprawny miesiąc " + miesiac);
};
JOptionPane.showMessageDialog(null, "Miesiąc " + miesiac + " ma " + ileDni + " dni");
}
}
package p06_switch;
import java.io.File;
import java.time.LocalDate;
public class SwitchNaObiektach {
/* W Java 21 pojawiły się kolejne możliwości switcha:
https://openjdk.org/jeps/441
* - case null jako legalny warunek
* - rozróżnianie obiektów wg ich typu
* - klauzula when z warunkiem logicznym
*/
public static void main(String[] args) {
Object jakisObiekt;
// jakisObiekt = "owca";
// jakisObiekt = "koza";
// jakisObiekt = "";
// jakisObiekt = new File("sciezka/do/pliku.txt");
jakisObiekt = LocalDate.of(1997, 8, 19);
switch(jakisObiekt) {
case String s when s.startsWith("o") -> System.out.println("To jest napis na o:" + s);
case String s when s.startsWith("k") -> System.out.println("To jest napis na k:" + s);
case String s when s.equalsIgnoreCase("java") -> System.out.println("To jest napis JAVA");
case String s -> System.out.println("To jest inny napis: " + s);
case File f -> System.out.println("To jest plik " + f.getAbsolutePath());
case LocalDate dt -> System.out.println("To jest data " + dt + " (dzień tygodnia " + dt.getDayOfWeek() +")");
case null -> System.out.println("Nie ma nic");
default -> System.out.println("Nie wiem co to jest. Ale klasą jest " + jakisObiekt.getClass());
}
}
}
package p06_switch;
public class TypySwitch {
public static void main(String[] args) {
short liczba = 100;
switch(liczba) {
case 1 : System.out.println("jeden");
case 2 : System.out.println("dwa");
case 100 : System.out.println("sto");
// case 1000000: System.out.println("milion");
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment