Commit 2187c1c3 by Patryk Czarnik

funkcje i importowanie

parent be913279
package p07_funkcje;
// Komentarz pisany w znacznikach /** */
// pełni rolę dokumentacji, tzw "javadoc".
/**
* @author patryk
*
* To jest przykład klasy, w której nie ma metody main, tylko są zdefiniowane inne metody.
* "klasa narzędziowa" / "utility class"
* Tutaj są to funkcje matematyczne dot. geometrii szkolnej.
*/
public class FunkcjeGeometryczne {
// 4 poziomy dostepu (widoczności): private, pakietowy (domyślny, nie pisze się nic), protected, public
/** Funkcja oblicza pole kwadratu.
* @param a długość boku
* @return pole kwadratu
*/
public static double poleKwadratu(double a) {
return a*a;
}
/** Oblicza obwód kwadratu o podanym boku.
* @param a długość boku
* @return obliczony obwód kwadratu
*/
public static double obwodKwadratu(double a) {
return 4*a;
}
/** Oblicza pole prostokąta o podanych bokach.
* @param a długość pierwszego boku
* @param b długość drugiego boku
* @return obliczone pole prostokąta
*/
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;
}
}
package p07_funkcje;
public class JednostkiMiary {
// napisz funkcje: mile_na_km , km_na_mile , far_na_cel , cel_na_far
public static double mile_na_km(double mile) {
return mile * 1.609344;
}
public static double km_na_mile(double km) {
return km / 1.609344;
}
public static double far_na_cel(double far) {
//źle return 5 / 9 * (far - 32);
// return 5. / 9. * (far - 32);
return (far - 32) / 1.8;
}
public static double cel_na_far(double cel) {
// źle return 32 + 9 / 5 * cel;
// return 32 + 9. / 5. * cel;
return 32 + 1.8 * cel;
}
public static void main(String[] args) {
System.out.println("testowe wywołania:");
System.out.println("100 mil = " + JednostkiMiary.mile_na_km(100) + " km");
System.out.println("500 mil = " + mile_na_km(500) + " km");
System.out.println("100 km = " + km_na_mile(100) + " mil");
System.out.println("160 km = " + km_na_mile(160) + " mil");
System.out.println();
System.out.println("0 °F = " + far_na_cel(0) + " °C");
System.out.println("50 °F = " + far_na_cel(50) + " °C");
System.out.println("100 °F = " + far_na_cel(100) + " °C");
System.out.println();
System.out.println("0 °C = " + cel_na_far(0) + " °F");
System.out.println("37 °C = " + cel_na_far(37) + " °F");
System.out.println("100 °C = " + cel_na_far(100) + " °F");
}
}
package p07_funkcje;
import java.util.Scanner;
public class ProgramGeometryczny {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostoką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");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = FunkcjeGeometryczne.poleKwadratu(a);
double obwod = FunkcjeGeometryczne.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 długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = FunkcjeGeometryczne.poleProstokata(a, b);
double obwod = FunkcjeGeometryczne.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 = FunkcjeGeometryczne.poleKola(r);
double obwod = FunkcjeGeometryczne.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
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.far_na_cel(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.cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
}
}
package p08_importowanie;
/* W tej wersji programu nie ma żadnych importów, a wszystkie odwołania do klasy FunkcjeGometryczne
* oraz standardowej klasy Scanner są poprzedzone nazwą pakietu.
*
* W języku Java ZAWSZE da się napisać program bez użycia import.
*
*/
public class Importowanie1 {
public static void main(String[] args) {
@SuppressWarnings("resource")
java.util.Scanner scanner = new java.util.Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostoką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");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = p07_funkcje.FunkcjeGeometryczne.poleKwadratu(a);
double obwod = p07_funkcje.FunkcjeGeometryczne.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 długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = p07_funkcje.FunkcjeGeometryczne.poleProstokata(a, b);
double obwod = p07_funkcje.FunkcjeGeometryczne.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.FunkcjeGeometryczne.poleKola(r);
double obwod = p07_funkcje.FunkcjeGeometryczne.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
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.far_na_cel(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.cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
}
}
package p08_importowanie;
import java.util.Scanner;
import p07_funkcje.FunkcjeGeometryczne;
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 Importowanie2 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostoką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");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = FunkcjeGeometryczne.poleKwadratu(a);
double obwod = FunkcjeGeometryczne.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 długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = FunkcjeGeometryczne.poleProstokata(a, b);
double obwod = FunkcjeGeometryczne.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 = FunkcjeGeometryczne.poleKola(r);
double obwod = FunkcjeGeometryczne.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
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.far_na_cel(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.cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
}
}
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 Importowanie2)
* 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 Importowanie3 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostoką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");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
break petla;
}
case "K" -> {
System.out.print("Podaj długość boku kwadratu: ");
double a = scanner.nextDouble();
double pole = FunkcjeGeometryczne.poleKwadratu(a);
double obwod = FunkcjeGeometryczne.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 długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
double b = scanner.nextDouble();
double pole = FunkcjeGeometryczne.poleProstokata(a, b);
double obwod = FunkcjeGeometryczne.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 = FunkcjeGeometryczne.poleKola(r);
double obwod = FunkcjeGeometryczne.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, pole, obwod);
}
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.far_na_cel(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.cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
}
}
package p08_importowanie;
import java.util.Scanner;
import static p07_funkcje.FunkcjeGeometryczne.obwodKola;
import static p07_funkcje.FunkcjeGeometryczne.obwodKwadratu;
import static p07_funkcje.FunkcjeGeometryczne.obwodProstokata;
import static p07_funkcje.FunkcjeGeometryczne.poleKola;
import static p07_funkcje.FunkcjeGeometryczne.poleKwadratu;
import static p07_funkcje.FunkcjeGeometryczne.poleProstokata;
import static p07_funkcje.JednostkiMiary.cel_na_far;
import static p07_funkcje.JednostkiMiary.far_na_cel;
import static p07_funkcje.JednostkiMiary.km_na_mile;
import static p07_funkcje.JednostkiMiary.mile_na_km;
// źle, bo nextDouble nie jest static:
// import static java.util.Scanner.nextDouble;
//można też importować zmienne / stałe statyczne:
import static java.lang.Math.PI;
/* 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 Importowanie4 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostoką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");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
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 długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
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 "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 = far_na_cel(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 = cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("A liczba pi jest równa około " + PI);
}
}
package p08_importowanie;
import java.util.Scanner;
import static p07_funkcje.FunkcjeGeometryczne.*;
import static p07_funkcje.JednostkiMiary.*;
import static java.lang.Math.*;
/* 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 p07_funkcje.*.*;
*/
public class Importowanie5 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę:");
System.out.println(" K - kwadrat");
System.out.println(" O - koło");
System.out.println(" P - prostoką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");
String wybor = scanner.next().toUpperCase();
switch(wybor) {
case "Q" -> {
// muszę użyć "etykiety", aby powiedzieć Javie, że przerywam pętlę while, a nie samego switcha
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 długość pierwszego boku prostokąta: ");
double a = scanner.nextDouble();
System.out.print("Podaj długość drugiego boku prostokąta: ");
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 "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 = far_na_cel(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 = cel_na_far(c);
System.out.printf("%.3f °C = %.3f °F\n", c, wynik);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("A liczba pi jest równa około " + PI);
}
}
package p08_importowanie.wersja_okienkowa;
/* W tej wersji programu nie ma żadnych importów, a wszystkie odwołania do klasy Geometria
* oraz standardowych klas JOptionPane i Random są poprzedzone nazwą pakietu.
*
* W języku Java ZAWSZE da się napisać program bez użycia import.
* 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.
*/
public class Importowanie1_BrakImportow {
public static void main(String[] args) {
// Tylko, aby pokazać w kontekście importowania, tworzę obiekt Random
java.util.Random random = new java.util.Random();
String[] figury = {"kwadrat", "prostokąt", "koło"};
int poczatkowyWybor = random.nextInt(figury.length);
String figura = (String)javax.swing.JOptionPane.showInputDialog(
null,
"Wybierz rodzaj figury",
"Wybór",
javax.swing.JOptionPane.QUESTION_MESSAGE,
null,
figury,
figury[poczatkowyWybor]);
if(figura == null) {
return;
}
switch(figura) {
case "kwadrat" -> {
double a = Double.parseDouble(javax.swing.JOptionPane.showInputDialog("Podaj długość boku:"));
double pole = p07_funkcje.FunkcjeGeometryczne.poleKwadratu(a);
double obwod = p07_funkcje.FunkcjeGeometryczne.obwodKwadratu(a);
javax.swing.JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "prostokąt" -> {
double a = Double.parseDouble(javax.swing.JOptionPane.showInputDialog("Podaj długość 1. boku:"));
double b = Double.parseDouble(javax.swing.JOptionPane.showInputDialog("Podaj długość 2. boku:"));
double pole = p07_funkcje.FunkcjeGeometryczne.poleProstokata(a, b);
double obwod = p07_funkcje.FunkcjeGeometryczne.obwodProstokata(a, b);
javax.swing.JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "koło" -> {
double r = Double.parseDouble(javax.swing.JOptionPane.showInputDialog("Podaj promień koła:"));
double pole = p07_funkcje.FunkcjeGeometryczne.poleKola(r);
double obwod = p07_funkcje.FunkcjeGeometryczne.obwodKola(r);
javax.swing.JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
}
}
}
package p08_importowanie.wersja_okienkowa;
import java.util.Random;
import javax.swing.JOptionPane;
import p07_funkcje.FunkcjeGeometryczne;
/* 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.
*/
public class Importowanie2_PojedynczeImporty {
public static void main(String[] args) {
// Tylko, aby pokazać w kontekście importowania, tworzę obiekt Random
Random random = new Random();
String[] figury = {"kwadrat", "prostokąt", "koło"};
int poczatkowyWybor = random.nextInt(figury.length);
String figura = (String)JOptionPane.showInputDialog(
null,
"Wybierz rodzaj figury",
"Wybór",
JOptionPane.QUESTION_MESSAGE,
null,
figury,
figury[poczatkowyWybor]);
if(figura == null) {
return;
}
switch(figura) {
case "kwadrat" -> {
double a = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość boku:"));
double pole = FunkcjeGeometryczne.poleKwadratu(a);
double obwod = FunkcjeGeometryczne.obwodKwadratu(a);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "prostokąt" -> {
double a = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 1. boku:"));
double b = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 2. boku:"));
double pole = FunkcjeGeometryczne.poleProstokata(a, b);
double obwod = FunkcjeGeometryczne.obwodProstokata(a, b);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "koło" -> {
double r = Double.parseDouble(JOptionPane.showInputDialog("Podaj promień koła:"));
double pole = FunkcjeGeometryczne.poleKola(r);
double obwod = FunkcjeGeometryczne.obwodKola(r);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
}
}
}
package p08_importowanie.wersja_okienkowa;
// tego nie trzeba pisać, ale zachowanie jest takie, jakby każdy program miał to na początku
// import java.lang.*;
import java.util.*;
import javax.swing.*;
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
* 2. bieżący pakiet
* 3. klasy zaimportowane za pomocą * (w tym 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 Importowanie3_ImportZGwiazdka {
public static void main(String[] args) {
// Tylko, aby pokazać w kontekście importowania, tworzę obiekt Random
Random random = new Random();
String[] figury = {"kwadrat", "prostokąt", "koło"};
int poczatkowyWybor = random.nextInt(figury.length);
String figura = (String)JOptionPane.showInputDialog(
null,
"Wybierz rodzaj figury",
"Wybór",
JOptionPane.QUESTION_MESSAGE,
null,
figury,
figury[poczatkowyWybor]);
if(figura == null) {
return;
}
switch(figura) {
case "kwadrat" -> {
double a = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość boku:"));
double pole = FunkcjeGeometryczne.poleKwadratu(a);
double obwod = FunkcjeGeometryczne.obwodKwadratu(a);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "prostokąt" -> {
double a = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 1. boku:"));
double b = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 2. boku:"));
double pole = FunkcjeGeometryczne.poleProstokata(a, b);
double obwod = FunkcjeGeometryczne.obwodProstokata(a, b);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "koło" -> {
double r = Double.parseDouble(JOptionPane.showInputDialog("Podaj promień koła:"));
double pole = FunkcjeGeometryczne.poleKola(r);
double obwod = FunkcjeGeometryczne.obwodKola(r);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
}
}
}
package p08_importowanie.wersja_okienkowa;
import static javax.swing.JOptionPane.QUESTION_MESSAGE;
import static javax.swing.JOptionPane.showInputDialog;
import static javax.swing.JOptionPane.showMessageDialog;
import static p07_funkcje.FunkcjeGeometryczne.obwodKola;
import static p07_funkcje.FunkcjeGeometryczne.obwodKwadratu;
import static p07_funkcje.FunkcjeGeometryczne.obwodProstokata;
import static p07_funkcje.FunkcjeGeometryczne.poleKola;
import static p07_funkcje.FunkcjeGeometryczne.poleKwadratu;
import static p07_funkcje.FunkcjeGeometryczne.poleProstokata;
import java.util.Random;
/* 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 byly 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 Random, bo jej używamy w sposób "obiektowy":
* tworzony jest obiekt klasy Random i na nim wywoływana jest metoda (nie jest statyczna).
*
*/
public class Importowanie4_ImportStatic {
public static void main(String[] args) {
// Tylko, aby pokazać w kontekście importowania, tworzę obiekt Random
Random random = new Random();
String[] figury = {"kwadrat", "prostokąt", "koło"};
int poczatkowyWybor = random.nextInt(figury.length);
String figura = (String)showInputDialog(
null,
"Wybierz rodzaj figury",
"Wybór",
QUESTION_MESSAGE,
null,
figury,
figury[poczatkowyWybor]);
if(figura == null) {
return;
}
switch(figura) {
case "kwadrat" -> {
double a = Double.parseDouble(showInputDialog("Podaj długość boku:"));
double pole = poleKwadratu(a);
double obwod = obwodKwadratu(a);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "prostokąt" -> {
double a = Double.parseDouble(showInputDialog("Podaj długość 1. boku:"));
double b = Double.parseDouble(showInputDialog("Podaj długość 2. boku:"));
double pole = poleProstokata(a, b);
double obwod = obwodProstokata(a, b);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "koło" -> {
double r = Double.parseDouble(showInputDialog("Podaj promień koła:"));
double pole = poleKola(r);
double obwod = obwodKola(r);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
}
}
}
package p08_importowanie.wersja_okienkowa;
import static javax.swing.JOptionPane.*;
import static p07_funkcje.FunkcjeGeometryczne.*;
import java.util.Random;
/* 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 pzejdzie:
* import static p07_funkcje.geometria.*.*;
*/
public class Importowanie5_ImportStaticZGwiazdka {
public static void main(String[] args) {
// Tylko, aby pokazać w kontekście importowania, tworzę obiekt Random
Random random = new Random();
String[] figury = {"kwadrat", "prostokąt", "koło"};
int poczatkowyWybor = random.nextInt(figury.length);
String figura = (String)showInputDialog(
null,
"Wybierz rodzaj figury",
"Wybór",
QUESTION_MESSAGE,
null,
figury,
figury[poczatkowyWybor]);
if(figura == null) {
return;
}
switch(figura) {
case "kwadrat" -> {
double a = Double.parseDouble(showInputDialog("Podaj długość boku:"));
double pole = poleKwadratu(a);
double obwod = obwodKwadratu(a);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "prostokąt" -> {
double a = Double.parseDouble(showInputDialog("Podaj długość 1. boku:"));
double b = Double.parseDouble(showInputDialog("Podaj długość 2. boku:"));
double pole = poleProstokata(a, b);
double obwod = obwodProstokata(a, b);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "koło" -> {
double r = Double.parseDouble(showInputDialog("Podaj promień koła:"));
double pole = poleKola(r);
double obwod = obwodKola(r);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
}
}
}
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