Professional Documents
Culture Documents
Спрінтове завдання 5 для студентів
Спрінтове завдання 5 для студентів
Задачі схожі, результат їх роботи (рішення) - візуалізація фігури "лінія", але різного
розміру. Тому, строго говорячи, задачі різні (бо розмір фігур різний), але в
загальному вони утворюють одне сімейство розв’язків: фігуру "лінія". Якщо б була
поставлена задача вивести в консоль фігуру "прямокутник" зірочками, то розв'язок
цієї задачі вже не відносився б до сімейства розв'язків попередньої задачі про
"лінію".
Отже, відмінність в розв'язку даних двох задач задачі полягає в різних розмірах
лінії. При цьому тип фігур залишається незмінний, тому алгоритм розв'язку
однаковий.
Рядки коду 3-5 та 9-11 - ідентичні, окрім цифр 6 та 10, які регулюють довжину лінії.
Можна зробити висновок, що наведений код містить надлишковість, яка полягає в
"майже" ідентичних блоках коду 3-5 та 9-11
робити виклик цього методу. Але в даному випадку код "майже" однаковий, окрім
одного значення - розміру лінії (кількості "зірочек" в циклі). Що робити? Робити два
різних методи drawLine1 та drawLine2 - це не вихід, бо код залишиться з
надлишковістю. Вихід один - застосувати метод із вхідним параметром, який буде
керувати довжиною виводимої лінії. Часто слово "вхідний" опускають і говорять
просто "метод з параметром". Параметр - це змінна, додана до коду цього методу
в певному місці, яка приймає різні значення, і таким чином дозволяє змінювати
"масштаби" розв’язків.
Для даного прикладу параметр отримав назву lineWidth (довжина лінії). lineWidth -
це змінна, яка для вирішення кожної з задач приймає різні значення: для
першої 6, для другої 10. Зверніть увагу що в р.3 здійснюється декларування цієї
змінної і присвоєння їй значення 6, а в р.11 - тільки присвоєння значення 10 (без
декларування). Так вимагає синтаксис цього коду.
Також зверніть увагу: коли код вирішення задачі параметризований, він вже
однаковий в обох розв'язках. Тобто, рядки 5-6 та 12-14 - містять один і той самий
код. І вже цей код можна спокійно винести в окремий метод. Але цей метод
потребує указання значення цього параметру, тобто змінної lineWidth. Це треба
правильно зробити, згідно синтаксису запису таких методів в Java.
В точках виклику цього методу з методу main в якості актуального параметру (або
значення параметру) використовуються,в першому виклику цілочисельне значення
6, в другому виклику - число 10, яке також має тип int.
Кожний виклик методу приводить до виконання коду тілка методу (рядки 11-13),
але із різними значеннями змінної параметру lineWidth.
Зверніть увагу не те, що ви два раза з методу main викликали метод drawLine,
передаючи йому різні значення параметру. Фактично, ви з методу main керували
роботою коду в методі drawLine, при різних значеннях параметру lineWidth. Але
окрім довжини лінії, можна керувати і іншими характеристиками лінії. Наприклад,
замість "*" малювати лінію іншим символом, заданим як параметр методу.
Подивіться на код нижче, там це реалізовано за допомогою нової версії методу
drawLine, яка оперує вже двома параметрами. Ми назвемо це метод drawLine2.
4
Для цього ми параметризували той код, який відповідає за вивід символа "*". Це
зроблено так: замість літерального указання символу "*" у методі printl(), ми
вказуємо змінну sym, яка виступає параметром даного методу, див. р.12 методу
drawLine2. Також ми додали в заголовок декларування параметрму з іменем sym
та типом даних String (бо ми будемо зберігати в змінній sysm один символ, який є
текстовим рядком довжиною 1 ). І під час виклику такого методу окрім довжини
лінії, задаємо текстовий символ, який будемо малювати лінії:
р.3: малює лінію методом drawLine2, довжиною 6 та символом "#";
р.5: малює лінію методом drawLine2, довжиною 11 та символом "-";
р.7: малює лінію методом drawLine2, довжиною 3 та символом "+".
Розробимо додаткову версію методу по виводу лінії, але додамо два параметри,
які керують зображенням першого та останнього символів.
5
2. Перевантажені методи
Перевантажені методи-це такі методи, які мають одне і те саме ім'я, але різну
кількість параметрів в заголовку методу.
Методи drawLine3, drawLine2 та drawLine по суті виконують одну і ту саму задачу-
малюють лінію певного розміру. Чи вони відрізняються- різною кількістю вхідних
параметрів, див. рисунок нижче. Тип повернення в них один і той самий, void
(детально про тип повернення в наступному розділі). Тому ми можемо імена цих
методів зробити однаковими, як показано на рисунку.
6
Має змінитись і код методу main-методи, які викликаються мають вже однакове
ім'я drawLine, але різну кількість та тип вхідних параметрів. Саме по кількості і типу
вхідних параметрів компілятор Java, під час компіляції, визначає, який метод
треба викликати.
для методів
Math.<class constant>
нам потрібні:
1) функції (метод) обчислення сінусу;
2) функція (метод) обчислення квадратного кореня;
3) константа "пі".
Звісно, змінні x та y мають містити якісь значення, щоб таке обчислення вдалось
здійснити. Повний код програми може бути таким:
Перехід на новий рядок у виводу (символ "\n" у рядку коду 10) здійснено задля
зручності виводу, щоб не розтягувати вивід на всю ширину екрану.
Слід звернути увагу, що параметром для sin, cos, та tan є кут в радіанах.
Значення, яке повертається від методів asin, acos, та
atan, є кут в радіанах, в діапазоні від до . Один градус дорівнює
радіан.
типах int, long, float, або double. Наприклад, max(3.4, 5.0) повертає 5.0, та min(3, 2)
повертає 2.
Але особливе місце серед усіх методів займає метод random(). Цей метод
застосовується для генерації довільних чисел типу double які дорівнюють або
більше за 0.0 але менше за 1.0 (0 <= Math.random() < 1.0). Цей метод є дуже
корисним в задачах моделювання процесів та комп'ютерних іграх. Для генерації
довільних чисел в різних діапазонах, застосовуються такі вирази:
На базі цього методу можна розробити метод, який буде імітувати підкидування
ігрового кубіка. Кубік має 6 граней, на кожній з них нанесена відповідна кількість
точок. Результатом підкидання кубіка вважається значення тіє
ї грані, яка буде зверху. Кожна грань "випадає" з рівною імовірністю. Отже,
можливий спектр "випавших" граней, описаний числами, буде такий: [1,2,3,4,5,6],
або [1;6]
y0 = 2000 - 0 = 1999
x = 1999 + 1999/4 - 1999/100 + 1999/400 = 2483
m0 = 2 + 12*1 - 2 = 12
d0 = (13 + 2483 + (31*12) / 12) mod 7 = 2528 mod 7 = 1 (Monday)
Здійсніть тестування методу на даті 14 лютого 2000 року, та поточній (на день
розробки програми).
,
де
— маса Землі,