摩尔斯电码转换使用Java [英] Morse Code Conversion using Java

查看:193
本文介绍了摩尔斯电码转换使用Java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在Java中学习hashmaps和2D数组。我们有一个任务,因为有一个扫描仪接受一个字符串并将其转换为莫尔斯电码。我们使用的代码基于一个充满if语句的方法,但我想了解如何使用列表,hashmaps或2D数组来做类似的事情。我的代码如下:

  import java.util。*; 

public class MorseConversion
{


public static void main(String [] args)
{

扫描仪userInput =新扫描仪(System.in);
System.out.println(请输入一个短语来转换为莫尔斯电码:);
String userString = userInput.nextLine();
System.out.println();
System.out.println(stringConvert(userString));



public static String stringConvert(String userString)
{
String currentChar;
String getMorseChar;
String convertedString =;

for(int i = 0; i< userString.length(); i ++)
{
//获取字符i位置
currentChar = userString。 charAt(i)+;

//将字符转换为莫尔斯码
getMorseChar = convert(currentChar);

//用|分隔单词符号
if(getMorseChar.equals())
{
convertedString = convertedString +|;
}

else
{
// concat转换后的字母
convertedString = convertedString + getMorseChar;

//在每个字母之间添加一个空格
if(!getMorseChar.equals())
{
convertedString = convertedString +;
}
}
}

return convertedString;

$ b public static String convert(String toEncode)
{
String morse = toEncode;

if(toEncode.equalsIgnoreCase(a))
morse =.-;
if(toEncode.equalsIgnoreCase(b))
morse =-...;
if(toEncode.equalsIgnoreCase(c))
morse =-.-。;
if(toEncode.equalsIgnoreCase(d))
morse = - ..;
if(toEncode.equalsIgnoreCase(e))
morse =。;
if(toEncode.equalsIgnoreCase(f))
morse =..-。;
if(toEncode.equalsIgnoreCase(g))
morse = - 。;
if(toEncode.equalsIgnoreCase(h))
morse =....;
if(toEncode.equalsIgnoreCase(i))
morse =..;
if(toEncode.equalsIgnoreCase(j))
morse =.---;
if(toEncode.equalsIgnoreCase(k))
morse =-.-;
if(toEncode.equalsIgnoreCase(l))
morse =.- ..;
if(toEncode.equalsIgnoreCase(m))
morse = - ;
if(toEncode.equalsIgnoreCase(n))
morse = - 。;
if(toEncode.equalsIgnoreCase(o))
morse =---;
if(toEncode.equalsIgnoreCase(p))
morse =.--。;
if(toEncode.equalsIgnoreCase(q))
morse =--.-;
if(toEncode.equalsIgnoreCase(r))
morse =.-。;
if(toEncode.equalsIgnoreCase(s))
morse =...;
if(toEncode.equalsIgnoreCase(t))
morse = - ;
if(toEncode.equalsIgnoreCase(u))
morse =..-;
if(toEncode.equalsIgnoreCase(v))
morse =...-;
if(toEncode.equalsIgnoreCase(w))
morse =.--;
if(toEncode.equalsIgnoreCase(x))
morse =-..-;
if(toEncode.equalsIgnoreCase(y))
morse =-.--;
if(toEncode.equalsIgnoreCase(z))
morse = - ..;
if(toEncode.equalsIgnoreCase(0))
morse =-----;
if(toEncode.equalsIgnoreCase(1))
morse =.----;
if(toEncode.equalsIgnoreCase(2))
morse =..---;
if(toEncode.equalsIgnoreCase(3))
morse =...--;
if(toEncode.equalsIgnoreCase(4))
morse =....-;
if(toEncode.equalsIgnoreCase(5))
morse =.....;
if(toEncode.equalsIgnoreCase(6))
morse =-....;
if(toEncode.equalsIgnoreCase(7))
morse =--...;
if(toEncode.equalsIgnoreCase(8))
morse =--- ..;
if(toEncode.equalsIgnoreCase(9))
morse =----。;
if(toEncode.equalsIgnoreCase(。))
morse =。-.-;
if(toEncode.equalsIgnoreCase(,))
morse =--..--;
if(toEncode.equalsIgnoreCase(?))
morse =..-- ..;

返回莫尔斯;
}

}

我严格执行此操作好奇心。我已经让我感到震惊,像这样的冗余是一个巨大的禁忌。提前致谢!

解决方案

更简单的方法是使用初始化程序将您的字符加载到哈希映射中信是关键。然后,当你循环输入字符串中的字符时,你只需在你的课程开始时做

做类似这样的事情:

  private static HashMap< String,String> codes = new HashMap< String,String>(); 
static {
codes.put(a,.-);
codes.put(b,-...);
bla bla bla

code
$ b

然后在你的循环中你有



  //将字符转换为莫尔斯码
getMorseChar = convert(currentChar);

您将拥有

  getMorseChar = code.get(currentChar.toLowerCase()); 

没有更多讨厌的elseif声明。

I'm trying to learn about hashmaps and 2D arrays in Java. We have an assignment due to have a scanner that accepts a string and converts it to morse code. The code we're using is based of a method full of if statements, but I want to learn how I would do something like this using lists, hashmaps, or 2D arrays. My code is as follows:

import java.util.*;

public class MorseConversion 
{


public static void main(String[] args) 
{

    Scanner userInput = new Scanner(System.in); 
    System.out.println("Please enter a phrase to convert to morse code: ");
    String userString = userInput.nextLine();
    System.out.println("");
    System.out.println(stringConvert(userString));
}


public static String stringConvert(String userString)
{
    String currentChar;
    String getMorseChar;
    String convertedString = "";

    for (int i = 0; i < userString.length(); i++)
    {
        //Get character at i position
        currentChar = userString.charAt(i) + "";  

        //convert character to morse code
        getMorseChar = convert(currentChar);

        //seperate words with the | symbol
        if (getMorseChar.equals(" "))
        {
            convertedString = convertedString + "  |  ";
        } 

        else 
        {
            //concat the converted letter
            convertedString = convertedString + getMorseChar;

            //Add a space between each letter
            if (!getMorseChar.equals(" ")) 
            {
                convertedString = convertedString + " ";
            }   
        }           
    }

    return convertedString;

}
 public static String convert (String toEncode)  
    {  
        String morse = toEncode;  

        if (toEncode.equalsIgnoreCase("a"))  
            morse = ".-";  
        if (toEncode.equalsIgnoreCase("b"))  
            morse = "-...";  
        if (toEncode.equalsIgnoreCase("c"))  
            morse = "-.-.";  
        if (toEncode.equalsIgnoreCase("d"))  
            morse = "-..";  
        if (toEncode.equalsIgnoreCase("e"))  
            morse = ".";  
        if (toEncode.equalsIgnoreCase("f"))  
            morse = "..-.";  
        if (toEncode.equalsIgnoreCase("g"))  
            morse = "--.";  
        if (toEncode.equalsIgnoreCase("h"))  
            morse = "....";  
        if (toEncode.equalsIgnoreCase("i"))  
            morse = "..";  
        if (toEncode.equalsIgnoreCase("j"))  
            morse = ".---";  
        if (toEncode.equalsIgnoreCase("k"))  
            morse = "-.-";  
        if (toEncode.equalsIgnoreCase("l"))  
            morse = ".-..";  
        if (toEncode.equalsIgnoreCase("m"))  
            morse = "--";  
        if (toEncode.equalsIgnoreCase("n"))  
            morse = "-.";  
        if (toEncode.equalsIgnoreCase("o"))  
            morse = "---";  
        if (toEncode.equalsIgnoreCase("p"))  
            morse = ".--.";  
        if (toEncode.equalsIgnoreCase("q"))  
            morse = "--.-";  
        if (toEncode.equalsIgnoreCase("r"))  
            morse = ".-.";  
        if (toEncode.equalsIgnoreCase("s"))  
            morse = "...";  
        if (toEncode.equalsIgnoreCase("t"))  
            morse = "-";  
        if (toEncode.equalsIgnoreCase("u"))  
            morse = "..-";  
        if (toEncode.equalsIgnoreCase("v"))  
            morse = "...-";  
        if (toEncode.equalsIgnoreCase("w"))  
            morse = ".--";  
        if (toEncode.equalsIgnoreCase("x"))  
            morse = "-..-";  
        if (toEncode.equalsIgnoreCase("y"))  
            morse = "-.--";  
        if (toEncode.equalsIgnoreCase("z"))  
            morse = "--..";  
        if (toEncode.equalsIgnoreCase("0"))  
            morse = "-----";  
        if (toEncode.equalsIgnoreCase("1"))  
            morse = ".----";  
        if (toEncode.equalsIgnoreCase("2"))  
            morse = "..---";  
        if (toEncode.equalsIgnoreCase("3"))  
            morse = "...--";  
        if (toEncode.equalsIgnoreCase("4"))  
            morse = "....-";  
        if (toEncode.equalsIgnoreCase("5"))  
            morse = ".....";  
        if (toEncode.equalsIgnoreCase("6"))  
            morse = "-....";  
        if (toEncode.equalsIgnoreCase("7"))  
            morse = "--...";  
        if (toEncode.equalsIgnoreCase("8"))  
            morse = "---..";  
        if (toEncode.equalsIgnoreCase("9"))  
            morse = "----.";  
        if (toEncode.equalsIgnoreCase("."))  
            morse = ".-.-";  
        if (toEncode.equalsIgnoreCase(","))  
            morse = "--..--";  
        if (toEncode.equalsIgnoreCase("?"))  
            morse = "..--..";  

        return morse;  
    }  

 }

I'm doing this strictly out of curiosity. I have had it pounded into my head that redundancy like this is a huge no-no. Thanks in advance!

解决方案

The easier way to do it is to have an initializer that loads your characters into a hash map using the letter as the key. Then as your looping the characters in your input string your simply doing

at the beginning of you class do something like this:

private static HashMap<String, String> codes = new HashMap<String, String>();
    static{
        codes.put("a", ".-");
        codes.put("b", "-...");
        bla bla bla
    }

then in your loop where you have

//convert character to morse code
        getMorseChar = convert(currentChar);

you would have

getMorseChar = code.get(currentChar.toLowerCase());

no more nasty elseif statement.

这篇关于摩尔斯电码转换使用Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆