【问题标题】:Ascii Art String to Character conversionAscii 艺术字符串到字符的转换
【发布时间】:2018-12-16 14:33:53
【问题描述】:

我有一个作为 Ascii 艺术设计的输入,我希望根据输入的 ascii 艺术打印真实字符。 我已经创建了以下程序,但我不知道它有什么问题。

     import java.util.*;

 class Ascii {
    static final char START_CHAR = 'a';
    static final char END_CHAR = 'z';
    static final char DELIMITER_CHAR = END_CHAR + 1;

    public static String printchar(char c){
       int l =5,w=4,start=0,end=0;
        String v="";
       c=Character.toLowerCase(c);

       String[] rowArray = new String[5];
       rowArray[0]=" #  ##   ## ##  ### ###  ## # # ###  ## # # #   # # ###  #  ##   #  ##   ## ### # # # # # # # # # # ### ###"; 
       rowArray[1]="# # # # #   # # #   #   #   # #  #    # # # #   ### # # # # # # # # # # #    #  # # # # # # # # # #   #   #"; 
       rowArray[2]="### ##  #   # # ##  ##  # # ###  #    # ##  #   ### # # # # ##  # # ##   #   #  # # # # ###  #   #   #   ##"; 
       rowArray[3]="# # # # #   # # #   #   # # # #  #  # # # # #   # # # # # # #    ## # #   #  #  # # # # ### # #  #  #      ";  
       rowArray[4]="# # ##   ## ##  ### #    ## # # ###  #  # # ### # # # #  #  #     # # # ##   #  ###  #  # # # #  #  ###  # ";   

      if(START_CHAR <= c && c <= END_CHAR)
      {
        start = (c-START_CHAR)* w;
        end = start+w;
      }

      else
      {
          start=103;end=107;

      }

         for (int i = 0; i < l; i++) {
              v = v+"\n"+rowArray[i].substring(start,end);
          }
    return v;

    }
}

public class Solution {
public static void main(String args[]) {

    String b = Ascii.printchar('A');
    System.out.println(b);  
    char c = A.scanChar(b);
    System.out.println("Corresponding Letter ="+c);
        }
}

class A{

static char scanChar(String s)
{
    Ascii.
  Map<String,Character> mapping= new HashMap<>(26);
      mapping.put(" # \n# #\n###\n# #\n# #\n", 'A');
      mapping.put("## \n# #\n## \n# #\n##\n", 'B');
      mapping.put(" ##\n#  \n#  \n#  \n ##\n", 'C');
      mapping.put("## \n# #\n# #\n# #\n## \n", 'D');
      mapping.put("###\n#  \n## \n#  \n###\n", 'E');
      mapping.put(" ###\n#  \n## \n#  \n#   \n", 'F');
      mapping.put("###\n  #\n ##\n   \n # \n", '?');
      System.out.println(mapping.get('A'));
     return mapping.get(s);


    }

    }

有人可以指出错误,当我将字符串与地图值进行比较时,我得到了空值?

【问题讨论】:

    标签: java arrays string hashmap ascii


    【解决方案1】:

    get() 方法的 docs 指定

    返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。

    您将 ASCII 艺术作为 key 而不是 value。因此,当您尝试获取“A”的键(没有)时,它会返回 null。

    变化:

      mapping.put(" # \n# #\n###\n# #\n# #\n", 'A');
      mapping.put("## \n# #\n## \n# #\n##\n", 'B');
      mapping.put(" ##\n#  \n#  \n#  \n ##\n", 'C');
      mapping.put("## \n# #\n# #\n# #\n## \n", 'D');
      mapping.put("###\n#  \n## \n#  \n###\n", 'E');
      mapping.put(" ###\n#  \n## \n#  \n#   \n", 'F');
      mapping.put("###\n  #\n ##\n   \n # \n", '?');
    

    收件人:

      mapping.put('A', " # \n# #\n###\n# #\n# #\n");
      mapping.put('B' , "## \n# #\n## \n# #\n##\n");
      mapping.put('C', " ##\n#  \n#  \n#  \n ##\n");
      mapping.put('D', "## \n# #\n# #\n# #\n## \n");
      mapping.put('E', "###\n#  \n## \n#  \n###\n");
      mapping.put('F', " ###\n#  \n## \n#  \n#   \n");
      mapping.put('?', "###\n  #\n ##\n   \n # \n");
    

    【讨论】:

      【解决方案2】:
       import java.util.*;
      
       class Ascii {
          static final char START_CHAR = 'a';
          static final char END_CHAR = 'z';
          static final char DELIMITER_CHAR = END_CHAR + 1;
      
          public static String printchar(char c){
             int l =5,w=4,start=0,end=0;
              String v="";
             c=Character.toLowerCase(c);
      
             String[] rowArray = new String[5];
             rowArray[0]=" #  ##   ## ##  ### ###  ## # # ###  ## # # #   # # ###  #  ##   #  ##   ## ### # # # # # # # # # # ### ###"; 
             rowArray[1]="# # # # #   # # #   #   #   # #  #    # # # #   ### # # # # # # # # # # #    #  # # # # # # # # # #   #   #"; 
             rowArray[2]="### ##  #   # # ##  ##  # # ###  #    # ##  #   ### # # # # ##  # # ##   #   #  # # # # ###  #   #   #   ##"; 
             rowArray[3]="# # # # #   # # #   #   # # # #  #  # # # # #   # # # # # # #    ## # #   #  #  # # # # ### # #  #  #      ";  
             rowArray[4]="# # ##   ## ##  ### #    ## # # ###  #  # # ### # # # #  #  #     # # # ##   #  ###  #  # # # #  #  ###  # ";   
      
            if(START_CHAR <= c && c <= END_CHAR)
            {
              start = (c-START_CHAR)* w;
              end = start+w;
            }
      
            else
            {
                start=103;end=107;
      
            }
      
               for (int i = 0; i < l; i++) {
                    v = v+"\n"+rowArray[i].substring(start,end);
                }
          return v;
      
          }
      }
      
      public class Solution {
      public static void main(String args[]) {
      
          String b = Ascii.printchar('Z');
          System.out.println(b);  
          System.out.println();
          char c = A.scanChar(b);
          System.out.println("Corresponding Letter = "+c);
              }
      }
      
      class A{
      
      static char scanChar(String s)
      {
          //s= s.trim();
          Character key=null;
        Map<Character,String> mapping= new HashMap<>();
        mapping.put('A',"\n #  \n# # \n### \n# # \n# # ");
        mapping.put('B',"\n##  \n# # \n##  \n# # \n##  ");
        mapping.put('C',"\n ## \n#   \n#   \n#   \n ## ");
        mapping.put('D',"\n##  \n# # \n# # \n# # \n##  ");
        mapping.put('E',"\n### \n#   \n##  \n#   \n### ");
        mapping.put('F',"\n### \n#   \n##  \n#   \n#   ");
        mapping.put('G',"\n ## \n#   \n# # \n# # \n ## ");
        mapping.put('H',"\n# # \n# # \n### \n# # \n# # ");
        mapping.put('I',"\n### \n #  \n #  \n #  \n### ");
        mapping.put('J',"\n ## \n  # \n  # \n# # \n #  ");
        mapping.put('K',"\n# # \n# # \n##  \n# # \n# # ");
        mapping.put('L',"\n#   \n#   \n#   \n#   \n### ");
        mapping.put('M',"\n# # \n### \n### \n# # \n# # ");
        mapping.put('N',"\n### \n# # \n# # \n# # \n# # ");
        mapping.put('O',"\n #  \n# # \n# # \n# # \n #  ");
        mapping.put('P',"\n##  \n# # \n##  \n#   \n#   ");
        mapping.put('Q',"\n #  \n# # \n# # \n ## \n  # ");
        mapping.put('R',"\n##  \n# # \n##  \n# # \n# # ");
        mapping.put('S',"\n ## \n#   \n #  \n  # \n##  ");
        mapping.put('T',"\n### \n #  \n #  \n #  \n #  ");
        mapping.put('U',"\n# # \n# # \n# # \n# # \n### ");
        mapping.put('V',"\n# # \n# # \n# # \n# # \n #  ");
        mapping.put('W',"\n# # \n# # \n### \n### \n# # ");
        mapping.put('X',"\n# # \n# # \n #  \n# # \n# # ");
        mapping.put('Y',"\n# # \n# # \n #  \n #  \n #  ");
        mapping.put('Z',"\n### \n  # \n #  \n#   \n### ");
           /*char[] ct = new char[s.length()];
           ct= s.toCharArray();
           String l = "\n# # \n# # \n### \n# # \n# # ";
           for(char c:ct)
           System.out.print(c);
      
           System.out.println();
           System.out.println("Length of L ="+l.length());
           System.out.println("Length of S ="+s.length());
           System.out.println("Equality ="+s.equals(l));
           */
           for(Map.Entry entry: mapping.entrySet())
           {
               if(s.equals(entry.getValue()))
               {
                key = (char)entry.getKey();
                break;
               }
               else{
                   key='?';
               }
           }
      
           return key;
      
      }
      }
      

      终于解决了。

      【讨论】:

        猜你喜欢
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 2010-12-09
        相关资源
        最近更新 更多