Commit 5383878d by Patryk Czarnik

Przykłady switch

parent d937b34d
package p05_switch;
import javax.swing.JOptionPane;
public class DniTygodnia0 {
public static void main(String[] args) {
int numer = Integer.parseInt(JOptionPane.showInputDialog("Podaj numer dnia tygodnia"));
if(numer == 1) {
JOptionPane.showMessageDialog(null, "To jest poniedziałek");
} else if (numer == 2) {
JOptionPane.showMessageDialog(null, "To jest wtorek");
} else if (numer == 3) {
JOptionPane.showMessageDialog(null, "To jest środa");
} else if (numer == 4) {
JOptionPane.showMessageDialog(null, "To jest czwartek");
} else if (numer == 5) {
JOptionPane.showMessageDialog(null, "To jest piątek");
JOptionPane.showMessageDialog(null, "weekendu początek");
} else if (numer == 6) {
JOptionPane.showMessageDialog(null, "To jest sobota");
} else if (numer == 7) {
JOptionPane.showMessageDialog(null, "To jest niedziela");
} else {
JOptionPane.showMessageDialog(null, "Niepoprawny numer", "Błąd", JOptionPane.ERROR_MESSAGE);
}
JOptionPane.showMessageDialog(null, "Koniec programu");
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class DniTygodnia1 {
// switch w takiej wersji, jaka w Javie jest dostępna od samego początku i działa też w języku C
// Jeśli mamy case'y z dwukropkami, a brakuje instrukcji break,
// to program przechodzi do kolejnych case'ów
public static void main(String[] args) {
int numer = Integer.parseInt(JOptionPane.showInputDialog("Podaj numer dnia tygodnia"));
switch(numer) {
case 1:
JOptionPane.showMessageDialog(null, "To jest poniedziałek");
case 2:
JOptionPane.showMessageDialog(null, "To jest wtorek");
case 3:
JOptionPane.showMessageDialog(null, "To jest środa");
case 4:
JOptionPane.showMessageDialog(null, "To jest czwartek");
case 5:
JOptionPane.showMessageDialog(null, "To jest piątek");
JOptionPane.showMessageDialog(null, "weekendu początek");
case 6:
JOptionPane.showMessageDialog(null, "To jest sobota");
case 7:
JOptionPane.showMessageDialog(null, "To jest niedziela");
default:
JOptionPane.showMessageDialog(null, "Niepoprawny numer", "Błąd", JOptionPane.ERROR_MESSAGE);
}
JOptionPane.showMessageDialog(null, "Koniec programu");
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class DniTygodnia2 {
// switch w takiej wersji, jaka w Javie jest dostępna od samego początku i działa też w języku C
// Aby przerwać wykonanie po jednym case, trzeba użyć break
public static void main(String[] args) {
int numer = Integer.parseInt(JOptionPane.showInputDialog("Podaj numer dnia tygodnia"));
switch(numer) {
case 1:
JOptionPane.showMessageDialog(null, "To jest poniedziałek");
break;
case 2:
JOptionPane.showMessageDialog(null, "To jest wtorek");
break;
case 3:
JOptionPane.showMessageDialog(null, "To jest środa");
break;
case 4:
JOptionPane.showMessageDialog(null, "To jest czwartek");
break;
case 5:
JOptionPane.showMessageDialog(null, "To jest piątek");
JOptionPane.showMessageDialog(null, "weekendu początek");
break;
case 6:
JOptionPane.showMessageDialog(null, "To jest sobota");
break;
case 7:
JOptionPane.showMessageDialog(null, "To jest niedziela");
break;
default:
JOptionPane.showMessageDialog(null, "Niepoprawny numer", "Błąd", JOptionPane.ERROR_MESSAGE);
}
JOptionPane.showMessageDialog(null, "Koniec programu");
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class DniTygodnia3 {
// switch w takiej wersji ze -> strzałkami, jaka w Javie jest dostępna od wersji 14
// Tutaj na pewno wykona się tylko jeden case; nie pisze się już break
public static void main(String[] args) {
int numer = Integer.parseInt(JOptionPane.showInputDialog("Podaj numer dnia tygodnia"));
switch(numer) {
case 1 ->
JOptionPane.showMessageDialog(null, "To jest poniedziałek");
case 2 ->
JOptionPane.showMessageDialog(null, "To jest wtorek");
case 3 ->
JOptionPane.showMessageDialog(null, "To jest środa");
case 4 ->
JOptionPane.showMessageDialog(null, "To jest czwartek");
case 5 -> {
JOptionPane.showMessageDialog(null, "To jest piątek");
JOptionPane.showMessageDialog(null, "weekendu początek");
}
case 6 ->
JOptionPane.showMessageDialog(null, "To jest sobota");
case 7 ->
JOptionPane.showMessageDialog(null, "To jest niedziela");
default ->
JOptionPane.showMessageDialog(null, "Niepoprawny numer", "Błąd", JOptionPane.ERROR_MESSAGE);
}
JOptionPane.showMessageDialog(null, "Koniec programu");
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class DniTygodnia4 {
// Nawet w oparciu o "stary styl" switchów możemy zdefiniować oddzielną funkcję,
// która mapuje numery dni tygodnia na ich nazwy.
// switch umieszczony w oddzielnej funkcji zaczyna wyglądać całkiem "zgrabnie".
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 " + 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 (IllegalArgumentException e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class DniTygodnia5 {
// Od Java 14 istnieje też konstrukcja "switch expression".
// Taki switch "daje wynik", który możemy np. wpisać do zmiennej.
// Przypomina to wywołanie funkcji, ale nie jest to oddzielna funkcja, tylko wyrażneie wpisane w miejscu użycia.
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 " + numer);
};
JOptionPane.showMessageDialog(null, "To jest " + nazwa);
} catch (IllegalArgumentException e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class IleDniMaMiesiac1 {
public static void main(String[] args) {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
// używając switcha (najlepiej jakoś "sprytnie" ;-) )
// wypisz ile dni ma ten miesiąc
// DLA CHĘTNYCH - w przypadku lutego zapytaj o rok i stosując zasady kalendarza gregoriańskiego
// ustal, czy rok jest przestępny
// rok jest przestępny, jeśli jest podzielny przez 4, ale nie jest podzielny przez 100, chyba że jest podzielny przez 400
// wersja mało sprytna - po prostu 12 oddzielnych przypadków
switch(miesiac) {
case "styczeń" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 31 dni");
case "luty" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 28/29 dni");
case "marzec" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 31 dni");
case "kwiecień" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 30 dni");
case "maj" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 31 dni");
case "czerwiec" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 30 dni");
case "lipiec" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 31 dni");
case "sierpień" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 31 dni");
case "wrzesień" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 30 dni");
case "październik" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 31 dni");
case "listopad" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 30 dni");
case "grudzień" -> JOptionPane.showMessageDialog(null, "Ten miesiąc ma 31 dni");
default -> JOptionPane.showMessageDialog(null, "Niepoprawny miesiąc", "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class IleDniMaMiesiac2 {
public static void main(String[] args) {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
// jeśli stosujemy switch / case w starym stylu z dwukropkiem,
// to można zgrupować case'y dla których jest jednakowa odpowiedź
// i nie pisać między nimi break
switch(miesiac) {
case "styczeń":
case "marzec":
case "maj":
case "lipiec":
case "sierpień":
case "październik":
case "grudzień":
JOptionPane.showMessageDialog(null,"Ten miesiąc ma 31 dni");
break;
case "luty":
JOptionPane.showMessageDialog(null,"Ten miesiąc ma 28/29 dni");
break;
case "kwiecień":
case "czerwiec":
case "wrzesień":
case "listopad":
JOptionPane.showMessageDialog(null,"Ten miesiąc ma 30 dni");
break;
default:
JOptionPane.showMessageDialog(null, "Niepoprawny miesiąc", "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class IleDniMaMiesiac3 {
public static void main(String[] args) {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
// Od Java 14 w jednym case można podać wiele wartości po przecinku
switch(miesiac) {
case "styczeń", "marzec", "maj", "lipiec", "sierpień", "październik", "grudzień" ->
JOptionPane.showMessageDialog(null, "Ten miesiąc ma 31 dni");
case "kwiecień", "czerwiec", "wrzesień", "listopad" ->
JOptionPane.showMessageDialog(null, "Ten miesiąc ma 30 dni");
case "luty" -> {
int rok = Integer.parseInt(JOptionPane.showInputDialog("Podaj rok"));
if (rok % 4 == 0 && rok % 100 != 0 || rok % 400 == 0) {
JOptionPane.showMessageDialog(null, "Ten miesiąc ma 29 dni");
} else {
JOptionPane.showMessageDialog(null, "Ten miesiąc ma 28 dni");
}
}
default -> JOptionPane.showMessageDialog(null, "Niepoprawny miesiąc", "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class IleDniMaMiesiac5 {
public static void main(String[] args) {
try {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
int ileDni = switch(miesiac) {
// w ramach switch expression, jeśli po wybraniu case'a wiemy od razu, jaki ma być wynik,
// to po prostu piszemy go za -> strzałką
case "styczeń", "marzec", "maj", "lipiec", "sierpień", "październik", "grudzień" -> 31;
case "kwiecień", "czerwiec", "wrzesień", "listopad" -> 30;
// ale jeśli w danym case jest więkcej kroków do wykonania,
// to wynik switcha zwracamy za pomocą słowa yield
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");
};
JOptionPane.showMessageDialog(null, "Miesiąc " + miesiac + " ma " + ileDni + " dni.");
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Błąd", JOptionPane.ERROR_MESSAGE);
}
// przy okazji - nowe instrukcje Javy mają status "identyfikatora o specjalym znaczeniu" a nie "słowa kluczowego"
// to znaczy, że w innych miejscach działają jak zwykłe nazwy; mogą być używane np. dla zmiennych
boolean yield = true;
var var = 15;
if(yield) {
JOptionPane.showMessageDialog(null, var);
}
}
}
package p05_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 p05_switch;
import javax.swing.JOptionPane;
public class SwitchString1 {
// To jest sprawdzanie, czy String jest nullem, kompatybilne z wersjami Javy od 7 do 20
// Gdybyśmy nie mieli tego if i do switch trafiłaby wartość null,
// to zostałby wyrzucony wyjątek NPE (niezależnie od tego, czy w tym switchu jest default, jakie są case'y itd)
public static void main(String[] args) {
String jezyk = JOptionPane.showInputDialog("Jaki jest twój ulubiony język programowania?");
if(jezyk == null) {
JOptionPane.showMessageDialog(null, "Brak odpowiedzi");
} else switch(jezyk) {
case "Java" -> JOptionPane.showMessageDialog(null, "Tak, to jest najlepszy język");
case "Python" -> JOptionPane.showMessageDialog(null, "Fajnie, ale to nie to");
// jbc, pusty string nie jest tym samym co null
case "" -> JOptionPane.showMessageDialog(null, "O co ci chodzi?");
default -> JOptionPane.showMessageDialog(null, "Nie wiem, nie wypowiem się");
}
}
}
package p05_switch;
import javax.swing.JOptionPane;
public class SwitchString2 {
public static void main(String[] args) {
// Dopiero od Java 21 można napisać case null jako oddzielny przypadek do sprawdzenia w switchu
// (kompilator wymaga też wtedy użycia default)
String jezyk = JOptionPane.showInputDialog("Jaki jest twój ulubiony język programowania?");
switch(jezyk) {
case "Java" -> JOptionPane.showMessageDialog(null, "Tak, to jest najlepszy język");
case "Python" -> JOptionPane.showMessageDialog(null, "Fajnie, ale to nie to");
// jbc, pusty string nie jest tym samym co null
case "" -> JOptionPane.showMessageDialog(null, "O co ci chodzi?");
case null -> JOptionPane.showMessageDialog(null, "Brak odpowiedzi");
default -> JOptionPane.showMessageDialog(null, "Nie wiem, nie wypowiem się");
}
}
}
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