Commit 5d119f40 by Patryk Czarnik

switch miesiac

parent 201577b3
package gotowe1.p05_switch;
import javax.swing.JOptionPane;
/* Program dla podanej nazwy miesiąca (np "styczeń")
* ma wypisać, ile dni ma ten miesiąc. */
public class IleDniMaMiesiac1 {
// Wersja poprawna, ale napisana w bardzo prymitywny sposób - każda sytuacja opisana oddzielnym casem , jest duplikacja kodu
public static void main(String[] args) {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
switch(miesiac) {
case "styczeń":
JOptionPane.showMessageDialog(null, "31 dni");
break;
case "luty":
JOptionPane.showMessageDialog(null, "28 lub 29 dni");
break;
case "marzec":
JOptionPane.showMessageDialog(null, "31 dni");
break;
case "kwiecień":
JOptionPane.showMessageDialog(null, "30 dni");
break;
case "maj":
JOptionPane.showMessageDialog(null, "31 dni");
break;
case "czerwiec":
JOptionPane.showMessageDialog(null, "30 dni");
break;
case "lipiec":
JOptionPane.showMessageDialog(null, "31 dni");
break;
case "sierpień":
JOptionPane.showMessageDialog(null, "31 dni");
break;
case "wrzesień":
JOptionPane.showMessageDialog(null, "30 dni");
break;
case "październik":
JOptionPane.showMessageDialog(null, "31 dni");
break;
case "listopad":
JOptionPane.showMessageDialog(null, "30 dni");
break;
case "grudzień":
JOptionPane.showMessageDialog(null, "31 dni");
break;
default:
JOptionPane.showMessageDialog(null, "Nieznany miesiąc " + miesiac, "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
}
package gotowe1.p05_switch;
import javax.swing.JOptionPane;
public class IleDniMaMiesiac2 {
// Wersja z tradycyjnym switch z : i break. - działa w starych wersjach Javy oraz w C
// W tej wersji staramy się grupować przypadki z taką samą odpowiedzią.
// Jeśli napiszemy wiele case-ów bez break, to dla każdego z nich wykonamy taką samą rzecz.
// W przypadku lutego zadajemy dodatkowe pytanie o rok przestępny.
public static void main(String[] args) {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
switch(miesiac) {
case "styczeń":
case "marzec":
case "maj":
case "lipiec":
case "sierpień":
case "październik":
case "grudzień":
JOptionPane.showMessageDialog(null, "31 dni");
break;
case "kwiecień":
case "czerwiec":
case "wrzesień":
case "listopad":
JOptionPane.showMessageDialog(null, "30 dni");
break;
case "luty":
if(JOptionPane.showConfirmDialog(null, "Czy to jest rok przestępny?") == JOptionPane.YES_OPTION) {
JOptionPane.showMessageDialog(null, "29 dni");
} else {
JOptionPane.showMessageDialog(null, "28 dni");
}
break;
default:
JOptionPane.showMessageDialog(null, "Nieznany miesiąc " + miesiac, "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
}
package gotowe1.p05_switch;
import javax.swing.JOptionPane;
public class IleDniMaMiesiac3 {
// Wersja dla Javy 14:
// Dzięki użyciu -> nie trzeba pisać break.
// W przypadku lutego zadajemy dodatkowe pytanie o rok przestępny - trzeba to umieścić w {bloku}.
// Od Javy 14 wiele wartości można umieścić w jednym case rozdzielając przecinkiem ,
// W tej wersji wielkość liter jest ignorowana, dzięki temu, że napis użytkownika zamieniamy na małe litery
// I usuwamy niepotrzebne spacje.
public static void main(String[] args) {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
switch(miesiac.strip().toLowerCase()) {
case "styczeń", "marzec", "maj", "lipiec", "sierpień", "październik", "grudzień" ->
JOptionPane.showMessageDialog(null, "31 dni");
case "kwiecień", "czerwiec", "wrzesień", "listopad" ->
JOptionPane.showMessageDialog(null, "30 dni");
case "luty" -> {
if(JOptionPane.showConfirmDialog(null, "Czy to jest rok przestępny?") == JOptionPane.YES_OPTION) {
JOptionPane.showMessageDialog(null, "29 dni");
} else {
JOptionPane.showMessageDialog(null, "28 dni");
}
}
default ->
JOptionPane.showMessageDialog(null, "Nieznany miesiąc " + miesiac, "Błąd", JOptionPane.ERROR_MESSAGE);
}
}
}
package gotowe1.p05_switch;
import javax.swing.JOptionPane;
public class IleDniMaMiesiac4 {
/* W tej wersji używamy "switch expression".
* W prostych przypadkach (30 lub 31 dni) wystarczy wpisac wartośc za strzałką ->
* W przypadku lutego mamy dodatkowego if-a i aby w tej sytuacji (generalnie: gdy mamy {blok kodu})
* to wynik switcha zwracamy za pomocą słowa kluczowego yield.
*
* Z kolei w przypadku niepoprawnej nazwy nie ma żadnego wyniku - zamiast tego wyrzucamy wyjątek.
*/
public static void main(String[] args) {
String miesiac = JOptionPane.showInputDialog("Podaj nazwę miesiąca");
int ileDni = switch(miesiac.strip().toLowerCase()) {
case "styczeń", "marzec", "maj", "lipiec", "sierpień", "październik", "grudzień" ->
31;
case "kwiecień", "czerwiec", "wrzesień", "listopad" ->
30;
case "luty" -> {
int rok = Integer.parseInt(JOptionPane.showInputDialog("O który rok chodzi?"));
if(rok % 4 == 0 && rok % 100 != 0 || rok % 400 == 0) {
yield 29;
} else {
yield 28;
}
}
default -> throw new IllegalArgumentException("Nieznany miesiąc " + miesiac);
};
JOptionPane.showMessageDialog(null, "Miesiąc " + miesiac + " ma " + ileDni + " dni");
}
}
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