1

Тема: multiLine symbol

Всім привіт, недавно знову вирішив попрактикуватись в Java бо забуваю.
Рішив зробити щось просте, що колись планував але так і не робив. (сугубо для себе, і все одним файлом щоб не засмічувати проект де тренуюсь).
Проблема - не змінюється мапа, а я її хочу змінювати щоб "малювати" символи плюсиком, або любим іншим знаком.
Дякую.

Прихований текст
package com.sometest23;

import java.util.HashMap;
import java.util.Map;

public class PrintBigText{
    static Map<Character, String[]> mySymbol = MySymbol.getMap();
    public static void main(String[] args){
        System.out.println("Some test with new map ");
        String[] A = mySymbol.get('A');
        String[] H = mySymbol.get('H');
        String[] J = mySymbol.get('J');
        String[] B = mySymbol.get('B');
        String[] V = mySymbol.get('V');
        String[] I = mySymbol.get('I');
        String[] K = mySymbol.get('K');
        String[] T = mySymbol.get('T');
        String[] O = mySymbol.get('O');
        String[] R = mySymbol.get('R');
        System.out.println("alphabet size = "+mySymbol.size());
        System.out.println("Some test for single symbol");
        print(A);
        print(B);
        System.out.println("Some test for word symbol");
        print(A, B, B, A);
        print(A, H, O, J);
        print(V, I, K, T, O, R);
        System.out.println("My map is : ");
        print(mySymbol.values().toArray(String[][]::new));
        MySymbol.replaceMap('X');
        mySymbol = MySymbol.getMap();
        System.out.println("alphabet size = "+mySymbol.size());
        print(mySymbol.values().toArray(String[][]::new));
        V = mySymbol.get('V');
        I = mySymbol.get('I');
        K = mySymbol.get('K');
        T = mySymbol.get('T');
        O = mySymbol.get('O');
        R = mySymbol.get('R');
        print(V, I, K, T, O, R);
    }
    static void print(String[]... full) {
        for(int j=0; j<6; j++) {
            for(int i=0; i<full.length; i++) 
                System.out.print(full[i][j]);
            System.out.println();
        }
        System.out.println();
    }
    static class MySymbol {
        private static Map<Character, String[]> map = new HashMap<>();
        private static char currentValue = '+';

        public static Map<Character, String[]> getMap() {
            if(map.size() != 26) fillMap();
            return map;
        }
        private static void fillMap() {
            for(int i='A', j=0; i<='Z';i++, j++) 
                map.put(Character.valueOf((char)i),template[j].split("\n"));
        }
        public static void replaceMap(char ch) {
            for(String s : template) s.replace(currentValue,ch);
            currentValue = ch;
            fillMap();
        }
        private static String[] template = {"""
    
      +   \s
     + +  \s
    +++++ \s
    +   + \s
    +   + \s""", """
    
    ++++  \s
    +   + \s
    ++++  \s
    +   + \s
    +++++ \s""","""
                   
     +++  \s
    +   + \s
    +     \s
    +   + \s
     +++  \s""","""
                   
    ++++  \s
    +  ++ \s
    +   + \s
    +   + \s
    ++++  \s""","""
                   
    +++++ \s
    +     \s
    ++++  \s
    +     \s
    +++++ \s""","""
                   
    +++++ \s
    +     \s
    ++++  \s
    +     \s
    +     \s""","""
                   
     ++++ \s
    +     \s
    +  ++ \s
    +   + \s
     ++++ \s""","""
                   
    +   + \s
    +   + \s
    +++++ \s
    +   + \s
    +   + \s""","""
                   
    +++ \s
     +  \s
     +  \s
     +  \s
    +++ \s""","""
                   
      ++ \s
       + \s
       + \s
    +  + \s
     ++  \s""","""
                   
    +  + \s
    + +  \s
    ++   \s
    + +  \s
    +  + \s""","""
                   
    +     \s
    +     \s
    +     \s
    +   + \s
    +++++ \s""","""
                   
    ++   ++ \s
    + + + + \s
    +  +  + \s
    +     + \s
    +     + \s""","""
                   
    +   + \s
    ++  + \s
    + + + \s
    +  ++ \s
    +   + \s""","""
                   
     +++  \s
    +   + \s
    +   + \s
    +   + \s
     +++  \s""","""
                   
    ++++  \s
    +   + \s
    ++++  \s
    +     \s
    +     \s""","""
                   
     ++++  \s
    +    + \s
    +  + + \s
    +   ++ \s
     +++ + \s""","""
                   
    ++++  \s
    +   + \s
    ++++  \s
    +  +  \s
    +   + \s""","""
                   
     ++++ \s
    +     \s
     +++  \s
        + \s
    ++++  \s""","""
                   
    +++++ \s
      +   \s
      +   \s
      +   \s
      +   \s""","""
                   
    +   + \s
    +   + \s
    +   + \s
    +   + \s
     +++  \s""","""
                   
    +   + \s
    +   + \s
    +   + \s
     + +  \s
      +   \s""","""
                   
    +     + \s
    +  +  + \s
    + ++ +  \s
    ++ ++   \s
    +  +    \s""","""
                   
    +   +  \s
     + +   \s
      +    \s
     + +   \s
    +   +  \s""","""
                   
    +   + \s
    +   + \s
     + +  \s
      +   \s
      +   \s""","""
                   
    +++++ \s
       +  \s
      +   \s
     +    \s
    +++++ \s"""            
        };
    }
}
console :


Some test with new map
alphabet size = 26
Some test for single symbol

  +   
+ +   
+++++ 
+   + 
+   + 


++++   
+   + 
++++   
+   + 
+++++ 

Some test for word symbol

  +    ++++   ++++     +   
+ +   +   +  +   +   + +   
+++++  ++++   ++++   +++++ 
+   +  +   +  +   +  +   + 
+   +  +++++  +++++  +   + 


  +    +   +   +++     ++ 
+ +   +   +  +   +     + 
+++++  +++++  +   +     + 
+   +  +   +  +   +  +  + 
+   +  +   +   +++    ++   


+   +  +++  +  +  +++++   +++   ++++   
+   +   +   + +     +    +   +  +   + 
+   +   +   ++      +    +   +  ++++   
+ +    +   + +     +    +   +  +  +   
  +    +++  +  +    +     +++   +   + 

My map is :

  +    ++++    +++   ++++   +++++  +++++   ++++  +   +  +++    ++  +  +  +      ++   ++  +   +   +++   ++++    ++++   ++++    ++++  +++++  +   +  +   +  +     +  +   +   +   +  +++++ 
+ +   +   +  +   +  +  ++  +      +      +      +   +   +      +  + +   +      + + + +  ++  +  +   +  +   +  +    +  +   +  +        +    +   +  +   +  +  +  +   + +    +   +     +   
+++++  ++++   +      +   +  ++++   ++++   +  ++  +++++   +      +  ++    +      +  +  +  + + +  +   +  ++++   +  + +  ++++    +++     +    +   +  +   +  + ++ +     +      + +     +   
+   +  +   +  +   +  +   +  +      +      +   +  +   +   +   +  +  + +   +   +  +     +  +  ++  +   +  +      +   ++  +  +       +    +    +   +   + +   ++ ++     + +      +     +     
+   +  +++++   +++   ++++   +++++  +       ++++  +   +  +++   ++   +  +  +++++  +     +  +   +   +++   +       +++ +  +   +  ++++     +     +++     +    +  +     +   +     +    +++++ 

alphabet size = 26

  +    ++++    +++   ++++   +++++  +++++   ++++  +   +  +++    ++  +  +  +      ++   ++  +   +   +++   ++++    ++++   ++++    ++++  +++++  +   +  +   +  +     +  +   +   +   +  +++++ 
+ +   +   +  +   +  +  ++  +      +      +      +   +   +      +  + +   +      + + + +  ++  +  +   +  +   +  +    +  +   +  +        +    +   +  +   +  +  +  +   + +    +   +     +   
+++++  ++++   +      +   +  ++++   ++++   +  ++  +++++   +      +  ++    +      +  +  +  + + +  +   +  ++++   +  + +  ++++    +++     +    +   +  +   +  + ++ +     +      + +     +   
+   +  +   +  +   +  +   +  +      +      +   +  +   +   +   +  +  + +   +   +  +     +  +  ++  +   +  +      +   ++  +  +       +    +    +   +   + +   ++ ++     + +      +     +     
+   +  +++++   +++   ++++   +++++  +       ++++  +   +  +++   ++   +  +  +++++  +     +  +   +   +++   +       +++ +  +   +  ++++     +     +++     +    +  +     +   +     +    +++++ 


+   +  +++  +  +  +++++   +++   ++++   
+   +   +   + +     +    +   +  +   + 
+   +   +   ++      +    +   +  ++++   
+ +    +   + +     +    +   +  +  +   
  +    +++  +  +    +     +++   +   +

2

Re: multiLine symbol

P.S. Як тут редагувати пости?
потрібно було код в спойлер + консоль тут некрасива вийшла.

3

Re: multiLine symbol

готово
трохи не той цикл(був для читання, завжди забуваю)
та метод заміни замінює та повертає нову стрічку, стара залишається.

4

Re: multiLine symbol

Тут вистачило би 1 класа бігтекст з конструктором від рядка і методом принт.

5

Re: multiLine symbol

ur_naz написав:

Тут вистачило би 1 класа бігтекст з конструктором від рядка і методом принт.

Можна трохи коду? щоб краще зрозуміти вашу думку. (на жаль тут, на форумі вцілому, взагалі мало коду).

Типу клієнт без шаблону кидає мені масив(або рядок і я його потім сплічу) і я просто його друкую? Так це не уніфіковано + йому треба щось придумовувати..

6

Re: multiLine symbol

Навіщо тобі чужий код, пиши свій. Матричний принтер, гуглі. Кожен символ це матриця. Це ж базові речі...

7

Re: multiLine symbol

ur_naz, а ви в курсі, що таке пасивна агресія і чому вона вважається поганою? У вашому віці вже час знати.

8

Re: multiLine symbol

vitek написав:

Проблема - не змінюється мапа

vitek написав:
if(map.size() != 26) fillMap();

Ось ця перевірка не дає мапі змінитися.

Подякували: colin200x1

9

Re: multiLine symbol

koala написав:
vitek написав:

Проблема - не змінюється мапа

vitek написав:
if(map.size() != 26) fillMap();

Ось ця перевірка не дає мапі змінитися.

Прихований текст

Дякую за відповідь, це мотивує більше кодити та продукує більше контенту на україномовному форумі.

Насправді ні, проблема була в методі replace та циклі.
Ця стрічка це просто оптимізація, мапа створюється та повертається один раз, а далі по ключу змінюю значення не міняючи шаблон. Доробив того ж вечора, потрібно було відійти і повернутись зі свіжим поглядом/головою.

10

Re: multiLine symbol

змінив на

public static void replaceMap(char ch) {
            for(int i=0; i<template.length; i++)
                template[i] = template[i].replace(currentValue,ch);
            currentValue = ch;
            fillMap();
        }
Подякували: koala1

11

Re: multiLine symbol

ur_naz написав:

Навіщо тобі чужий код, пиши свій. Матричний принтер, гуглі. Кожен символ це матриця. Це ж базові речі...

Не знаю що значить чужий код, якщо ви про мої слова Типу клієнт без шаблону кидає мені масив, то клієнтом мається на увазі той хто "сидить в мейні" та визиває по "API/(з далека)" методи get(), print()..
Не знаю про матричний принтер, але якщо не звертати увагу що все в одному класі(я це обгрунтував), то він виглядить більш-менш нормально. Я можу зберігати будь-який шаблон в файлі, і не тільки для алфавіту(де я брав i='A' до i<='Z'), але потрібно щоб була однакова висота (в моєму випадку "магічне число" 6). Це можна вирішити тим що формат(висота+діапазон) будуть в назві файла. Щоправда це додасть трохи роботи - парсити назву файла(шаблон якого хочеш використовувати) + читати та сплітити(це я ще не придумав) файл.
П.С. більше коду! тим більше якщо це базові речі.