Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // додав стилю - це дуже важливий елемент.
- package com.company;
- import java.util.Scanner;
- public class Elka { // транслітерація не бестпрактіс, але тут норм.)
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- int size, width, center; // краще в одну строку не перелічувати, можна щось не помітити, не все прокоментувати.
- System.out.println("Elka size"); // зазвичай висота ялинки без ніжки,
- size = scan.nextInt(); // та можна і так
- if (size < 2) {
- System.out.println("Too small. Enter size >=2");
- return;
- }
- width = width(size);
- center = (width / 2) + 1;
- System.out.println("Width is - " + width); // не співпадає, ввів 5 отримав 9, фактично 11 у нижній гілці із зірок
- System.out.println("Start on - " + center);
- for (int i = 0; i <= size + 2; i++) {
- if (i == 0) {
- centralLine(center); // норм, декомпозиція присутня, нижче мій варіант на основі вашого.
- }
- if (i > 0 && i < size) {
- mainLine(center, i, width);
- }
- if (i > 0 && i == size) {
- fullLine(width);
- }
- if (i > size) {
- centralLine(center);
- }
- }
- }
- public static int width(int n) { // імена методам краще назначити дієсловами, тут getWidth можна
- int width = 1;
- if (n == 1) {
- return width;
- } else { // післля ретерн елсе не обов'язковий
- width = n + (n - 1);
- }
- return width; // наче можна спростити до return n + (n - 1); весь метод?
- }
- public static void centralLine(int center) { // дієслово допоможе писати та читати код як прозу
- String crona = "";
- for (int i = 0; i <= center; i++) {
- if (i != center) {
- crona = crona + " ";
- } else {
- crona = crona + "*";
- }
- }
- System.out.println(crona);
- }
- public static void mainLine(int center, int increment, int width) { // ох, не хочу туди..
- String crona = "";
- int start = center - increment;
- int finish = center + increment;
- for (int i = 0; i <= width + 1; i++) {
- if (i != start && i != finish) {
- crona = crona + " ";
- } else if (i == start || i == finish) {
- crona = crona + "*";
- }
- }
- System.out.println(crona);
- }
- public static void fullLine(int width) {
- String crona = "";
- for (int i = 0; i <= width + 1; i++) {
- crona = crona + "*";
- }
- System.out.println(crona);
- }
- }
- // ще один варіант на основі вашого для збільшення кута зору щодо декомпозиції алгоритму
- package com.company;
- import java.util.Scanner;
- public class Elka {
- // метод повертає нову строку повторюючи строку стр нум разів
- public static String getRepeatedString(String str, int num) {
- String result = "";
- for (int i = 0; i < num; i++) {
- result += str;
- }
- return result;
- }
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- int size, width, center; // краще в одну строку не перелічувати, можна щось не помітити, не все прокоментувати.
- System.out.println("Elka size"); // саме висота ялинки без ніжки, ім'я height було б однозначніше.
- size = scan.nextInt();
- int lowerBranch = size * 2 - 1; // ширша нижня гілка а значить пробілів до верхушки пів цієї гілки
- int spaceNum = lowerBranch / 2; // кількість пробілів до верхівки, далі з кожним рядком -= 1
- // // можна спростити до size - 1
- int starNum = 1; // кількість зірок на верхньому рядку, далі з кожним += 2
- String currentSymbol = ""; // символ, що додається до строки-ялинки
- String firStr = ""; // строка-ялинка. StringBuilder потім буде як кращий варіант;
- // основний цикл по рядкам ялинки
- for (int row = 0; row < size; row++) {
- currentSymbol = " ";
- firStr += getRepeatedString(currentSymbol, spaceNum); // пробіли зліва ялинки
- firStr += "*"; // ліва зірка
- if (row == size - 1) { // для останнього рядка
- currentSymbol = "*"; // виводимо всі зірки
- }
- firStr += getRepeatedString(currentSymbol, starNum - 2); // пробіли всередені ялинки
- currentSymbol = "*"; // права зірка або ж
- if (row == 0) { // на нульовому рядку
- currentSymbol = ""; // зірку - верхівку виводимо одну
- }
- firStr += currentSymbol + "\n"; // перевод рядка
- spaceNum -= 1;
- starNum += 2;
- }
- int footHeight = 3; // ніжка
- // for (int i = 0; i < footHeight; i++) { // не видалив закоментований цикл, шоб було наглядніше
- firStr += getRepeatedString(getRepeatedString(" ", lowerBranch / 2) + "*\n", footHeight);
- // }
- System.out.println(firStr); // виводимо всю ялинку
- }
- }
Add Comment
Please, Sign In to add comment