Commit 59d0713a by Patryk Czarnik

Dodatkowe przykłady "funkcji i importowania"

parent b7c1d99f
package p07_funkcje;
public class A_PierwszeFunkcje {
// Wewnątrz klasy można definiować wiele "metod" / "funkcji".
static void aaa() {
System.out.println("aaa, kotki dwa");
System.out.println(" szare bure obydwa");
}
static void xxx() {
System.out.println("XXX , ale to się nie wypisze, bo nikt nie wywołał");
}
public static void main(String[] args) {
System.out.println("Początek programu");
aaa();
aaa();
System.out.println("Teraz wywołam bbb(3)");
bbb(3);
System.out.println("Koniec programu");
}
static void bbb(int ileRazy) {
System.out.println("\nPoczątek bbb");
for(int i = 0; i < ileRazy; i++) {
aaa();
}
System.out.println("Koniec bbb\n");
}
}
package p07_funkcje;
public class B_ParametryIWynik {
// Funkcja może zwracać wynik:
// - przed nazwą funkcji musi być podany typ wyniku
// - w treści musi być return (może być więcej niż jeden), poprzez który funkcja ustala wartość wyniku
static String hello() {
return "Hello world";
}
// Funkcja może mieć zadeklarowane parametry, czyli takie zmienne,
// których wartość przekazuje się podczas wywołania
static void powitaj(String imie, String miasto) {
System.out.println("Witaj " + imie + " z miasta " + miasto);
}
static long kwadrat(int x) {
return (long)x*x;
}
public static void main(String[] args) {
System.out.println("1:");
hello();
// zauważmy, że napis Hello world nie pojawił się jeszce na ekranie.
// Samo wywołanie funkcji, która robi return, nie pokazuje nigdzie zwróconej wartości.
System.out.println("2:");
String s = hello();
System.out.println("3:");
System.out.println("Wynikiem wywołanie jest " + s);
System.out.println("4:");
// można wywołanie funkcji wstawić do printa:
System.out.println(hello());
System.out.println("5: " + hello().toUpperCase());
System.out.println();
powitaj("Ala", "Łódź");
powitaj("Patryk", "Żyrardów");
powitaj("Patryk", "Prudnik");
System.out.println();
long wynik = kwadrat(2);
System.out.println(wynik);
// można też od razu printować:
System.out.println(kwadrat(30));
System.out.println(kwadrat(1000000));
}
}
package p07_funkcje;
import java.time.LocalTime;
public class EkstremalnieProsteFunkcje {
// Funkcja ma wypisać podany tekst tyle razy, ile mówi drugi parametr
static void powtorz(String napis, int ileRazy) {
for(int i = 0; i < ileRazy; i++) {
System.out.println(napis);
}
}
// pole prostokąta
static double poleProstokata(double a, double b) {
return a*b;
}
// zwraca najmniejszy z trzech podanych argumentów
static double min(double x, double y, double z) {
if(x < y && x < z) {
return x;
}
if(y < z) {
return y;
}
return z;
}
// wyrażenie warunkowe: WARUNEK ? WYNIK1 : WYNIK2
static double min2(double x, double y, double z) {
return x < y && x < z ? x : y < z ? y : z;
}
// zwraca ostatnią cyfrę aktualnej sekundy odczytanej z zegara
static int aktualnaSekunda() {
return LocalTime.now().getSecond() % 10;
}
public static void main(String[] args) {
powtorz("Ala ma kota", 5);
powtorz("Ola ma psa", 3);
System.out.println();
double pole = poleProstokata(3, 4);
System.out.println("Pole 3×4 = " + pole);
System.out.println();
System.out.println(min(1,2,3));
System.out.println(min(3,1,3));
System.out.println(min(1,1,1));
System.out.println(min(1,3,2));
System.out.println(min2(1,2,3));
System.out.println(min2(3,1,3));
System.out.println(min2(1,1,1));
System.out.println(min2(1,3,2));
System.out.println();
System.out.println("aktualna sekunda: " + aktualnaSekunda());
}
}
package p07_funkcje;
import java.util.Scanner;
public class Fibonacci {
// Ciąg Fibonacciego: na pozycji 0 jest wynik 0, na pozycji 1 jest wynik 1,
// a każda kolejna liczba Fibonacciego jest sumą dwóch poprzednich
// 0 1 1 2 3 5 8 13 21 34 55
// F(9) = 34
static long fibr(int n) {
if(n <= 1)
return n;
return fibr(n-1) + fibr(n-2);
}
static long fib(int n) {
long ostatnia = 0;
long przedostatnia = 1;
for(int i = 1; i <= n; i++) {
long nowa = ostatnia + przedostatnia;
przedostatnia = ostatnia;
ostatnia = nowa;
}
return ostatnia;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("Podaj liczbę: ");
int n = scanner.nextInt();
if(n < 0) break;
// System.currentTimeMillis()
long p = System.nanoTime();
var wynik = fib(n);
long k = System.nanoTime();
System.out.printf("F(%d) = %d, czas %.3fs%n", n, wynik, (k-p) * 1e-9);
}
}
}
package p07_funkcje;
public class FunkcjeNaTablicach {
static int suma(int[] t) {
int suma = 0;
for(int i = 0; i < t.length; i++) {
suma += t[i];
}
return suma;
}
static int suma_v2(int[] t) {
int suma = 0;
for(int x : t) {
suma += x;
}
return suma;
}
// dodaj i przetestuj funkcje:
// - suma_parzystych
static int suma_parzystych(int[] t) {
int suma = 0;
for(int x : t) {
if(x % 2 == 0) {
suma += x;
}
}
return suma;
}
// - ile_parzystych
static int ile_parzystych(int[] t) {
int ile = 0;
for(int x : t) {
if(x % 2 == 0) {
ile += 1;
}
}
return ile;
}
// - srednia_parzystych
// dwie strategie:
// 1) napiszę od nowa funkcję, w której przeglądam tablicę i wszystko liczę
// zalety: większa wydajność (dane przeglądamy tylko raz), niezależność od innych definicji
static double srednia_parzystych_v1(int[] t) {
double suma = 0;
int ile = 0;
for(int x : t) {
if(x % 2 == 0) {
suma += x;
ile++;
}
}
return suma / ile;
}
// 2) korzystamy z już zdefiniowanych funckji
// zalety: unikanie duplikacji kodu, lepsza struktura projektu, podział odpowiedzialności między metody itd - "dobre praktyki"
// DRY
static double srednia_parzystych_v2(int[] t) {
return (double)suma_parzystych(t) / ile_parzystych(t);
}
public static void main(String[] args) {
// Tutaj zapiszemy przykładowe wywołania i wyświetlimy ich wyniki
int[] a = {5, 10, 15, 0};
int[] b = {3, 5, 7, 9, 11, 13};
int[] c = {3, 2, 1, 2, 4, 11, 13};
System.out.println("suma a = " + suma(a));
System.out.println("suma_v2 a = " + suma_v2(a));
System.out.println("suma_p a = " + suma_parzystych(a));
System.out.println("suma_p b = " + suma_parzystych(b));
System.out.println(" ile_p a = " + ile_parzystych(a));
System.out.println(" ile_p b = " + ile_parzystych(b));
System.out.println("średnia_v1 a = " + srednia_parzystych_v1(a));
System.out.println("średnia_v1 b = " + srednia_parzystych_v1(b));
System.out.println("średnia_v1 c = " + srednia_parzystych_v1(c));
System.out.println("średnia_v2 a = " + srednia_parzystych_v2(a));
System.out.println("średnia_v2 b = " + srednia_parzystych_v2(b));
System.out.println("średnia_v2 c = " + srednia_parzystych_v2(c));
}
}
package p07_funkcje;
import java.util.Arrays;
import java.util.Scanner;
public class FunkcjeTekstowe {
static int ileA(String tekst) {
int ile = 0;
for(int i = 0; i < tekst.length(); i++) {
if(tekst.charAt(i) == 'a') {
ile++;
}
}
return ile;
}
// funkcja oblicza, ile łącznie samogłosek (liter a e i o u y ą ę ó) zawiera tekst
static int ileSamoglosek(String tekst) {
tekst = tekst.toLowerCase();
int ile = 0;
for(int i = 0; i < tekst.length(); i++) {
if(tekst.charAt(i) == 'a' || tekst.charAt(i) == 'e' || tekst.charAt(i) == 'i'
|| tekst.charAt(i) == 'o' || tekst.charAt(i) == 'u' || tekst.charAt(i) == 'y'
|| tekst.charAt(i) == 'ą' || tekst.charAt(i) == 'ę' || tekst.charAt(i) == 'ó') {
ile++;
}
}
return ile;
}
static int ileSamoglosek_v2(String tekst) {
int ile = 0;
for(char c : tekst.toLowerCase().toCharArray()) {
switch(c) {
case 'a', 'e', 'i', 'o', 'u', 'y', 'ą', 'ę', 'ó' -> ile++;
}
}
return ile;
}
// dodatkowa wersja w oparciu o Stream.
// w sprawdzaniu czy litera jest samogłoską używam binarySearch - to wymaga, aby tablica samogłosek była posortowana rosną wg kodów znaków
static long ileSamoglosek_v3(String tekst) {
final int[] samogloski = {'a', 'e', 'i', 'o', 'u', 'y', 'ó', 'ą', 'ę'};
return tekst.toLowerCase().chars()
.filter(c -> Arrays.binarySearch(samogloski, c) >= 0)
.count();
}
// funkcja sprawdza, czy napis jest palindromem (np "kajak") i zwraca true lub false
static boolean palindrom(String tekst) {
for(int i = 0; i < tekst.length() / 2; i++) {
if(tekst.charAt(i) != tekst.charAt(tekst.length() - i - 1)) {
return false;
}
}
// jeśli wcześniej nie było powodu, aby zwrócić false, to zwracamy true
return true;
}
// rozwiązanie z dwoma licznikami
static boolean palindrom_v2(String tekst) {
for(int i = 0, j = tekst.length()-1; i < j; i++, j--) {
if(tekst.charAt(i) != tekst.charAt(j)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
// W tym przykładzie użytkownik będzie podawał swoje przykładowe teksty,
// a program będzie uruchamiał przygotowane funkcje na tym tekście.
Scanner scanner = new Scanner(System.in);
System.out.println("Podawaj swoje teksty. Aby zakończyć, naciśnij enter");
while(true) {
System.out.print("\nWpisz tekst: ");
String tekst = scanner.nextLine();
if(tekst.isEmpty()) break;
int ileA = ileA(tekst);
int ileS = ileSamoglosek(tekst);
int ileS2 = ileSamoglosek_v2(tekst);
long ileS3 = ileSamoglosek_v3(tekst);
System.out.println("Liczba liter a: " + ileA);
System.out.println("Liczba samogłosek v1: " + ileS);
System.out.println("Liczba samogłosek v2: " + ileS2);
System.out.println("Liczba samogłosek v3: " + ileS3);
if(palindrom(tekst)) {
System.out.println("Napis jest palindromem");
} else {
System.out.println("Napis nie jest palindromem");
}
if(palindrom_v2(tekst)) {
System.out.println("Napis jest palindromem");
} else {
System.out.println("Napis nie jest palindromem");
}
}
System.out.println("Koniec programu");
}
}
package p07_funkcje;
// Ta klasa zawiera wyłącznie metody statyczne.
// Na takie klasy mówi się często "klasa narzędziowa" / "utility class".
// Odpowiada to modułowi zawierającemu funkcje z innych języków (C, Python, PHP itp).
// Po prostu w Javie funkcje definiuje się zawsze wewnątrz klasy.
public class Geometria {
// blok statyczny zostanie wykonany, gdy maszyna wirtualna załaduje klasę do pamięci
static {
System.out.println("Klasa Geometria się załadowała");
}
public static double poleKwadratu(double a) {
return a*a;
}
public static double obwodKwadratu(double a) {
return 4*a;
}
public static double poleProstokata(double a, double b) {
return a*b;
}
public static double obwodProstokata(double a, double b) {
return 2*a + 2*b;
}
public static double poleKola(double r) {
return Math.PI * r*r;
}
public static double obwodKola(double r) {
return Math.PI * 2*r;
}
public static boolean warunekTrojkata(double a, double b, double c) {
return a < b + c && b < a + c && c < a + b;
}
public static double poleTrojkata(double a, double b, double c) {
double p = obwodTrojkata(a, b, c) / 2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
public static double obwodTrojkata(double a, double b, double c) {
return a + b + c;
}
}
package p07_funkcje;
import java.util.Scanner;
public class GeometriaProgram {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj dwie długości boków prostokąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double pole = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "T" -> {
System.out.print("Podaj trzy długości boków trójkąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
if(Geometria.warunekTrojkata(a, b, c)) {
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f %.3f %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, pole, obwod);
} else {
System.out.println("Z tych liczb nie da się złożyć trójkąta");
}
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = JednostkiMiary.km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = JednostkiMiary.mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = JednostkiMiary.f_na_c(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = JednostkiMiary.c_na_f(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
} default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("Dzięki, miłego dnia!");
}
}
\ No newline at end of file
package p07_funkcje;
public class GeometriaTesty {
// W tej klasie, w main, są testowe wywołania metod zdefiniowanych w klasie Geometria.
// Jeśli klasa znajduje się w tym samym pakiecie, to nie trzeba jej importować; po prostu używamy.
// Metodę statyczną wywołuje się pisząc Klasa.metoda
public static void main(String[] args) {
System.out.println(Geometria.poleKwadratu(5));
System.out.println(Geometria.obwodKwadratu(5));
System.out.println(Geometria.poleProstokata(3, 4));
System.out.println(Geometria.obwodProstokata(3, 4));
}
}
package p07_funkcje;
public class JednostkiMiary {
private static final double PRZELICZNIK_KM_MILE = 1.609344;
// https://pl.wikipedia.org/wiki/Mila_mi%C4%99dzynarodowa
public static double mile_na_km(double mile) {
return mile * PRZELICZNIK_KM_MILE;
}
public static double km_na_mile(double km) {
return km / PRZELICZNIK_KM_MILE;
}
// Stopnie Celsjusza na Fahrenheita i odwrotnie
// https://pl.wikipedia.org/wiki/Skala_Fahrenheita
public static double c_na_f(double c) {
// To jest źle, bo dzielenie 9/5 daje wynik 1
// return 32 + 9/5 * c;
// Poprawne zapisy:
// return c * 9 / 5 + 32;
// return 32.0 + 9.0 / 5.0 * c;
// return 32 + 9. / 5. * c;
return 32 + 1.8 * c;
}
public static double f_na_c(double f) {
// Niepoprawne, bo 5/9 daje wynik 0
// return 5/9 * (f - 32);
// Poprawne zapisy:
// return 5./9. * (f - 32.);
return (f - 32) / 1.8;
}
public static void main(String[] args) {
// Tutaj w main wpiszemy tylko przykładowe wywołania funkcji,
// aby sprawdzić, czy one dobrze działają.
// To nie jest "praktyczny program" dla użytkownika.
System.out.println("100 mil = " + mile_na_km(100) + " km");
System.out.println("300 mil = " + mile_na_km(300) + " km");
System.out.println("100 km = " + km_na_mile(100) + " mil");
System.out.println("160 km = " + km_na_mile(160) + " mil");
System.out.printf("%.1f km = %.1f mil\n", 160.0, km_na_mile(160));
System.out.println();
System.out.println(" 0 C = " + c_na_f(0) + " F");
System.out.println(" 37 C = " + c_na_f(37) + " F");
System.out.println("100 C = " + c_na_f(100) + " F");
System.out.println();
System.out.println(" 0 F = " + f_na_c(0) + " C");
System.out.println(" 50 F = " + f_na_c(50) + " C");
System.out.println("100 F = " + f_na_c(100) + " C");
}
}
package p07_funkcje;
import java.util.Optional;
public class NajdluzszyNapis {
// Funkcja zwraca najdłuższy z napisów przekazanych w tablicy.
// Wersja "elegancka". Nie jest ona odporna na wszystkie przypadki:
// - dla pustej tablicy wynikiem jest pusty napis (chociaż taki nie występuje w tej tablicy)
// - jeśli tablica zawiera wartość null zamiast napisu, to wyjątek
// - podobnie gdy zamiast samej tablicy jest null, to też wyjątek
static String najdluzszy(String[] napisy) {
String wynik = "";
for (String napis : napisy) {
if(napis.length() > wynik.length()) {
wynik = napis;
}
}
return wynik;
}
// wersja odporna na puste tablice i nulle
// w przypadku braku danych zwraca wynik null
// w tej funcji w dwóch miejscach korzystamy z faktu, że spójniki logiczne w Javie są "leniwe"
// i prawa strona || i && jest sprawdzana tylko wtedy, gdy trzeba
static String najdluzszy2(String[] napisy) {
if(napisy == null || napisy.length == 0) {
return null;
}
String wynik = "";
for(String s : napisy) {
if(s != null && s.length() > wynik.length()) {
wynik = s;
}
}
return wynik;
}
// Od Javy 8 dostępne są klasy Optional, OptionalInt / Long / Double
// Używa się ich, aby nie trzeba było zwracać wartości null, gdy funkcja czasami daje wynik, a czasami nie
static Optional<String> najdluzszy3(String[] napisy) {
if(napisy == null || napisy.length == 0) {
return Optional.empty();
}
String wynik = "";
for(String s : napisy) {
if(s != null && s.length() > wynik.length()) {
wynik = s;
}
}
return Optional.of(wynik);
}
public static void main(String[] args) {
String[] napisy = {
"abc",
"Cyrk na kółkach",
"Ala ma kota i psa i nie wiem co jeszcze",
null,
"abc abc abc",
};
String[] pusta = {};
System.out.println("Najsłuższy napis:");
System.out.println(najdluzszy2(napisy));
System.out.println("wynik dla pustej: " + najdluzszy2(pusta));
System.out.println();
System.out.println("Wersja z Optional:");
System.out.println(najdluzszy3(napisy));
System.out.println("wynik dla pustej: " + najdluzszy3(pusta));
Optional<String> opt = najdluzszy3(napisy);
// to nie jest jedyny sposób używania Optionali:
if(opt.isPresent()) {
System.out.println("Mam wynik: " + opt.get());
} else {
System.out.println("Brak wyniku");
}
}
}
package p07_funkcje;
import java.math.BigInteger;
import java.util.Scanner;
import java.util.stream.LongStream;
public class Silnia {
// silnia to jest iloczyn kolejnych liczb naturalnych od 1 do n włącznie
// np. 5! = silnia(5) = 1*2*3*4*5 = 120
// silnia(0) = 1, silnia(1) = 1...
static int silnia(int n) {
int iloczyn = 1;
for(int i = 1; i <= n; i++) {
iloczyn = iloczyn * i;
}
return iloczyn;
}
// wersja dająca wynik typu long - działa do silnia(20)
static long silniaLong(int n) {
long iloczyn = 1;
for(int i = 2; i <= n; i++) {
iloczyn *= i;
}
return iloczyn;
}
static BigInteger silniaBig(int n) {
BigInteger iloczyn = BigInteger.ONE;
for(int i = 1; i <= n; i++) {
iloczyn = iloczyn.multiply(BigInteger.valueOf(i));
}
return iloczyn;
}
// wersja z rekurencją - czyli funkcja wywołuje samą siebie
static long silniaRek(int n) {
if(n <= 1) return 1;
return n * silniaRek(n-1);
}
// wersje w stylu "funkcyjnym" wykorzystujące strumienie
// tworzymy ciąg liczb od 1 do n włącznie i je wszystkie "przez siebie mnożymy"
static long silniaFun(int n) {
return LongStream.rangeClosed(1, n).reduce(1, (x,y) -> x*y);
}
static BigInteger silniaBigFun(int n) {
return LongStream.rangeClosed(1, n)
.mapToObj(BigInteger::valueOf)
.reduce(BigInteger.ONE, BigInteger::multiply);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Podawaj liczby, zakończ wpisując -1");
while(true) {
System.out.print("liczba: ");
int n = scanner.nextInt();
if(n < 0) break;
System.out.println("wersja int : " + n + "! = " + silnia(n));
System.out.println("wersja long: " + n + "! = " + silniaLong(n));
System.out.println("wersja rek : " + n + "! = " + silniaRek(n));
System.out.println("wersja fun : " + n + "! = " + silniaFun(n));
System.out.println("wersja big: " + silniaBig(n));
System.out.println("wersja bigfun: " + silniaBig(n));
System.out.println();
}
}
}
package p07_funkcje;
public class SilniaRekDoDebugowania {
static long silniaRek(int n) {
if(n <= 1) return 1;
return n * silniaRek(n-1);
}
// silniaRek(4)
// return 4 * silniaRek(3)
// return 3 * silniaRek(2)
// → return 2 * silniaRek(1)
// → return 1
// 2 * 1
// return 2
// return 3 * 2
// return 6
// return 4 * 6
// return 24
public static void main(String[] args) {
silniaRek(4);
}
}
package p08_importowanie;
/* W tej wersji programu nie ma żadnych importów, a wszystkie odwołania do klas Geometria, JednostkiMiary
* oraz standardowej klasy Scanner są poprzedzone nazwą pakietu.
* Pełna nazwa łącznie z pakietem to jest "nazwa kwalifikowana" / "qualified name".
*
* W języku Java ZAWSZE da się napisać program bez użycia import.
*/
public class Program1 {
public static void main(String[] args) {
@SuppressWarnings("resource")
java.util.Scanner scanner = new java.util.Scanner(System.in);
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = p07_funkcje.Geometria.poleKwadratu(a);
double obwod = p07_funkcje.Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj dwie długości boków prostokąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double pole = p07_funkcje.Geometria.poleProstokata(a, b);
double obwod = p07_funkcje.Geometria.obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = p07_funkcje.Geometria.poleKola(r);
double obwod = p07_funkcje.Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "T" -> {
System.out.print("Podaj trzy długości boków trójkąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
if(p07_funkcje.Geometria.warunekTrojkata(a, b, c)) {
double pole = p07_funkcje.Geometria.poleTrojkata(a, b, c);
double obwod = p07_funkcje.Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f %.3f %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, pole, obwod);
} else {
System.out.println("Z tych liczb nie da się złożyć trójkąta");
}
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = p07_funkcje.JednostkiMiary.km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = p07_funkcje.JednostkiMiary.mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = p07_funkcje.JednostkiMiary.f_na_c(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = p07_funkcje.JednostkiMiary.c_na_f(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("Dzięki, miłego dnia!");
}
}
\ No newline at end of file
package p08_importowanie;
import java.util.Scanner;
import p07_funkcje.Geometria;
import p07_funkcje.JednostkiMiary;
/* W tej wersji stosujemy najbardziej standardowy sposób importowania, najczęściej używany:
każda klasa, do której odwołuje się nasz program, jest zaimportowana osobnym poleceniem.
import w Javie NIE służy załadowaniu klas do pamięci, nie wykonuje się w czasie działania programu (tak się dzieje w Python i PHP)
To jest tylko wskazanie z jakiego pakietu pochodzi klasa.
import nie wpływa na wydajność!
*/
public class Program2 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj dwie długości boków prostokąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double pole = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "T" -> {
System.out.print("Podaj trzy długości boków trójkąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
if(Geometria.warunekTrojkata(a, b, c)) {
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f %.3f %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, pole, obwod);
} else {
System.out.println("Z tych liczb nie da się złożyć trójkąta");
}
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = JednostkiMiary.km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = JednostkiMiary.mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = JednostkiMiary.f_na_c(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = JednostkiMiary.c_na_f(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("Dzięki, miłego dnia!");
}
}
\ No newline at end of file
package p08_importowanie;
import java.util.*;
import p07_funkcje.*;
/* Gdy na końcu polecenia import za nazwą pakietu umieścimy *,
* to importowane są wszystkie klasy z tego pakietu.
* To nie importuje podpakietów (podklatalogów).
* importy z * mają niższy priorytet niż importy bezpośrednie.
*
* Gdy w programie pojawia się jakaś nazwa, to kompilator szuka klasy w takiej kolejności:
* 1. rzeczy zaimportowane bezpośrednio (tak jak w Program2)
* 2. bieżący pakiet
* 3. klasy zaimportowane za pomocą * (w tym java.lang)
* (bo w pewnym sensie kompilator Javy na początku robi niejawnie import java.lang.*;
*
* Czy importowanie wszystkich klas z dużego pakietu sprawia problemy?
* To nie jest problem z punktu widzenia wydajności, bo import nie ładuje tych klas do pamięci.
* Natomiast zwiększa to ryzyko kolizji nazw.
* Znany przykład: java.awt.List (lista wyboru w starej technologii okienkowej) i java.util.List (kolekcja).
* Sam import nie jest problemem, problem dopiero, gdy użyjemy tej klasy (błąd kompilacji).
*/
public class Program3 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj dwie długości boków prostokąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double pole = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "T" -> {
System.out.print("Podaj trzy długości boków trójkąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
if(Geometria.warunekTrojkata(a, b, c)) {
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f %.3f %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, pole, obwod);
} else {
System.out.println("Z tych liczb nie da się złożyć trójkąta");
}
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = JednostkiMiary.km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = JednostkiMiary.mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = JednostkiMiary.f_na_c(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = JednostkiMiary.c_na_f(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("Dzięki, miłego dnia!");
}
}
\ No newline at end of file
package p08_importowanie;
import static p07_funkcje.Geometria.obwodKola;
import static p07_funkcje.Geometria.obwodKwadratu;
import static p07_funkcje.Geometria.obwodProstokata;
import static p07_funkcje.Geometria.obwodTrojkata;
import static p07_funkcje.Geometria.poleKola;
import static p07_funkcje.Geometria.poleKwadratu;
import static p07_funkcje.Geometria.poleProstokata;
import static p07_funkcje.Geometria.poleTrojkata;
import static p07_funkcje.Geometria.warunekTrojkata;
import static p07_funkcje.JednostkiMiary.c_na_f;
import static p07_funkcje.JednostkiMiary.f_na_c;
import static p07_funkcje.JednostkiMiary.km_na_mile;
import static p07_funkcje.JednostkiMiary.mile_na_km;
import java.util.Scanner;
/* Gdy w programie korzystamy tylko z elementów statycznych klasy X (z metod statycznych, zmiennych statycznych, stałych),
* to zamiast importować tę klasę i wywoływać te elementy pisząc X.metoda
* można zaimportować statycznie tę metodę (albo zmienną, stałą ...).
*
* Wtedy w treści programy używamy zaimportowanych rzeczy tak, jakby były zdefiniowane w naszej klasie.
* (albo tak jakby były funkcjami, tak jak w Pythonie, C++, PHP itp...)
*
* Nie ma jak użyć import static w stosunku do klasy Scanner, bo jej używamy w sposób "obiektowy":
* tworzony jest obiekt klasy Scanner i na nim wywoływana jest metoda (nie jest statyczna).
*/
public class Program4 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = poleKwadratu(a);
double obwod = obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj dwie długości boków prostokąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double pole = poleProstokata(a, b);
double obwod = obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = poleKola(r);
double obwod = obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "T" -> {
System.out.print("Podaj trzy długości boków trójkąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
if(warunekTrojkata(a, b, c)) {
double pole = poleTrojkata(a, b, c);
double obwod = obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f %.3f %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, pole, obwod);
} else {
System.out.println("Z tych liczb nie da się złożyć trójkąta");
}
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = f_na_c(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = c_na_f(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("Dzięki, miłego dnia!");
}
}
\ No newline at end of file
package p08_importowanie;
import static p07_funkcje.Geometria.*;
import static p07_funkcje.JednostkiMiary.*;
import static java.lang.Math.*;
import java.util.Scanner;
/* import static pakiet.Klasa.* importuje wszystkie rzeczy statyczne z podanej klasy.
*
* Nie da się użyć gwiazdek na poziomie pakietu i klasy w jednym imporcie.
* To nie przejdzie:
* import static p09_funkcje.*.*;
*/
public class Program5 {
public static void main(String[] args) {
// Tylko, żeby pokazać dizałanie Math.*
System.out.println("pi: " + PI);
System.out.println("pierwiastek z 2 " + sqrt(2));
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostokąt");
System.out.println(" T - trójkąt");
System.out.println(" KM - przelicz kilometry na mile");
System.out.println(" MK - przelicz mile na kilometry");
System.out.println(" CF - przelicz °C na °F");
System.out.println(" FC - przelicz °F na °C");
System.out.println(" Q - zakończ");
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = poleKwadratu(a);
double obwod = obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "P" -> {
System.out.print("Podaj dwie długości boków prostokąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double pole = poleProstokata(a, b);
double obwod = obwodProstokata(a, b);
System.out.printf("Dla prostokąta o bokach %.3f i %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = poleKola(r);
double obwod = obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
case "T" -> {
System.out.print("Podaj trzy długości boków trójkąta: ");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = scanner.nextDouble();
if(warunekTrojkata(a, b, c)) {
double pole = poleTrojkata(a, b, c);
double obwod = obwodTrojkata(a, b, c);
System.out.printf("Dla prostokąta o bokach %.3f %.3f %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, pole, obwod);
} else {
System.out.println("Z tych liczb nie da się złożyć trójkąta");
}
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = km_na_mile(km);
System.out.printf("%.3f km = %.3f mil\n", km, wynik);
}
case "MK" -> {
System.out.print("Podaj odległość w milach: ");
double mile = scanner.nextDouble();
double wynik = mile_na_km(mile);
System.out.printf("%.3f mil = %.3f km\n", mile, wynik);
}
case "FC" -> {
System.out.print("Podaj temperaturę w Fahrenheitach: ");
double f = scanner.nextDouble();
double wynik = f_na_c(f);
System.out.printf("%.3f °F = %.3f °C\n", f, wynik);
}
case "CF" -> {
System.out.print("Podaj temperaturę w Celsjuszach: ");
double c = scanner.nextDouble();
double wynik = c_na_f(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("Dzięki, miłego dnia!");
}
}
\ No newline at end of file
package p09_widocznosc;
public class InnaKlasa {
public void metoda2(Klasa inny) {
//NK System.out.println(inny.prywatne);
System.out.println(inny.domyslne);
System.out.println(inny.chronione);
System.out.println(inny.publiczne);
}
public static void main(String[] args) {
Klasa obiekt = new Klasa();
//NK System.out.println(obiekt.prywatne);
System.out.println(obiekt.domyslne);
System.out.println(obiekt.chronione);
System.out.println(obiekt.publiczne);
}
}
package p09_widocznosc;
public class Klasa {
private int prywatne = 1;
int domyslne = 2;
protected int chronione = 3;
public int publiczne = 4;
public void metoda() {
System.out.println(this.prywatne);
System.out.println(prywatne);
System.out.println(domyslne);
System.out.println(chronione);
System.out.println(publiczne);
}
public void metoda2(Klasa inny) {
System.out.println(inny.prywatne);
System.out.println(inny.domyslne);
System.out.println(inny.chronione);
System.out.println(inny.publiczne);
inny.prywatne = 101;
}
public static void main(String[] args) {
// Tutaj nie ma dostępu, bo jesteśmy w kontekście statycznym - poziomy widoczności nie mają nic do rzeczy.
//NK System.out.println(prywatne);
//NK System.out.println(publiczne);
Klasa obiekt = new Klasa();
System.out.println(obiekt.prywatne);
System.out.println(obiekt.domyslne);
System.out.println(obiekt.chronione);
System.out.println(obiekt.publiczne);
obiekt.metoda();
Klasa innyObiekt = new Klasa();
innyObiekt.prywatne = 19;
obiekt.metoda2(innyObiekt);
System.out.println(innyObiekt.prywatne);
}
}
package p09_widocznosc;
public class KlasaZaawansowana {
private int prywatne = 1;
int domyslne = 2;
protected int chronione = 3;
public int publiczne = 4;
public void metoda() {
System.out.println(this.prywatne);
System.out.println(prywatne);
System.out.println(domyslne);
System.out.println(chronione);
System.out.println(publiczne);
//OK Nested1 zagn = this.new Nested1();
Nested1 zagn = new Nested1();
}
public void metoda2(KlasaZaawansowana inny) {
System.out.println(inny.prywatne);
System.out.println(inny.domyslne);
System.out.println(inny.chronione);
System.out.println(inny.publiczne);
inny.prywatne = 101;
}
public static void main(String[] args) {
//NK System.out.println(prywatne);
//NK System.out.println(publiczne);
KlasaZaawansowana obiekt = new KlasaZaawansowana();
System.out.println(obiekt.prywatne);
System.out.println(obiekt.domyslne);
System.out.println(obiekt.chronione);
System.out.println(obiekt.publiczne);
obiekt.metoda();
KlasaZaawansowana innyObiekt = new KlasaZaawansowana();
innyObiekt.prywatne = 19;
obiekt.metoda2(innyObiekt);
System.out.println(innyObiekt.prywatne);
Nested1 zagniezdzony = obiekt.new Nested1();
zagniezdzony.metodaX();
Nested1 zagniezdzony1 = new KlasaZaawansowana().new Nested1();
zagniezdzony1.metodaX();
Nested2 zagniezdzony2 = new Nested2();
zagniezdzony2.metodaX();
}
class Nested1 {
// klasa zagnieżdżona instancyjna
public void metodaX() {
System.out.println(prywatne);
System.out.println(domyslne);
System.out.println(chronione);
System.out.println(publiczne);
}
}
static class Nested2 {
// klasa zagnieżdżona statyczna
public void metodaX() {
// bo nie jestesmy w zadnym obiekcie = jestesmy w kontekscie statycznym
// NK System.out.println(prywatne);
// NK System.out.println(domyslne);
// NK System.out.println(chronione);
// NK System.out.println(publiczne);
}
public void metodaY(KlasaZaawansowana inny) {
System.out.println(inny.prywatne);
System.out.println(inny.domyslne);
System.out.println(inny.chronione);
System.out.println(inny.publiczne);
}
}
}
package p09_widocznosc.inny_pakiet;
import p09_widocznosc.Klasa;
public class KlasaWInnymPakiecie {
public void metoda2(Klasa inny) {
//NK System.out.println(inny.prywatne);
//NK System.out.println(inny.domyslne);
//NK System.out.println(inny.chronione);
System.out.println(inny.publiczne);
}
public static void main(String[] args) {
Klasa obiekt = new Klasa();
//NK System.out.println(obiekt.prywatne);
//NK System.out.println(obiekt.domyslne);
//NK System.out.println(obiekt.chronione);
System.out.println(obiekt.publiczne);
}
}
package p09_widocznosc.inny_pakiet;
import p09_widocznosc.Klasa;
public class Podklasa extends Klasa {
public void metoda() {
//NK System.out.println(prywatne);
//NK System.out.println(this.prywatne);
//NK System.out.println(domyslne);
System.out.println(chronione);
System.out.println(this.chronione);
System.out.println(publiczne);
//NK ((Klasa)this).chronione = 44;
((Klasa)this).publiczne = 45;
}
public void metoda2(Klasa inny) {
//NK System.out.println(inny.prywatne);
//NK System.out.println(inny.domyslne);
//NK System.out.println(inny.chronione);
System.out.println(inny.publiczne);
// Gdyby Osoba miała pole protected pesel, to:
// Osoba ma dostęp do peselu innej osoby
// Student ma dostęp do peselu innego studenta
// Student nie ma dostępu do peselu osoby
}
public void metoda3(Podklasa inny) {
//NK System.out.println(inny.prywatne);
//NK System.out.println(inny.domyslne);
System.out.println(inny.chronione);
System.out.println(inny.publiczne);
}
public static void main(String[] args) {
Klasa obiekt = new Klasa();
//NK System.out.println(obiekt.prywatne);
//NK System.out.println(obiekt.domyslne);
//NK System.out.println(obiekt.chronione);
System.out.println(obiekt.publiczne);
Podklasa obiekt2 = new Podklasa();
//NK System.out.println(obiekt2.prywatne);
//NK System.out.println(obiekt2.domyslne);
System.out.println(obiekt2.chronione);
System.out.println(obiekt2.publiczne);
Klasa obiekt3 = new Podklasa();
//NK System.out.println(obiekt3.prywatne);
//NK System.out.println(obiekt3.domyslne);
//NK System.out.println(obiekt3.chronione);
System.out.println(obiekt3.publiczne);
}
}
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