Commit d1b742fc by Patryk Czarnik

Uporządkowanie przykładów "importowanie"

parent 44b9771d
package gotowe.p08_funkcje.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.
*
* W języku Java ZAWSZE da się napisać program bez użycia import.
*/
public class Program0 {
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ę lub operację:");
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");
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 = gotowe.p08_funkcje.przyklady.Geometria.poleKwadratu(a);
double obwod = gotowe.p08_funkcje.przyklady.Geometria.obwodKwadratu(a);
System.out.printf("Dla kwadratu o boku %.3f pole wynosi %.3f, a obwód %.3f\n", a, pole, obwod);
}
case "O" -> {
System.out.print("Podaj promień koła: ");
double r = scanner.nextDouble();
double pole = gotowe.p08_funkcje.przyklady.Geometria.poleKola(r);
double obwod = gotowe.p08_funkcje.przyklady.Geometria.obwodKola(r);
System.out.printf("Dla koła o promieniu %.3f pole wynosi %.3f, a obwód %.3f\n", r, 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 = gotowe.p08_funkcje.przyklady.Geometria.poleProstokata(a, b);
double obwod = gotowe.p08_funkcje.przyklady.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 "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();
double pole = gotowe.p08_funkcje.przyklady.Geometria.poleTrojkata(a, b, c);
double obwod = gotowe.p08_funkcje.przyklady.Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla trójkąta o bokach %.3f, %.3f, %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, pole, obwod);
}
case "KM" -> {
System.out.print("Podaj odległość w kilometrach: ");
double km = scanner.nextDouble();
double wynik = gotowe.p08_funkcje.przyklady.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 = gotowe.p08_funkcje.przyklady.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 = gotowe.p08_funkcje.przyklady.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 = gotowe.p08_funkcje.przyklady.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!");
}
}
package gotowe.p08_funkcje.importowanie;
import java.util.Scanner;
import gotowe.p08_funkcje.przyklady.Geometria;
import gotowe.p08_funkcje.przyklady.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 Program1 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
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");
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 "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 "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 "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();
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla trójkąta o bokach %.3f, %.3f, %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, 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.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!");
}
}
package gotowe.p08_funkcje.importowanie;
import java.util.Scanner;
import gotowe.p08_funkcje.przyklady.*;
/* 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 Program1)
* 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 Program2 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
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");
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 "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 "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 "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();
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
System.out.printf("Dla trójkąta o bokach %.3f, %.3f, %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, 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.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!");
}
}
package gotowe.p08_funkcje.importowanie;
import static gotowe.p08_funkcje.przyklady.Geometria.obwodKola;
import static gotowe.p08_funkcje.przyklady.Geometria.obwodKwadratu;
import static gotowe.p08_funkcje.przyklady.Geometria.obwodProstokata;
import static gotowe.p08_funkcje.przyklady.Geometria.obwodTrojkata;
import static gotowe.p08_funkcje.przyklady.Geometria.poleKola;
import static gotowe.p08_funkcje.przyklady.Geometria.poleKwadratu;
import static gotowe.p08_funkcje.przyklady.Geometria.poleProstokata;
import static gotowe.p08_funkcje.przyklady.Geometria.poleTrojkata;
import static gotowe.p08_funkcje.przyklady.JednostkiMiary.c_na_f;
import static gotowe.p08_funkcje.przyklady.JednostkiMiary.f_na_c;
import static gotowe.p08_funkcje.przyklady.JednostkiMiary.km_na_mile;
import static gotowe.p08_funkcje.przyklady.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 Program3 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
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");
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 "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 "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 "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();
double pole = poleTrojkata(a, b, c);
double obwod = obwodTrojkata(a, b, c);
System.out.printf("Dla trójkąta o bokach %.3f, %.3f, %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, 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 = 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!");
}
}
package gotowe.p08_funkcje.importowanie;
import static gotowe.p08_funkcje.przyklady.Geometria.*;
import static gotowe.p08_funkcje.przyklady.JednostkiMiary.*;
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 Program4 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
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");
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 "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 "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 "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();
double pole = poleTrojkata(a, b, c);
double obwod = obwodTrojkata(a, b, c);
System.out.printf("Dla trójkąta o bokach %.3f, %.3f, %.3f pole wynosi %.3f, a obwód %.3f\n", a, b, c, 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 = 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!");
}
}
package gotowe.p08_funkcje.importowanie;
import java.util.Random;
import static gotowe.p08_funkcje.przyklady.Geometria.*;
import static java.lang.Double.parseDouble;
import static javax.swing.JOptionPane.*;
public class StaticImportOkienkowy {
public static void main(String[] args) {
Random random = new Random();
String[] figury = {"kwadrat", "koło", "prostokąt", "trójkąt"};
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 = parseDouble(showInputDialog("Podaj długość boku:"));
double pole = poleKwadratu(a);
double obwod = obwodKwadratu(a);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "koło" -> {
double r = parseDouble(showInputDialog("Podaj promień koła:"));
double pole = poleKola(r);
double obwod = obwodKola(r);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "prostokąt" -> {
double a = parseDouble(showInputDialog("Podaj długość 1. boku:"));
double b = 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 "trójkąt" -> {
double a = parseDouble(showInputDialog("Podaj długość 1. boku:"));
double b = parseDouble(showInputDialog("Podaj długość 2. boku:"));
double c = parseDouble(showInputDialog("Podaj długość 3. boku:"));
double pole = poleTrojkata(a, b, c);
double obwod = obwodTrojkata(a, b, c);
showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
}
}
}
package gotowe.p08_funkcje.importowanie;
public class V1_BrakImportow {
public static void main(String[] args) {
System.out.println("Pole kwadratu 5 = " + gotowe.p08_funkcje.przyklady.Geometria.poleKwadratu(5.0));
System.out.println("Pole koła 5 = " + gotowe.p08_funkcje.przyklady.Geometria.poleKola(5.0));
System.out.println("Pole prostokąta 3×5 = " + gotowe.p08_funkcje.przyklady.Geometria.poleProstokata(3.0, 5.0));
System.out.println("100 mil = " + gotowe.p08_funkcje.przyklady.JednostkiMiary.mileNaKm(100) + " km");
System.out.println("100 km = " + gotowe.p08_funkcje.przyklady.JednostkiMiary.kmNaMile(100) + " mil");
}
}
package gotowe.p08_funkcje.importowanie;
import gotowe.p08_funkcje.przyklady.Geometria;
import gotowe.p08_funkcje.przyklady.JednostkiMiary;
public class V2_ImportKlas {
public static void main(String[] args) {
System.out.println("Pole kwadratu 5 = " + Geometria.poleKwadratu(5.0));
System.out.println("Pole koła 5 = " + Geometria.poleKola(5.0));
System.out.println("Pole prostokąta 3×5 = " + Geometria.poleProstokata(3.0, 5.0));
System.out.println("100 mil = " + JednostkiMiary.mileNaKm(100) + " km");
System.out.println("100 km = " + JednostkiMiary.kmNaMile(100) + " mil");
}
}
package gotowe.p08_funkcje.importowanie;
import gotowe.p08_funkcje.przyklady.*;
// Import wszystkich klas publicznych z podanego pakietu.
// Jeśli w programie użyjemy nazwy, która znajduje się w różnych pakietach, to mamy konfokt nazw i to się skompiluje.
// Podczas ustalania skąd się wzięła jakaś nazwa kompilator stosuje taką kolejność:
// 1) Klasy zaimportowane wprost (jak w v2)
// 2) Klasy z bieżącego pakietu
// 3) Klasy zaimportowane z * , wśród nich klasy z pakietu java.lang oraz klasy z pakietu domyślnego (którego nie należy używać)
public class V3_ImportGwiazdka {
public static void main(String[] args) {
System.out.println("Pole kwadratu 5 = " + Geometria.poleKwadratu(5.0));
System.out.println("Pole koła 5 = " + Geometria.poleKola(5.0));
System.out.println("Pole prostokąta 3×5 = " + Geometria.poleProstokata(3.0, 5.0));
System.out.println("100 mil = " + JednostkiMiary.mileNaKm(100) + " km");
System.out.println("100 km = " + JednostkiMiary.kmNaMile(100) + " mil");
}
}
package gotowe.p08_funkcje.importowanie;
import static gotowe.p08_funkcje.przyklady.Geometria.poleKola;
import static gotowe.p08_funkcje.przyklady.Geometria.poleKwadratu;
import static gotowe.p08_funkcje.przyklady.Geometria.poleProstokata;
import static gotowe.p08_funkcje.przyklady.JednostkiMiary.kmNaMile;
import static gotowe.p08_funkcje.przyklady.JednostkiMiary.mileNaKm;
public class V4_ImportStatic {
public static void main(String[] args) {
System.out.println("Pole kwadratu 5 = " + poleKwadratu(5.0));
System.out.println("Pole koła 5 = " + poleKola(5.0));
System.out.println("Pole prostokąta 3×5 = " + poleProstokata(3.0, 5.0));
System.out.println("100 mil = " + mileNaKm(100) + " km");
System.out.println("100 km = " + kmNaMile(100) + " mil");
}
}
package gotowe.p08_funkcje.importowanie;
import static gotowe.p08_funkcje.przyklady.Geometria.*;
import static gotowe.p08_funkcje.przyklady.JednostkiMiary.*;
//NK import static gotowe.p08_funkcje.przyklady.*.*;
public class V5_ImportStaticGwiazdka {
public static void main(String[] args) {
System.out.println("Pole kwadratu 5 = " + poleKwadratu(5.0));
System.out.println("Pole koła 5 = " + poleKola(5.0));
System.out.println("Pole prostokąta 3×5 = " + poleProstokata(3.0, 5.0));
System.out.println("100 mil = " + mileNaKm(100) + " km");
System.out.println("100 km = " + kmNaMile(100) + " mil");
}
}
package gotowe.p08_funkcje.przyklady;
import java.util.Scanner;
public class Geometria {
private Geometria() {
// aby nikt nie tworzył instancji tej klasy, bo to jest "utility class"
}
public static double poleKwadratu(double a) {
return a * a; // ew. Math.pow(a, 2)
return a*a;
}
public static double poleKola(double r) {
//JOptionPane.showMessageDialog(null, "Właśnie zabieram się za obliczanie pola koła o promieniu " + r);
return Math.PI * Math.pow(r, 2);
public static double obwodKwadratu(double a) {
return 4*a;
}
public static double poleProstokata(double a, double b) {
return a * b;
}
public static double obwodKwadratu(double a) {
return 4*a;
return a*b;
}
public static double obwodProstokata(double a, double b) {
return 2*a + 2*b;
}
public static double obwodKola(double r) {
return 2 * Math.PI * r;
public static double poleKola(double r) {
return Math.PI * r*r;
}
// W tej wersji main jest w tej samej klasie, co definicje funkcji,
// dzięki temu można łatwo te funkcje (statyczne) wywoływać.
// Ale dla przejrzystości kodu lepiej funkcje definiować w jednej klasie, a program (main) pisać w innej - zob. ProgramGeometryczny)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Podaj pierwszą liczbę: ");
double x = sc.nextDouble();
System.out.print("Podaj drugą liczbę: ");
double y = sc.nextDouble();
double wynik;
wynik = poleKwadratu(x);
System.out.println("Pole kwadratu o boku " + x + " wynosi " + wynik);
wynik = poleKwadratu(y);
System.out.println("Pole kwadratu o boku " + y + " wynosi " + wynik);
wynik = poleProstokata(x, y);
System.out.println("Pole prostokąta " + x + " × " + y + " wynosi " + wynik);
wynik = poleKola(x);
System.out.println("Pole koła o promieniu " + x + " wynosi " + wynik);
wynik = poleKola(y);
System.out.println("Pole koła o promieniu " + y + " wynosi " + wynik);
wynik = obwodKwadratu(x);
System.out.println("Obwód kwadratu o boku " + x + " wynosi " + wynik);
wynik = obwodKwadratu(y);
System.out.println("Obwód kwadratu o boku " + y + " wynosi " + wynik);
public static double obwodKola(double r) {
return Math.PI * 2*r;
}
// tak też można pisać, ale po co?...
wynik = Geometria.obwodProstokata(x, y);
System.out.println("Obwód prostokąta " + x + " × " + y + " wynosi " + wynik);
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 gotowe.p08_funkcje.przyklady;
import java.util.Scanner;
public class GeometriaProgram {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
petla:
while(true) {
System.out.println("\nWybierz figurę lub operację:");
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");
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 "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 "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);
}
default -> {
System.out.println("Nieznane polecenie " + wybor);
}
}
}
System.out.println("Dzięki, miłego dnia!");
}
}
package gotowe.p08_funkcje.przyklady;
public class GeometriaTest {
public static void main(String[] args) {
System.out.println(Geometria.poleKwadratu(5));
System.out.println(Geometria.poleKwadratu(6.5));
System.out.println(Geometria.obwodKwadratu(5));
System.out.println(Geometria.obwodKwadratu(6.5));
System.out.println();
System.out.println(Geometria.poleProstokata(3, 4));
System.out.println(Geometria.poleProstokata(6.5, 3.33));
System.out.println(Geometria.obwodProstokata(3, 4));
System.out.println(Geometria.obwodProstokata(6.5, 3.33));
System.out.println();
}
}
package gotowe.p08_funkcje.przyklady;
public class JednostkiMiary {
private static final double PRZELICZNIK_KM_MILE = 1.609344;
public static double kmNaMile(double km) {
return km / 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 mileNaKm(double mile) {
return 1.609344 * mile;
public static double km_na_mile(double km) {
return km / PRZELICZNIK_KM_MILE;
}
public static double farNaCel(double far) {
return 5. / 9. * (far - 32d);
// 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 double celNaFar(double cel) {
return 32.0 + (9.0 / 5.0 * cel); // 32 + 1.8*cel
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 gotowe.p08_funkcje.przyklady;
import java.util.Scanner;
public class Palindrom {
static boolean palindrom_v1(String napis) {
for(int i = 0; i < napis.length(); i++) {
if(napis.charAt(i) != napis.charAt(napis.length() - i - 1)) {
return false;
}
}
// gdy nie było żadnej niezgodności i doszliśmy do końca pętli, wtedy możemy zwróić true
return true;
}
static boolean palindrom_v2(String napis) {
final int length = napis.length();
for(int i = 0; i < length / 2; i++) {
if(napis.charAt(i) != napis.charAt(length - i - 1)) {
return false;
}
}
return true;
}
static boolean palindrom(String napis) {
for(int left = 0, right = napis.length()-1; left < right; left++, right--) {
if(napis.charAt(left) != napis.charAt(right)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Pusty tekst kończy program");
while(true) {
System.out.println("Podaj tekst:");
String txt = scanner.nextLine();
if(txt.isEmpty()) break;
if(palindrom(txt)) {
System.out.println("Tekst JEST palindromem");
} else {
System.out.println("Tekst NIE jest palindromem");
}
}
System.out.println("Koniec");
}
}
package gotowe.p08_funkcje.przyklady;
import java.util.Locale;
import java.util.Scanner;
public class ProgramGeometryczny {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc.useLocale(Locale.US);
glownaPetla:
while(true) {
System.out.println("Wybierz figurę:\n Q - zakończ,\n K - kwadrat,\n P - prostokąt,\n O - koło");
String wybor = sc.nextLine().trim().toUpperCase();
switch(wybor) {
case "Q": {
break glownaPetla; // etykieta / label
}
case "K": {
System.out.print("Podaj długość boku kwadratu: ");
double a = sc.nextDouble();
double pole = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
System.out.println("Pole kwadratu wynosi: " + pole);
System.out.println("Obwód kwadratu wynosi: " + obwod);
break;
}
case "P": {
System.out.print("Podaj długość dwóch boków prostokąta: ");
double a = sc.nextDouble();
double b = sc.nextDouble();
double pole = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
System.out.println("Pole prostokąta wynosi: " + pole);
System.out.println("Obwód prostokąta wynosi: " + obwod);
break;
}
case "O": {
System.out.print("Podaj promień koła: ");
double r = sc.nextDouble();
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
System.out.println("Pole koła wynosi: " + pole);
System.out.println("Obwód koła wynosi: " + obwod);
break;
}
default: {
System.out.println("Nieznane polecenie");
continue glownaPetla;
}
}
sc.nextLine(); // żeby Scanner wczytał wszystkie pozostałości i przeszedł do nast. linii
}
}
}
/*
użycie if zamiast switch wyglądałoby tak:
if("K".equals(wybor)) {
System.out.println("Wybrano kwadrat");
} else if("O".equals(wybor)) {
System.out.println("Wybrano koło");
}
*/
package gotowe.p08_funkcje.przyklady;
import java.util.Random;
import javax.swing.JOptionPane;
public class ProgramOkienkowy {
public static void main(String[] args) {
Random random = new Random();
String[] figury = {"kwadrat", "koło", "prostokąt", "trójkąt"};
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 = Geometria.poleKwadratu(a);
double obwod = Geometria.obwodKwadratu(a);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "koło" -> {
double r = Double.parseDouble(JOptionPane.showInputDialog("Podaj promień koła:"));
double pole = Geometria.poleKola(r);
double obwod = Geometria.obwodKola(r);
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 = Geometria.poleProstokata(a, b);
double obwod = Geometria.obwodProstokata(a, b);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
case "trójkąt" -> {
double a = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 1. boku:"));
double b = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 2. boku:"));
double c = Double.parseDouble(JOptionPane.showInputDialog("Podaj długość 3. boku:"));
double pole = Geometria.poleTrojkata(a, b, c);
double obwod = Geometria.obwodTrojkata(a, b, c);
JOptionPane.showMessageDialog(null, "Pole: " + pole + "\nObwód: " + obwod);
}
}
}
}
package gotowe.p08_funkcje.przyklady;
public class TestyGeometrii {
// Będąc w jednej klasie, można wywoływać metody zdefiniowane w innej klasie,
// zgodnie z ograniczeniami widoczności (private/public)
// Jeśli metoda nie jest prywatna, to można jej używać w tym samym pakiecie,
// a jeśli jest publiczna, to można używać wszędzie.
public static void main(String[] args) {
System.out.println("Pole kwadratu 5 = " + Geometria.poleKwadratu(5.0));
System.out.println("Pole kwadratu 6.5 = " + Geometria.poleKwadratu(6.5));
System.out.println("Pole koła 5 = " + Geometria.poleKola(5.0));
System.out.println("Pole prostokąta 3×5 = " + Geometria.poleProstokata(3.0, 5.0));
System.out.println();
// Testy preliczania jednstek też przeniosłem do tej klasy, żeby pokazać, że w klasie JednostkiMiary może nie być main, tylko same funkcje.
System.out.println("100 mil = " + JednostkiMiary.mileNaKm(100) + " km");
System.out.println("100 km = " + JednostkiMiary.kmNaMile(100) + " mil");
System.out.println("160 km = " + JednostkiMiary.kmNaMile(160) + " mil");
System.out.println();
System.out.println("0 F = " + JednostkiMiary.farNaCel(0) + " C");
System.out.println("100 F = " + JednostkiMiary.farNaCel(100) + " C"); // ok 37
System.out.println("0 C = " + JednostkiMiary.celNaFar(0) + " F");
System.out.println("37 C = " + JednostkiMiary.celNaFar(37) + " F"); // ok 100
System.out.println("100 C = " + JednostkiMiary.celNaFar(100) + " F"); // 212 ?
}
}
package p08_funkcje;
import java.util.Scanner;
public class Silnia {
// silnia to iloczyn liczb naturalnych od 1 do n
// silnia(n) = 1 * 2 * ... * n
// np. silnia(5) = 1*2*3*4*5 = 120
static int silnia(int n) {
int iloczyn = 1;
for(int i = 1; i <= n; i++) {
// ???
}
return iloczyn;
}
public static void main(String[] args) {
System.out.println("Liczba ujemna przerywa...");
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.print("Podaj argument: ");
int n = scanner.nextInt();
if(n < 0) break;
var wynik = silnia(n);
System.out.println("silnia(" + n + ") = " + wynik);
}
}
}
package p08_funkcje;
import java.math.BigInteger;
import java.util.Scanner;
public class SilniaBig {
static BigInteger silnia(int n) {
BigInteger iloczyn = BigInteger.ONE;
for(int i = 1; i <= n; i++) {
iloczyn = iloczyn.multiply(BigInteger.valueOf(i));
}
return iloczyn;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Ujemna liczba kończy program");
while(true) {
System.out.print("Podaj liczbę: ");
int arg = scanner.nextInt();
if(arg < 0) break;
BigInteger wynik = silnia(arg);
System.out.println("silnia(" + arg +") = " + wynik);
}
System.out.println("Koniec");
}
}
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