Transcript JAVA cz 1

JAVA
Podstawowe terminy
• Klasa to fundament Javy. To dzięki nim jest
ona w pełni obiektowa i przy tym tak
wygodna. Najprościej mówiąc klasa to taka
przestrzeń, w której umieszczamy inne
elementy, przechowujemy informacje i je
przetwarzamy. Obrazowym przykładem może
być
czteroosobowa
rodzina
jadąca
samochodem. Samochód to klasa, natomiast
rodzina to jej elementy, powiemy o nich
obiekty. class Klasa{
tutaj jakieś elementy
}
• Obiekt jest natomiast reprezentacją klasy i jej
nośnikiem. Jeżeli mówimy o czymś, że jest
obiektem w Javie, to tak naprawdę
wyobrażamy sobie całą klasę i wszystko to co
się w niej znajduje. Poprzez obiekt możemy
odwoływać się do zmiennych, metod i innych
elementów w niej zawartych.
Klasa obiekt = new Klasa();
• Metoda to dla kogoś kto już wcześniej
programował inaczej funkcja. W niej
dokonywane są na przykład obliczenia, lub
inne operacje. Metody mogą nie zwracać nic,
ale równie dobrze dać w wyniku typ prosty,
lub zwrócić obiekt. Niektóre mogą przyjmować
także parametry, inne działać tylko na rzecz
obiektu, który je wywołuje.
Pierwszy program
public class Hello{
public static void main(String[] args){
System.out.print("Hello World");
}
}
1. public class Hello – jest to nic innego jak publiczna
klasa o nazwie Hello.
2. public static void main(String[] args) – jest
to metoda main, to od niej rozpoczyna się działanie
programu i w niej wywołujemy inne metody, lub
tworzymy obiekty za to odpowiedzialne. W nawiasie
podane są argumenty w postaci tablicy Stringów
3. System.out.print(„Hello World”); – omawiając
wyświetl(print) napis podany jako
argument(„Hello World”) przy użyciu strumienia
wyjścia w biblioteki System. Istnieje także
bliźniacza metoda println(string), która dodaje
na końcu drukowanego tekstu znak nowej linii
„\n” (i właśnie jej będziemy zazwyczaj używali).
Zadanie
Napisz program, który wyświetli w 3 kolejnych
liniach trzy imiona: Ania, Bartek, Kasia.
Rozwiązanie
public class Hello{
public static void main(String[] args){
System.out.println("Ania"); System.out.println("Bartek");
System.out.println("Kasia");
}}
_______________________
public class Hello{
public static void main(String[] args){
System.out.println("Ania\nBartek\nKasia");
}}
Komentarze
W Javie istnieją dwa rodzaje komentarzy:
• //text - tekst umieszczony za podwojonym
znaku slash jest uznawany za komentarz aż do
końca linii
• /* text */ – tekst umieszczony w takich
znacznikach jest traktowany jako komentarz
przez wiele linii kodu.
Przykład
public class Komentarze{
//poniżej rozpoczyna się działanie programu public
static void main(String[] args){
/*Ten tekst
nie ma wpływu
na program */
System.out.print("Hello World");
}
}
Zjawisko konkatenacji (+)
System.out.println("2 plus 2 to " + 2 + 2);
Operator + jest operatorem konkatenacji, jeśli
choć jeden z operandów tego operatora jest
stringiem.
Znaki specjalne, które muszą być
poprzedzone znakiem backslash \ :
•
•
•
•
•
\t – tab
\n – nowa linia
\” – cudzysłów
\’ – apostrof
\\ – backslash
Przykład
public class Typy{
public static void main(String[] args){
System.out.println('a'+'A');
System.out.println(1+2);
System.out.println(1.0+2.0);
System.out.println("cudzysłów \"");
System.out.println(true);
}
}
Zadanie
Przetestuj
wyświetlanie
specjalnych.
innych
znaków
Zmienne
Wyróżniamy dwie fazy tworzenia zmiennej:
• Deklaracja - tutaj określamy typ i nazwę zmiennej
• Inicjalizacja - nadanie wartości zmiennej
public class Zmienne{
public static void main(String[] args){
int liczba; // Deklaracja
liczba = 5; // Inicjalizacja
}
}
public class Stale{
public static void main(String[] args){
final double LICZBA_PI=3.14;
final int STALA2;
LICZBA_PI=8; //błąd, zmienna była zainicjowana
STALA2=3; // tak można zrobić - pierwsze
przypisanie
Słowo kluczowe final umieszczane przed typem zmiennej
}
oznacza, że zadeklarowana w ten sposób zmienna może być
tylko raz, w dowolnym miejscu, zainicjowana. Późniejsza próba
}
przypisania jej nowej wartości zakończy się błędem i program
nawet (na szczęście) nie przejdzie kompilacji.
Typ string
public class Test{
public static void main(String[] args){
String hello = "Witaj ";
String world = "Świecie!";
String powitanie = hello+world; //łączenie Stringów
System.out.println(powitanie);
String czesc = powitanie.substring(0, 6)+"uczniu";
System.out.println(czesc); } }
Metoda substring()
Po działaniu programu łatwo się domyślić jakie jest jej działanie. Mianowicie zwraca ona
„pod string” zaczynając od indeksu podanego jako pierwszy parametr (u nas 0) i kończąc
przed indeksem podanym jako drugi parametr -1. W Javie wszystko numeruje się od zera,
Zadanie
Napisz program, w którym zadeklarujesz kilka stałych, lub
zmiennych różnych typów o dowolnych nazwach, a
następnie wyświetlisz je w kolejnych liniach tekstu.
Skompiluj, lub spróbuj skompilować przykłady podane w tej
lekcji i zobacz co się stanie przy próbie nadania po raz drugi
wartości jakiejś stałej.
W tym samym programie zadeklaruj cztery zmienne typu
String. Trzy z nich zainicjuj jakimiś wyrazami a czwartemu
przypisz ciąg znaków utworzony z trzech wcześniejszych
zmiennych. Następnie wyświetl czwartą zmienną na
ekranie.
Przy użyciu metody substring wyświetl na ekranie dwa
pierwsze wyrazy wykorzystując wyłącznie czwartą
zmienną typu String.
Przykładowe rozwiązanie
Public class Rozwiazanie{
public static void main(String[] args){
short a = 5;
final int b = 129;
final char c='c';
System.out.println(a);
System.out.println(b);
System.out.println(c);
String x = "Ala ";
String y = "ma ";
String z = "kota";
String zdanie = x+y+z;
System.out.println(zdanie);
System.out.println(zdanie.substring(0, 7));
}}
Funkcje matematyczne i Wielkie liczby
Aby korzystać z funkcji matematycznych musimy poznać
bibliotekę Math z pakietu java.lang.
Kilka najważniejszych funkcji znajduje się poniżej.
• sqrt(double liczba) – zwraca pierwiastek z liczby double.
Jako parametr możemy również podać dowolny typ
liczbowy, wtedy nastąpi jego automatyczna konwersja na
double.
• pow(double a, double b) – zwraca liczbę a podniesioną
do potęgi b
• abs(liczba) – parametrem może być dowolna liczba,
metoda zwraca wartość bezwzględną z argumentu
Wszystkie metody są statyczne, aby je
wywołać należy użyć konstrukcji:
Math.nazwa_metody(argumenty)
Przykład programu, który obliczy pierwiastek z
liczby, a następnie podnosi ją do 3 potęgi.
public class Funkcje{
public static void main(String[] args){
double liczba = 9.0;
int b = 3;
double pierwiastek = Math.sqrt(liczba);
double potega = Math.pow(liczba, b);
System.out.println("Pierwiastek z "+liczba+" wynosi:
"+pierwiastek);
System.out.println("Liczba "+liczba+" podniesiona do potegi
"+b+" to "+potega);
}}
Import statyczny.
Dzięki jego zastosowaniu będziemy mogli pomijać
przedrostki Math przed nazwami funkcji.
import static java.lang.Math.*;
public class Funkcje{
public static void main(String[] args){
double liczba = 9.0;
int b = 3;
double pierwiastek = sqrt(liczba);
double potega = pow(liczba, b);
System.out.println("Pierwiastek z "+liczba+" wynosi:
"+pierwiastek);
System.out.println("Liczba "+liczba+" podniesiona do potegi
"+b+" to "+potega);
}}
W klasie Math występują także dwie stałe PI oraz E,
dzięki nim nie musimy deklarować własnych liczb pi
oraz e. Wywołujemy je podobnie jak funkcje.
Math.PI
Math.E
Wielkie liczby
Może się zdarzyć, że nawet zakres typów long, czy double nie wystarczy do
naszych obliczeń. Co wtedy zrobić? W Javie istnieją dwie klasy do
przechowywania naprawdę ogromnych liczb oferujące dodatkowe funkcje
matematyczne i nadające się także do precyzyjnych obliczeń
matematycznych, na przykład w bankowości.
BigInteger – klasa dla wielkich liczb całkowitych
BigDecimal – klasa dla wielkich liczb zmiennoprzecinkowych
Ich używanie w tradycyjnych programach nie jest zbyt wygodne, ponieważ nie
można zrobić bezpośredniego przypisania wartości BigInteger przykładowo
do wartości int, mimo, że BigInteger przechowywałaby liczbę z zakresu int.
Jest to spowodowane tym, że klasa BigInteger jest typem obiektowym.
Obie klasy posiadają także stałe, które są często wykorzystywane,
najważniejsze to
BigInteger.ONE / BigDecimal.ONE
BigInteger.ZERO / BigDecimal.ZERO
By utworzyć nową zmienną typu BigInteger, lub
BigDecimal musimy najpierw utworzyć obiekt .
W nagłówku trzeba oczywiście też zaimportować
używaną klasę.
Import java.math.BigInteger;
public class WielkaLiczba{
public static void main(String[] args){
BigInteger wielkaLiczba = new
BigInteger("12312312312312312312");
System.out.println(wielkaLiczba.toString());
}}
Najpierw tworzymy wielką liczbę typu, zauważ,
że podajemy ją w formie Stringa. Jednak można
również użyć innej formy.
BigInteger wielkaLiczba = BigInteger.valueOf(123123);
W tym przypadku trzeba jednak pamiętać, aby argument metody
valueOf() nie przekroczył zakresu typu long, lub double w przypadku klasy
BigDecimal. Przy sposobie ze Stringiem mogą one być praktycznie
nieograniczone. Aby dodać dwie ogromne liczby nie możemy korzystać ze
standardowych operatorów, należy w takim wypadku skorzystać z
gotowych funkcji: add(), subtract(), multiply(), divide().
import java.math.BigInteger;
public class WielkieLiczby{
public static void main(String[] args){
BigInteger a = new
BigInteger("123123123123123123123123123123");
BigInteger b = new
BigInteger("987654321987654321987654321987");
BigInteger suma = a.add(b); System.out.println("Suma
"+suma.toString());
}}
Stworzyliśmy tutaj dwie wielkie liczby a i b. Następnie obliczamy
ich sumę dzięki konstrukcji a.add(b), która zwraca wynik
dodawania dwóch liczb typu BigInteger. Wyświetlamy wynik
dzięki temu, że klasa BigInteger posiada metodę toString()
konwertującą liczbę na łańcuch znaków
Zadania
1. Napisz prosty kalkulator, w którym zainicjujesz dwie
zmienne int a i b dowolnymi liczbami mieszczącymi się w zakresie –
niech a będzie liczbą ujemną, natomiast b dodatnią… Następnie
wykorzystując import statyczny wyświetl wyniki następujących
działań bez użycia dodatkowych zmiennych:
-a^b (a do potęgi b)
-|a| (wartość bezwzględna z liczby a)
-pierwiastek z liczby a do potęgi b.
Zobacz co się stanie, gdy do a i b przypiszesz dwie 3 cyfrowe liczby,
oraz gdy liczba b będzie nieparzysta (wynik a^b będzie ujemny).
2. Napisz program analogiczny do zadania 1 wykorzystując klasę
BigInteger. Utwórz dwie liczby wykraczające poza zakres long,
wypróbuj funkcje dodawania, odejmowania i mnożenia, a także
podniesienie do potęgi(zobacz w API jaki typ parametru przyjmuje
ta funkcja) i wartość bezwzględną. Wszystkie wyniki zaprezentuj w
konsoli.
Rozwiązania
import static java.lang.Math.*;
public class Funkcje{
public static void main(String[] args){
int a = -125;
int b = 3;
System.out.println(pow(a, b));
System.out.println(abs(a));
System.out.println(sqrt(pow(a,b)));
}}
Rozwiązania
mport java.math.BigInteger;
public class Funkcje{
public static void main(String[] args){
BigInteger a = new BigInteger("123123123123123123123123123123");
BigInteger b = new
BigInteger("321321321321321321321321321321");
System.out.println("a+b= "+a.add(b).toString());
System.out.println("a-b= "+a.subtract(b).toString());
System.out.println("a*b= "+a.multiply(b).toString());
System.out.println("a/b= "+a.divide(b).toString());
System.out.println("a^12= "+a.pow(12));
System.out.println("|a|= "+a.abs());
}}
Zapis i odczyt z plików
Zapis i odczyt danych z plików to już bardziej zaawansowane zagadnienie. w
Javie, ale na szczęście w przypadku plików tekstowych nie taki diabeł
straszny o czym się zaraz przekonamy. Aby sprawnie porozumiewać się z
istniejącymi na naszym dysku danymi musimy przede wszystkim poznać
kilka podstawowych klas.
Podstawowa klasa, która pozwoli nam utworzyć obiekt przechowujący dane
pliku to File. Tworzymy je w następujący sposób:
File plik = new File("nazwa_pliku.txt");
W ten sposób mamy do dyspozycji obiekt File o nazwie
plik, który pozwoli nam na operacje na nim.
Odczyt:
Na najprostszy odczyt danych pozwala już
wcześniej poznana klasa Scanner. Aby utworzyć
strumień, należy użyć takiej konstrukcji:
Scanner odczyt = new Scanner(new File("nazwa_pliku.txt"));
Widzimy tutaj typową dla Javy i języków obiektowych
konstrukcję zwaną dekoratorem, lub kompozycją często
stosowaną w Javie. Klasa Scanner „obudowuje” klasę File,
dzięki czemu mamy dostęp do pliku. Później przekonamy się,
że takich zagnieżdżeń może być dużo więcej.
Gdy mamy utworzony obiekt Scanner z przekazanym jej
odpowiednim obiektem File możemy już używać
odpowiednich metod, czyli podobnie jak miało to
miejsce w konsoli poprawna będzie taka instrukcja:
String text = odczyt.nextLine();
Wczytamy w ten sposób do zmiennej text linię tekstu z
pliku tekstowego.
Sprawdźmy to na przykładzie. Utwórz plik, w którym
zapiszesz jedną dowolną linię tekstu, przykładowo „Ala
ma kota, bo nie wzięła leków”. Zapisz go jako ala.txt.
Kod programu do odczytania tego zdania wyglądałby
następująco:
Import java.io.File;
import java.io.FileNotFoundException; import
java.util.Scanner;
public class Odczyt{
public static void main(String[] args) throws
FileNotFoundException{ File file = new
File("ala.txt");
Scanner in = new Scanner(file);
String zdanie = in.nextLine();
System.out.println(zdanie);
}}
Pamiętaj, aby plik był w tym samym folderze, co
plik .class, w innym wypadku podaj ścieżkę do
pliku w miejsce jego nazwy.
Źródło: http://javastart.pl