Commit 32fac383 by Patryk Czarnik

różne wersje importowania

parent 3acce285
......@@ -5,6 +5,11 @@ package p09_funkcje;
// 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;
}
......
package p10_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 = p09_funkcje.Geometria.poleKwadratu(a);
double obwod = p09_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 = p09_funkcje.Geometria.poleProstokata(a, b);
double obwod = p09_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 = p09_funkcje.Geometria.poleKola(r);
double obwod = p09_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(p09_funkcje.Geometria.warunekTrojkata(a, b, c)) {
double pole = p09_funkcje.Geometria.poleTrojkata(a, b, c);
double obwod = p09_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 = p09_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 = p09_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 = p09_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 = p09_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
......@@ -97,7 +97,8 @@ public class Program2 {
double c = scanner.nextDouble();
double wynik = JednostkiMiary.c_na_f(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
} default -> {
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
......
package p10_importowanie;
import java.util.*;
import p09_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 p10_importowanie;
import static p09_funkcje.Geometria.obwodKola;
import static p09_funkcje.Geometria.obwodKwadratu;
import static p09_funkcje.Geometria.obwodProstokata;
import static p09_funkcje.Geometria.obwodTrojkata;
import static p09_funkcje.Geometria.poleKola;
import static p09_funkcje.Geometria.poleKwadratu;
import static p09_funkcje.Geometria.poleProstokata;
import static p09_funkcje.Geometria.poleTrojkata;
import static p09_funkcje.Geometria.warunekTrojkata;
import static p09_funkcje.JednostkiMiary.c_na_f;
import static p09_funkcje.JednostkiMiary.f_na_c;
import static p09_funkcje.JednostkiMiary.km_na_mile;
import static p09_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 p10_importowanie;
import static p09_funkcje.Geometria.*;
import static p09_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
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