Advertisement
SavinaD

Untitled

Oct 21st, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.51 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Figure {
  6.  
  7.     public static void main(String[] args) {
  8.         Scanner scanner = new Scanner(System.in);
  9.         int n = Integer.parseInt(scanner.nextLine());
  10.  
  11.         int width = 2 * n - 1;
  12.         int height = n / 2 + 4;
  13.  
  14.         System.out.printf("@%1$s@%1$s@%n", doMagic(" ", (width - 3) / 2));
  15.         /*
  16.         %1$s - означава, че се взима първата(1) променлива, която е String - (в случая е целият метод doMagic)
  17.         Без това означение същия код трябваше да се изпише като:
  18.         System.out.printf("@%s@%s@%n", doMagic(" ", (width - 3) / 2), doMagic(" ", (width - 3) / 2));
  19.         Чрез %1$s използваме една променлива на две места, без да се налага да я преписваме два пъти и това спестява излишно копиране на кода
  20.          */
  21.         int k = 0;
  22.         int count = n - 3;
  23.         for (int i = 0, b = 0, c = -1; i < height - 4; i++, b++, c += 2) {
  24. /*
  25. Това е един for цикъл, който върти три променливи едновременно ( i, b, c).
  26. На всеки оборот на цикъла всяка променлива се променя по различен начин - i++ ; b++; c+=2
  27. Цикълът свършва, когато i<height-4 стане равно на false
  28. Това е нещо различно от вложените for цикли, където за един оборот на външния цикъл се извърта целия вътрешен!!
  29. Това НЕ Е вложен цикъл, а цикъл, който върти по няколко променливи наведнъж.
  30.  */
  31.             System.out.printf("*%1$s%2$s%5$s%4$s%2$s%5$s%1$s%n",
  32.                     doMagic(".", b) + "*", //1
  33.                     doMagic(" ", count), //2
  34.                     doMagic(".", b), //3
  35.                     (i != 0 && i <= n / 2 - 1) ? doMagic(".", c) + "*" : doMagic(".", c),  //4
  36.                     i != n/2 -1 ? "*":"");  //5
  37.             k = 2;
  38.             count -= k;
  39.             /*
  40.             %1$s - взима първия стринг - doMagic(".", b) + "*"
  41.             %2$s - взима втория стринг - doMagic(" ", count)
  42.             %3$s - взима третия стринг -  doMagic(".", b)
  43.             и тн.
  44.  
  45.             (i != 0 && i <= n / 2 - 1) ? doMagic(".", c) + "*" : doMagic(".", c) - тернарен оператор
  46.             Проверява дали условието (i != 0 && i <= n / 2 - 1) е true или false
  47.             Ако е true, изпълнява кода след знака ? - т.е. doMagic(".", c) + "*"
  48.             Ако е false, изпълнява кода след знака : - т.е. doMagic(".", c)
  49.              */
  50.  
  51.         }
  52.  
  53.  
  54.         for (int i = 0; i < 3; i++) {
  55.             String line = i == 0 ? String.format("*%1$s%2$s*.*%2$s%1$s*",
  56.                     doMagic(".",n/2),
  57.                     doMagic("*",(width - (n +5)) / 2)) :
  58.                     doMagic("*",width);
  59.             System.out.println(line);
  60.             /*
  61.             Тернарният оператор се използва, когато трябва да assign-ем стойност на дадена променлива
  62.             String line = i == 0 ? String.format("*%1$s%2$s*.*%2$s%1$s*",.........)
  63.             Проверяваме дали условието i==0  е вярно и ако е, на променливата String line слагаме стойността, която връща метода след знака ?
  64.             Ако не е вярно String line получава стойността, която връща метода, написан след знака :
  65.  
  66.             String.format() е метод, който действа точно като System.out.printf()
  67.             Разликата е, че .printf() директно отпечатва резултата на конзолата,
  68.             докато String.format() се използва, за да запише резултата в стринг променлива - в случая в String line
  69.              */
  70.         }
  71.     }
  72.  
  73.     static String doMagic(String text, int count) {
  74.         StringBuilder sb = new StringBuilder();
  75.         while (count-- > 0) sb.append(text);
  76.         return sb.toString();
  77.  
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement