Commit 4d33c128 by Patryk Czarnik

Przykłady nt instrukcji (if, switch, pętle)

parent 43557458
package pcz.p03_instrukcje.a_if;
import java.util.Random;
public class A_TeoriaIf {
public static void main(String[] args) {
Random random = new Random();
int x = random.nextInt(100); // liczba od 0 do 99 włącznie
int y = random.nextInt(100);
System.out.println("Wylosowane liczby:");
System.out.printf("x = %d , y = %d\n", x, y);
// Wzorcowa wersja if:
// if(WARUNEK) { INSTRUKCJE1 } else { INSTRUKCJE2 }
// Gdy WARUNEK jest prawdą, wykonają się INSTRUKCJE1, a jeśli nieprawdą to INSTRUKCJE2
if(x % 2 == 0) {
System.out.println("x jest parzysty");
System.out.println("Ala ma kota");
} else {
System.out.println("x jest nieparzysty");
System.out.println("Ola ma psa");
}
System.out.println("a kuku");
System.out.println();
// Jeśli za ifem lub elsem do wykonania jest tylko jedna instrukcja, to można pominąć nawiasy klamrowe.
if(x >= 50)
System.out.println(">= 50");
else
System.out.println("< 50");
// Używajmy tego jednak z umiarem, tylko w bardzo prostych przypadkach, np. break, throw, return...
// W większości przypadków zalecane jest wzięcie wykonywanego kodu w {nawiasy klamrowe},
// gdyż łatwiej dokonać późniejszych zmian, np. dodać kolejną linię itp...
/* Za instrukcją strukturalną (if, while, for...) w praktyce nigdy nie stawia się średnika
if(x == y); {
System.out.println("Obie liczby są równe!");
}
Powyższy kod zawsze wyświetliłby podany napis, bo struktiura jest taka:
"jeśli x == y, nie rób nic; a później ZAWSZE wypisuj ten tekst"
*/
// Można użyć samego if, bez else:
if(x + y >= 100) {
System.out.println("suma x i y jest trzycyfrowa");
}
// ify (i inne instrukcje blokowe) można zagnieżdżać. Tutaj tym bardziej zalecamy pisanie nawiasów {}
if(x % 2 == 0) {
if(y % 2 == 0) {
System.out.println("obie liczby są parzyste");
} else {
System.out.println("x parzysty, y nieparzysty");
}
} else {
if(y % 2 == 0) {
System.out.println("x nieparzysty, y parzysty");
} else {
System.out.println("obie liczby nieparzyste");
}
}
System.out.println();
// Jeśli rozpatrywanych sytuacji jest więcej niż 2, to typowym sposobem zapisu jest ciąg
// if - else if - ... - else
if(x > y) {
System.out.println("x > y");
} else if(x < y) {
System.out.println("x < y");
} else {
System.out.println("x = y");
}
// W Javie nie ma automatycznej konwersji liczb (ani innych rzeczy) na boolean
// if(liczba) {
// System.out.println("Nie zero");
// }
//
// if(liczba = 0) {
// System.out.println("Nie zero");
// }
// Warunkiem najczęściej jest porównanie, ale może też być wywołanie metody typu boolean
String str = "Ala ma kota";
if(str.isEmpty()) {
System.out.println("puste");
}
// może też być bezpośrednie użycie zmiennej typu boolean
boolean logika = x > 10 && y % 3 == 0;
if(logika) {
System.out.println("Dziwny warunek jest prawdą");
} else {
System.out.println("Nieprawda");
}
System.out.println("Koniec programu");
}
}
package pcz.p03_instrukcje.b_petle;
public class A_RodzajePetli {
public static void petlaWhile() {
int i = 1;
while(i <= 5) {
System.out.println("w pętli: " + i);
i++;
}
System.out.println("za pętlą: " + i);
}
public static void doWhile() {
int i = 1;
do {
System.out.println("w pętli: " + i);
i++;
} while(i <= 5);
System.out.println("za pętlą: " + i);
}
// ominięte w main
public static void petlaFor() {
for(int i = 1; i <= 5; i++) {
System.out.println("w pętli " + i);
}
// NK System.out.println("za pętlą: " + i);
int i; // OK
}
public static void petlaFor2() {
int i;
for(i = 1; i <= 5; i++) {
System.out.println("w pętli " + i);
}
System.out.println("za pętlą: " + i); // 6
// NK int i;
}
// ominięte w main
public static void petlaFor3() {
// int i;
for(int i = 1, j = 10; i <= 5 && j < 3; i++, j = i / 10, System.out.println("z pętli " + j)) {
System.out.println("w pętli " + i);
}
// System.out.println("za pętlą: " + i);
}
// ominięte w main
// w for moga byc dowolne instrukcje
public static void petlaFor4(org.w3c.dom.Node node) {
for(org.w3c.dom.Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) {
System.out.println(child.getTextContent());
}
}
public static void losowanie() {
for(;;) {
double x = Math.random();
System.out.println("Wylosowałem " + x);
if(x > 0.8)
break;
}
System.out.println("za pętlą");
}
public static void forEach() {
String[] imiona = { "Ala", "Ola", "Ela", "Ula" };
// pozwala przeglądać zawartość tablicy, albo obiekty, które są Iterable
// tzw. "for-each" albo "enhanced for loop", od Javy 5
for(String imie: imiona) {
System.out.println("Kolejna osoba to " + imie);
}
// Od Javy 10 można tak:
// for(var imie : imiona) {
// System.out.println("Kolejna osoba to " + imie);
// }
}
public static void forEachEgzamin() {
// typowa zmyłka z egzaminu
int[] t = { 1, 2, 3 };
for(int i: t) {
// i oznacza WARTOŚĆ z tablicy, a nie indeks
// więc tu dojdzie do wyjścia poza zakres tablicy
System.out.println(t[i]);
}
}
public static void przerwanie() {
for(int i = 1; i <= 10; i++) {
System.out.println("i = " + i);
if(i % 2 == 1) {
System.out.println(" nieparzysta, continue");
continue;
}
System.out.println(" nie było continue");
if(i % 3 == 0) {
System.out.println(" podzielna przed 3, break");
break;
}
System.out.println(" nie było break");
}
System.out.println("za pętlą");
}
public static int etykiety() {
int suma = 0;
duza: while(true) {
for(int i = 1; i < 10; i++) {
suma += i;
if(suma > 100)
break duza;
}
}
return suma;
}
public static void main(String[] args) {
etykieta: // kompiluje się, ale nie ma jak tego użyć
System.out.println("while");
petlaWhile();
//NK goto etykieta;
System.out.println("\ndo-while");
doWhile();
System.out.println("\nfor");
petlaFor2();
System.out.println("\nLosowanie:");
losowanie();
System.out.println("\nfor-each");
forEach();
System.out.println();
przerwanie();
System.out.println();
int x = etykiety();
System.out.println(x);
}
}
package pcz.p03_instrukcje.b_petle;
import javax.swing.JOptionPane;
public class BreakContinue_Prezentacja {
public static void main(String[] args) {
int licznik = 0;
while(true) {
licznik++;
JOptionPane.showInternalMessageDialog(null, "Początek pętli, licznik = " + licznik);
int odp1 = JOptionPane.showConfirmDialog(null, "Czy zrobić break?");
if(odp1 == JOptionPane.YES_OPTION) {
break;
// break w pętli powoduje natychmiastowe zakończenie tej pętli i przejście do następnej instrukcji za pętlą
}
JOptionPane.showInternalMessageDialog(null, "Środek pętli. Nie było break.");
int odp2 = JOptionPane.showConfirmDialog(null, "Czy zrobić continue?");
if(odp2 == JOptionPane.YES_OPTION) {
continue;
// continue powoduje pominięcie reszty instrukcji w bieżącym obrocie pętli
// i przejście od razu na początek następnego obrotu
}
JOptionPane.showInternalMessageDialog(null, "Koniec pętli, nie było break ani continue");
}
JOptionPane.showInternalMessageDialog(null, "Koniec programu");
}
}
package pcz.p03_instrukcje.b_petle;
public class DziwnyWhile {
public static void main(String[] args) {
int x = 1;
{
System.out.println("Ala ma kota " + x);
x++;
}
while(x <= 10)
;
// To jest zwykły blok a potem pętla nieskończona
System.out.println("Koniec");
}
}
package pcz.p03_instrukcje.b_petle;
public class Label {
public static void main(String[] args) {
label1: System.out.println("Cokolwiek");
label2: while(true) {
double x = Math.random();
if(x > 0.5)
break label2;
}
// goto label1;
// const int n = 10;
}
}
package pcz.p03_instrukcje.b_petle;
public class MartwyKod {
void metoda1() {
System.out.println("OK");
return;
// System.out.println("błąd");
// System.out.println("kolejna linia");
}
void metoda2() throws Exception {
System.out.println("OK");
throw new Exception("katastrofa");
// System.out.println("błąd");
}
public static void main(String[] args) {
// if(true) / if(false) NIE są traktowane jako martwy kod
if(false) {
System.out.println("Ala ma kota");
}
if(true) {
System.out.println("AAAA");
} else {
System.out.println("BBBB");
}
// while(false) {
// System.out.println("błąd");
// }
while(true) {
System.out.println("lkdfjg");
}
// System.out.println("błąd");
}
}
package pcz.p03_instrukcje.b_petle;
import java.time.LocalTime;
public class PetlaNieskonczona {
public static void main(String[] args) {
int licznik = 0;
while(true) {
System.out.printf("%12d : %s%n", ++licznik, LocalTime.now());
}
// Kod w tym miejscu jest niepoprawny (Java go nie skompiluje), bo to jest "martwy kod".
// System.out.println("Koniec świata");
}
}
package pcz.p03_instrukcje.b_petle;
public class Przerwania {
static void tabliczka(int n) {
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
System.out.printf("%3d", i * j);
System.out.print(",");
}
System.out.println("#");
}
System.out.println("\n----------------\n");
}
static void tabliczkaBreak(int n) {
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
System.out.printf("%3d", i * j);
if(i + j > n)
break;
System.out.print(",");
}
System.out.println("#");
}
System.out.println("\n----------------\n");
}
static void tabliczkaBreakEtykieta(int n) {
pierwsza: for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
System.out.printf("%3d", i * j);
if(i + j > n)
break pierwsza;
System.out.print(",");
}
System.out.println("#");
}
System.out.println("\n----------------\n");
}
static void tabliczkaContinue(int n) {
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
System.out.printf("%3d", i * j);
if(i + j > n)
continue;
System.out.print(",");
}
System.out.println("#");
}
System.out.println("\n----------------\n");
}
static void tabliczkaContinueEtykieta(int n) {
pierwsza: for(int i = 1; i <= n; i++) {
System.out.println(); // dodane
for(int j = 1; j <= n; j++) {
System.out.printf("%3d", i * j);
if(i + j > n)
continue pierwsza;
System.out.print(",");
}
System.out.println("#");
}
System.out.println("\n----------------\n");
}
public static void main(String[] args) {
tabliczka(9);
tabliczkaBreak(9);
tabliczkaBreakEtykieta(9);
tabliczkaContinue(9);
tabliczkaContinueEtykieta(9);
}
}
package pcz.p03_instrukcje.c_switch;
import javax.swing.JOptionPane;
public class Switch1 {
public static void main(String[] args) {
String tekst = JOptionPane.showInputDialog("Podaj numer dnia tygodnia");
int numer = Integer.parseInt(tekst);
switch(numer) {
case 1:
System.out.println("poniedziałek");
case 2:
System.out.println("wtorek");
case 3:
System.out.println("środa");
case 4:
System.out.println("czwartek");
case 5:
System.out.println("piątek");
System.out.println("czyli weekendu początek");
case 6:
System.out.println("sobota");
case 7:
System.out.println("niedziela");
default:
System.out.println("niepoprawny numer dnia tygodnia");
}
System.out.println("Koniec programu");
}
}
package pcz.p03_instrukcje.c_switch;
import javax.swing.JOptionPane;
public class Switch2 {
public static void main(String[] args) {
String tekst = JOptionPane.showInputDialog("Podaj numer dnia tygodnia");
int numer = Integer.parseInt(tekst);
switch(numer) {
case 1:
System.out.println("poniedziałek");
break;
case 2:
System.out.println("wtorek");
break;
case 3:
System.out.println("środa");
break;
case 4:
System.out.println("czwartek");
break;
case 5:
System.out.println("piątek");
System.out.println("czyli weekendu początek");
break;
case 6:
System.out.println("sobota");
break;
case 7:
System.out.println("niedziela");
break;
default:
System.out.println("niepoprawny numer dnia tygodnia");
}
System.out.println("Koniec programu");
}
}
package pcz.p03_instrukcje.c_switch;
import java.util.Random;
import javax.swing.JOptionPane;
public class Switch3 {
public static void main(String[] args) {
String tekst = JOptionPane.showInputDialog("Podaj numer dnia tygodnia");
int numer = Integer.parseInt(tekst);
final int SOBOTA = 6; // stała
// final int SOBOTA = new Random().nextInt(10);
switch(numer) {
case 3:
System.out.println("środa");
break;
case 1:
System.out.println("poniedziałek");
break;
case 2:
System.out.println("wtorek");
break;
default:
System.out.println("niepoprawny numer dnia tygodnia");
break;
case 4:
System.out.println("czwartek");
break;
case 2 + 3:
System.out.println("piątek");
break;
case SOBOTA:
System.out.println("sobota");
// tu nie ma break i wypisze się sobota niedziela
case 7:
System.out.println("niedziela");
}
System.out.println("Koniec programu");
}
}
package pcz.p03_instrukcje.c_switch;
import javax.swing.JOptionPane;
public class Switch4 {
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 dnia tygodnia");
}
}
public static void main(String[] args) {
String tekst = JOptionPane.showInputDialog("Podaj numer dnia tygodnia");
try {
int numer = Integer.parseInt(tekst);
String nazwa = nazwaDniaTygodnia(numer);
System.out.println("Ten dzień to " + nazwa);
} catch(Exception wylapanyWyjatek) {
System.out.println("Wystąpił wyjątek " + wylapanyWyjatek);
}
System.out.println("Koniec programu");
}
}
package pcz.p03_instrukcje.c_switch;
public class Switch5 {
static int ileDniMaMiesiac(String nazwa) {
switch(nazwa) {
case "styczeń":
case "marzec":
case "maj":
case "lipiec":
case "sierpień":
case "październik":
case "grudzień":
return 31;
case "kwiecień":
case "czerwiec":
case "wrzesień":
case "listopad":
return 30;
case "luty":
return 28;
// case null się nie skompiluje
// case null:
// return 0;
default:
return 0;
}
}
public static void main(String[] args) {
System.out.println(ileDniMaMiesiac("styczeń"));
System.out.println(ileDniMaMiesiac("luty"));
System.out.println(ileDniMaMiesiac("listopad"));
System.out.println();
// takie bajery nie działają:
System.out.println(ileDniMaMiesiac("Lipiec"));
System.out.println(ileDniMaMiesiac(" lipiec "));
System.out.println(ileDniMaMiesiac("*ec"));
System.out.println(ileDniMaMiesiac("%ec"));
System.out.println(ileDniMaMiesiac(""));
System.out.println(ileDniMaMiesiac(null)); // NPE
}
}
package pcz.p03_instrukcje.c_switch;
public class Switch6 {
public static void main(String[] args) {
byte bb = 100;
// Wartości podawane w case muszą być zgodne z typem parametru switch-a.
// W przypadku liczb oznacza to także, że liczba musi mieścić się w zakresie,
switch(bb) {
case 100:
System.out.println("100");
break;
//NK case 200: System.out.println("200"); break;
}
short ss = 100;
switch(ss) {
case 100:
System.out.println("100");
break;
case 200:
System.out.println("200");
break;
case 4000:
System.out.println("4000");
break;
//NK case 33000: System.out.println("100"); break;
}
char cc = 'A';
switch(cc) {
case 'A':
System.out.println("AAA");
break;
case 120:
System.out.println("BBB");
break;
// case 10 : System.out.println("10"); break;
case 0xA:
System.out.println("0xA");
break;
//NK case 65 : System.out.println("CCC"); break;
//NK case -1 : System.out.println("DDD"); break;
case 64000:
System.out.println("EEE");
break;
//NK case 66000: System.out.println("FFF"); break;
}
/*
long l = 27L;
// nie ma switch na typach long, float, double
switch(l) {
case 27L : System.out.println("long 27");
}
*/
}
}
package pcz.p03_instrukcje.c_switch;
public class Switch8 {
public static void main(String[] args) {
int x = 2;
switch(x) {
// to jest po prostu operacja arytmetyczna (dokładnie "suma bitowa")
// nie ma to żadnego szczególnego znaczenia dla switch-a
// w tym konkretnym miejscu to wylicza się do wartości 3
case 2 | 3:
System.out.println("2 | 3");
break;
//NK case 3:
// System.out.println("3");
case 2: // bo to nie jest naruszenie unikalności
System.out.println("2");
break;
default:
System.out.println("default");
}
}
}
package pcz.p03_instrukcje.c_switch;
import javax.swing.JOptionPane;
public class SwitchNull_Pusty {
public static void main(String[] args) {
String s = JOptionPane.showInputDialog("Wpisz napis");
System.out.println("Jestem przed switchem, napis = " + s);
switch(s) {}
System.out.println("Jestem za switchem");
// morał: przekazanie wartości null do switcha (na napisach lub na enumach)
// skutkuje wyjątkiem NPE
}
}
package pcz.p03_instrukcje.c_switch;
import javax.swing.JOptionPane;
public class SwitchString_Interaktywnie {
public static void main(String[] args) {
String s = JOptionPane.showInputDialog("Wpisz napis");
System.out.println("Jestem przed switchem, napis = " + s);
// Wielkość liter, spacje itp.: mają znaczenie.
// Nie są przeprowadzane żadne "normalizacje".
// Nie działają żadne "wildcardy" typu * % itp.
// Jeśli do switch przekażemy wartość null dojdzie d wyjątku NullPointerException
switch(s) {
case "Ala":
System.out.println("Ala ma kota");
break;
case "Ola":
System.out.println("Ola ma psa");
break;
//NK case null: System.out.println("NULL");
default:
System.out.println("Nieznana osoba");
}
}
}
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