Timkor

firAgain

Jan 4th, 2021 (edited)
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.34 KB | None | 0 0
  1. // додав стилю - це дуже важливий елемент.
  2. package com.company;
  3.  
  4. import java.util.Scanner;
  5.  
  6. public class Elka { // транслітерація не бестпрактіс, але тут норм.)
  7.    
  8.     public static void main(String[] args) {
  9.         Scanner scan = new Scanner(System.in);
  10.         int size, width, center; // краще в одну строку не перелічувати, можна щось не помітити, не все прокоментувати.
  11.         System.out.println("Elka size"); //  зазвичай висота ялинки без ніжки,
  12.         size = scan.nextInt();           // та можна і так
  13.  
  14.         if (size < 2) {
  15.             System.out.println("Too small. Enter size >=2");
  16.             return;
  17.         }
  18.         width = width(size);
  19.         center = (width / 2) + 1;
  20.         System.out.println("Width is - " + width); // не співпадає, ввів 5 отримав 9, фактично 11 у нижній гілці із зірок
  21.         System.out.println("Start on - " + center);
  22.         for (int i = 0; i <= size + 2; i++) {
  23.             if (i == 0) {
  24.                 centralLine(center); // норм, декомпозиція присутня, нижче мій варіант на основі вашого.
  25.             }
  26.             if (i > 0 && i < size) {
  27.                 mainLine(center, i, width);
  28.             }
  29.             if (i > 0 && i == size) {
  30.                 fullLine(width);
  31.             }
  32.             if (i > size) {
  33.                 centralLine(center);
  34.             }
  35.         }
  36.     }
  37.  
  38.     public static int width(int n) { // імена методам краще назначити дієсловами, тут getWidth  можна
  39.         int width = 1;
  40.         if (n == 1) {
  41.             return width;
  42.         } else { // післля ретерн елсе не обов'язковий
  43.             width = n + (n - 1);
  44.         }
  45.         return width; // наче можна спростити  до return n + (n - 1); весь метод?
  46.     }
  47.  
  48.     public static void centralLine(int center) { // дієслово допоможе писати та читати код як прозу
  49.         String crona = "";
  50.         for (int i = 0; i <= center; i++) {
  51.             if (i != center) {
  52.                 crona = crona + " ";
  53.             } else {
  54.                 crona = crona + "*";
  55.             }
  56.         }
  57.         System.out.println(crona);
  58.     }
  59.  
  60.     public static void mainLine(int center, int increment, int width) { // ох, не хочу туди..
  61.         String crona = "";
  62.         int start = center - increment;
  63.         int finish = center + increment;
  64.         for (int i = 0; i <= width + 1; i++) {
  65.             if (i != start && i != finish) {
  66.                 crona = crona + " ";
  67.             } else if (i == start || i == finish) {
  68.                 crona = crona + "*";
  69.             }
  70.         }
  71.         System.out.println(crona);
  72.     }
  73.  
  74.     public static void fullLine(int width) {
  75.         String crona = "";
  76.         for (int i = 0; i <= width + 1; i++) {
  77.             crona = crona + "*";
  78.         }
  79.         System.out.println(crona);
  80.     }
  81.  
  82. }
  83.  
  84.  
  85.  
  86.  
  87.  
  88. // ще один варіант на основі вашого для збільшення кута зору щодо декомпозиції алгоритму
  89.  
  90. package com.company;
  91.  
  92. import java.util.Scanner;
  93.  
  94. public class Elka {
  95.  
  96.     // метод повертає нову строку повторюючи строку стр нум разів
  97.     public static String getRepeatedString(String str, int num) {
  98.         String result = "";
  99.         for (int i = 0; i < num; i++) {
  100.             result += str;
  101.         }
  102.         return result;
  103.     }
  104.  
  105.     public static void main(String[] args) {
  106.         Scanner scan = new Scanner(System.in);
  107.         int size, width, center; // краще в одну строку не перелічувати, можна щось не помітити, не все прокоментувати.
  108.         System.out.println("Elka size"); // саме висота ялинки без ніжки, ім'я height було б однозначніше.
  109.         size = scan.nextInt();
  110.         int lowerBranch = size * 2 - 1; // ширша нижня гілка а значить пробілів до верхушки пів цієї гілки
  111.         int spaceNum = lowerBranch / 2; // кількість пробілів до верхівки, далі з кожним рядком -= 1
  112.                                         // // можна спростити до size - 1
  113.         int starNum = 1;                // кількість зірок на верхньому рядку, далі з кожним += 2
  114.         String currentSymbol = "";      // символ, що додається до строки-ялинки
  115.         String firStr = "";             // строка-ялинка. StringBuilder потім буде як кращий варіант;
  116.         // основний цикл по рядкам ялинки
  117.         for (int row = 0; row < size; row++) {
  118.             currentSymbol = " ";
  119.             firStr += getRepeatedString(currentSymbol, spaceNum); // пробіли зліва ялинки
  120.             firStr += "*"; // ліва зірка
  121.  
  122.             if (row == size - 1) {   // для останнього рядка
  123.                 currentSymbol = "*"; // виводимо всі зірки
  124.             }
  125.             firStr += getRepeatedString(currentSymbol, starNum - 2); // пробіли всередені ялинки
  126.  
  127.             currentSymbol = "*";     // права зірка або ж
  128.             if (row == 0) {          // на нульовому рядку
  129.                 currentSymbol = "";  // зірку - верхівку виводимо одну
  130.             }
  131.             firStr += currentSymbol + "\n"; // перевод рядка
  132.  
  133.             spaceNum -= 1;
  134.             starNum += 2;
  135.         }
  136.         int footHeight = 3; // ніжка
  137.         // for (int i = 0; i < footHeight; i++) { // не видалив закоментований цикл, шоб було наглядніше
  138.         firStr += getRepeatedString(getRepeatedString(" ", lowerBranch / 2) + "*\n", footHeight);
  139.         // }
  140.  
  141.         System.out.println(firStr); // виводимо всю ялинку
  142.     }
  143. }
Add Comment
Please, Sign In to add comment