Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- // Jak nie rozumiesz któregokolwiek słowa poniżej, bardzo polecam google.
- // Jak rozumiesz wszystko to gratulacje, 10k samochodów, szybkie pieniądze i służbowy penis są blisko.
- // public - klasa jest publiczna; wszyscy mają do niej dostęp; lepsza nawet od tirówki bo płacić nie trzeba
- // class - no zgadnij
- // Main - nazwa klasy jest dowolna, ale zabroń mi ją nazwać Main
- public class Main {
- // static - metoda statyczna; wywoływana na poziomie KLASY, a nie INSTANCJI tej klasy
- // void - metoda nie zwraca żadnej wartości
- // main(String) - w tym przypadku nazwa metody (i jej parametr) ma znaczenie
- // String[] args - argumenty wywołania programu; tutaj nie będziemy ich używać
- public static void main(String[] args) {
- // System - klasa statyczna wbudowana w język java służąca do interakcji z systemem
- // out - statyczne pole klasy System, strumien wyjściowy na konsolę (obiekt klasy PrintStream)
- // print(String) - metoda klasy PrintStream; zwróć uwagę że nie jest ona statyczna
- System.out.print("Podaj rozmiar wektora: ");
- // Tworzymy nową zmienną typu Scanner o nazwie scanner, i przypisujemy do niej nową (new) instancje tej klasy.
- // System.in - obiekt klasy InputStream, wejście z konsoli. Podajemy go jako parametr konstruktora klasy Scanner
- Scanner scanner = new Scanner(System.in);
- // Tworzymy nową zmienną typu całkowitego o nazwie rozmiarWektora
- // Przypisujemy do niej wartość którą zwróci nam (return) metoda nextInt() obiektu scanner
- // Jeśli wszystko pójdzie zgodnie z planem, w zmiennej rozmiarWektora znajdzie się cyfra wpisana w konsolę
- int rozmiarWektora = scanner.nextInt();
- // Tworzymy zmienną typu int[] (tablica zmiennych całkowitych) o nazwie wektor1.
- // Przypisujemy do niej wartość, wywołując własną metodę napisaną poniżej.
- // Podajemy rozmiar wektora jako jej pierwszy parametr.
- // Jako drugi parametr podajemy instancję Scannera, żeby nie tworzyć nowej wewnątrz metody.
- int[] wektor1 = pobierzWektor(rozmiarWektora, scanner);
- // No zgadnij
- int[] wektor2 = pobierzWektor(rozmiarWektora, scanner);
- // Wywołujemy metodę close() obiektu scanner. Większość operacji związanych z wejściem/wyjsciem w javie
- // gdzieś jakieś obiekty zamyka. Po wywołaniu tej metody, ta konkretna instancja klasy Scanner nię będzie
- // już spełniała swojej funkcjonalności.
- scanner.close();
- // Tworzymy zmienną na nasz wynikowy iloczyn skalarny. Będziemy ją modyfikować wewnątrz pętli for.
- // Deklarujemy ją przed pętlą, tak aby była ona dostępna w każdym przebiegu pętli i po jej wykonaniu.
- // 0 jest domyślną wartością zmiennej typu int, ale nic nie stoi na przeszkodzie żeby dodać takie przypisanie
- // dla lepszej czytelności kodu.
- int iloczynSkalarny = 0;
- // Wyjaśnienie w metodzie pobierzWektor.
- // Taki sam rozmiar wektorów ułatwia nam tutaj pracę, szczególnie że iloczyn skalarny wykorzystuje wartości
- // z tych samych indeksów (pozycji) w obu wektorach
- for(int i = 0; i < rozmiarWektora; i++) {
- // Iloczyn skalarny dwóch wektorów to suma iloczynów odpowiadających składników tych wektorów
- // a1*b1 + a2*b2 + a3*b3 + ... + aN*bN
- // czyli tłumacząc z polskiego na nasze
- // wektor1[0]*wektor2[0] + wektor1[1]*wektor2[1] + ... + wektor1[rozmiar-1]*wektor2[rozmiar-1]
- // czyli tłumacząc z naszego na matematyczne
- // suma od i równego 0 do rozmiar-1 z wektor1[i]*wektor2[i]
- // czyli tłumacząc z matematycznego na komputerowe, ta własnie pętla
- // A += B oznacza dokładnie to samo co A = A + B
- iloczynSkalarny += wektor1[i] * wektor2[i];
- }
- wypiszWynik(iloczynSkalarny);
- }
- // private - metodę można wywołać tylko z wewnątrz klasy (w tym przypadku Main)
- // static - metoda jest statyczna; robimy to by móc użyć jej bezpośredni z poziomu metody statycznej main()
- // int[] - wartością zwracaną przez tą metodę jest tablica wartości całkowitych o dowolnym rozmiarze
- // pobierzWektor - nazwa metody
- // int rozmiar - parametr typu całkowitego o nazwie rozmiar
- // Scanner scanner - parametr typu Scanner o nazwie scanner
- private static int[] pobierzWektor(int rozmiar, Scanner scanner) {
- // Tworzymy zmienną typu int[] (tablica zmiennych typu całkowitego) o nazwie wektor
- // Przypisujemy do niej nową tablicę o podanym rozmiarze
- int[] wektor = new int[rozmiar];
- System.out.println("Podaj wartości wektora: ");
- // for - pętla typu for; wbrew pozorom, żadne z wyrażeń w nawiasie NIE JEST obowiązkowe, po prostu rzadko kiedy
- // istnieje potrzeba pozostawienia któregokolwiek z nich pustego w związku z instneniem pętli (do) while
- // int i = 0 - w tym miejscu zwykle deklaruje się zmienną iteracyjną czyli tak na prawde zwykłą zmienną, która
- // jest widoczna tylko wewnątz pętli
- // i < rozmiar - to jest warunek sprawdzany po każdym przebiegu pętli; pętla wykonuje się po raz kolejny wtedy
- // i tylko wtedy gdy ten warunek jest prawdziwy; jeśli zostawimy to pole puste, pętla będzie
- // nieskończona (chyba że użyjemy wewnątrz niej instrukcji break lub return)
- // i++ - zwiększenie wartości zmiennej i o jeden; technicznie możemy tu wstawić jakąkolwiek instrukcje, i będzie
- // się ona wykonywała po każdym przebiegu pętli, przed sptawdzeniem warunku kontynuacji
- for(int i = 0; i < rozmiar; i++) {
- // wektor[i] - i-ty element tablicy o nazwie wektor; przypisujemy mu kolejną wartość zczytaną z konsoli
- // ta funcja wywoła się rozmiar razy:
- // wektor[0] = zczytane z konsoli
- // wektor[1] = zczytane z konsoli
- // wektor[2] = zczytane z konsoli
- // ...
- // wektor[rozmiar-1] = zczytane z konsoli
- // rozmiar-1 ponieważ warunek i < rozmiar będzie fałszywy w przypadku gdy i == rozmiar
- // jest to zachowanie pożądane, poniważ tablica o wymiarze n jest indeksowana od 0 do n-1
- wektor[i] = scanner.nextInt();
- }
- return wektor;
- }
- private static wypiszWynik(int iloczynSkalarny) {
- System.out.println("Iloczyn skalarny podanych wektorów to: " + iloczynSkalarny);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement