Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.         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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement