SHOW:
|
|
- or go back to the newest paste.
1 | import java.util.Scanner; | |
2 | ||
3 | // Jak nie rozumiesz któregokolwiek słowa poniżej, bardzo polecam google. | |
4 | // Jak rozumiesz wszystko to gratulacje, 10k samochodów, szybkie pieniądze i służbowy penis są blisko. | |
5 | ||
6 | // public - klasa jest publiczna; wszyscy mają do niej dostęp; lepsza nawet od tirówki bo płacić nie trzeba | |
7 | // class - no zgadnij | |
8 | // Main - nazwa klasy jest dowolna, ale zabroń mi ją nazwać Main | |
9 | public class Main { | |
10 | ||
11 | // static - metoda statyczna; wywoływana na poziomie KLASY, a nie INSTANCJI tej klasy | |
12 | // void - metoda nie zwraca żadnej wartości | |
13 | // main(String) - w tym przypadku nazwa metody (i jej parametr) ma znaczenie | |
14 | // String[] args - argumenty wywołania programu; tutaj nie będziemy ich używać | |
15 | public static void main(String[] args) { | |
16 | ||
17 | // System - klasa statyczna wbudowana w język java służąca do interakcji z systemem | |
18 | // out - statyczne pole klasy System, strumien wyjściowy na konsolę (obiekt klasy PrintStream) | |
19 | // print(String) - metoda klasy PrintStream; zwróć uwagę że nie jest ona statyczna | |
20 | System.out.print("Podaj rozmiar wektora: "); | |
21 | ||
22 | // Tworzymy nową zmienną typu Scanner o nazwie scanner, i przypisujemy do niej nową (new) instancje tej klasy. | |
23 | // System.in - obiekt klasy InputStream, wejście z konsoli. Podajemy go jako parametr konstruktora klasy Scanner | |
24 | Scanner scanner = new Scanner(System.in); | |
25 | ||
26 | // Tworzymy nową zmienną typu całkowitego o nazwie rozmiarWektora | |
27 | // Przypisujemy do niej wartość którą zwróci nam (return) metoda nextInt() obiektu scanner | |
28 | // Jeśli wszystko pójdzie zgodnie z planem, w zmiennej rozmiarWektora znajdzie się cyfra wpisana w konsolę | |
29 | int rozmiarWektora = scanner.nextInt(); | |
30 | ||
31 | // Tworzymy zmienną typu int[] (tablica zmiennych całkowitych) o nazwie wektor1. | |
32 | // Przypisujemy do niej wartość, wywołując własną metodę napisaną poniżej. | |
33 | // Podajemy rozmiar wektora jako jej pierwszy parametr. | |
34 | // Jako drugi parametr podajemy instancję Scannera, żeby nie tworzyć nowej wewnątrz metody. | |
35 | int[] wektor1 = pobierzWektor(rozmiarWektora, scanner); | |
36 | ||
37 | // No zgadnij | |
38 | int[] wektor2 = pobierzWektor(rozmiarWektora, scanner); | |
39 | ||
40 | // Wywołujemy metodę close() obiektu scanner. Większość operacji związanych z wejściem/wyjsciem w javie | |
41 | // gdzieś jakieś obiekty zamyka. Po wywołaniu tej metody, ta konkretna instancja klasy Scanner nię będzie | |
42 | // już spełniała swojej funkcjonalności. | |
43 | scanner.close(); | |
44 | ||
45 | // Tworzymy zmienną na nasz wynikowy iloczyn skalarny. Będziemy ją modyfikować wewnątrz pętli for. | |
46 | // Deklarujemy ją przed pętlą, tak aby była ona dostępna w każdym przebiegu pętli i po jej wykonaniu. | |
47 | // 0 jest domyślną wartością zmiennej typu int, ale nic nie stoi na przeszkodzie żeby dodać takie przypisanie | |
48 | // dla lepszej czytelności kodu. | |
49 | int iloczynSkalarny = 0; | |
50 | ||
51 | // Wyjaśnienie w metodzie pobierzWektor. | |
52 | // Taki sam rozmiar wektorów ułatwia nam tutaj pracę, szczególnie że iloczyn skalarny wykorzystuje wartości | |
53 | // z tych samych indeksów (pozycji) w obu wektorach | |
54 | for(int i = 0; i < rozmiarWektora; i++) { | |
55 | ||
56 | // Iloczyn skalarny dwóch wektorów to suma iloczynów odpowiadających składników tych wektorów | |
57 | // a1*b1 + a2*b2 + a3*b3 + ... + aN*bN | |
58 | // czyli tłumacząc z polskiego na nasze | |
59 | // wektor1[0]*wektor2[0] + wektor1[1]*wektor2[1] + ... + wektor1[rozmiar-1]*wektor2[rozmiar-1] | |
60 | // czyli tłumacząc z naszego na matematyczne | |
61 | // suma od i równego 0 do rozmiar-1 z wektor1[i]*wektor2[i] | |
62 | // czyli tłumacząc z matematycznego na komputerowe, ta własnie pętla | |
63 | // A += B oznacza dokładnie to samo co A = A + B | |
64 | iloczynSkalarny += wektor1[i] * wektor2[i]; | |
65 | } | |
66 | ||
67 | - | System.out.println("Iloczyn skalarny podanych wektorów to: " + iloczynSkalarny); |
67 | + | wypiszWynik(iloczynSkalarny); |
68 | } | |
69 | ||
70 | // private - metodę można wywołać tylko z wewnątrz klasy (w tym przypadku Main) | |
71 | // static - metoda jest statyczna; robimy to by móc użyć jej bezpośredni z poziomu metody statycznej main() | |
72 | // int[] - wartością zwracaną przez tą metodę jest tablica wartości całkowitych o dowolnym rozmiarze | |
73 | // pobierzWektor - nazwa metody | |
74 | // int rozmiar - parametr typu całkowitego o nazwie rozmiar | |
75 | // Scanner scanner - parametr typu Scanner o nazwie scanner | |
76 | private static int[] pobierzWektor(int rozmiar, Scanner scanner) { | |
77 | ||
78 | // Tworzymy zmienną typu int[] (tablica zmiennych typu całkowitego) o nazwie wektor | |
79 | // Przypisujemy do niej nową tablicę o podanym rozmiarze | |
80 | int[] wektor = new int[rozmiar]; | |
81 | ||
82 | System.out.println("Podaj wartości wektora: "); | |
83 | ||
84 | // for - pętla typu for; wbrew pozorom, żadne z wyrażeń w nawiasie NIE JEST obowiązkowe, po prostu rzadko kiedy | |
85 | // istnieje potrzeba pozostawienia któregokolwiek z nich pustego w związku z instneniem pętli (do) while | |
86 | // int i = 0 - w tym miejscu zwykle deklaruje się zmienną iteracyjną czyli tak na prawde zwykłą zmienną, która | |
87 | // jest widoczna tylko wewnątz pętli | |
88 | // i < rozmiar - to jest warunek sprawdzany po każdym przebiegu pętli; pętla wykonuje się po raz kolejny wtedy | |
89 | // i tylko wtedy gdy ten warunek jest prawdziwy; jeśli zostawimy to pole puste, pętla będzie | |
90 | // nieskończona (chyba że użyjemy wewnątrz niej instrukcji break lub return) | |
91 | // i++ - zwiększenie wartości zmiennej i o jeden; technicznie możemy tu wstawić jakąkolwiek instrukcje, i będzie | |
92 | // się ona wykonywała po każdym przebiegu pętli, przed sptawdzeniem warunku kontynuacji | |
93 | for(int i = 0; i < rozmiar; i++) { | |
94 | ||
95 | // wektor[i] - i-ty element tablicy o nazwie wektor; przypisujemy mu kolejną wartość zczytaną z konsoli | |
96 | // ta funcja wywoła się rozmiar razy: | |
97 | // wektor[0] = zczytane z konsoli | |
98 | // wektor[1] = zczytane z konsoli | |
99 | // wektor[2] = zczytane z konsoli | |
100 | // ... | |
101 | // wektor[rozmiar-1] = zczytane z konsoli | |
102 | // rozmiar-1 ponieważ warunek i < rozmiar będzie fałszywy w przypadku gdy i == rozmiar | |
103 | // jest to zachowanie pożądane, poniważ tablica o wymiarze n jest indeksowana od 0 do n-1 | |
104 | wektor[i] = scanner.nextInt(); | |
105 | } | |
106 | ||
107 | return wektor; | |
108 | } | |
109 | ||
110 | private static wypiszWynik(int iloczynSkalarny) { | |
111 | System.out.println("Iloczyn skalarny podanych wektorów to: " + iloczynSkalarny); | |
112 | } | |
113 | } |