iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
Mobile Development

[Android Studio & Spring boot 30天挑戰]系列 第 4

[Android Studio & Spring boot 30天挑戰] Day04 - 摩斯轉換(上)

  • 分享至 

  • xImage
  •  

今天我要介紹的功能是摩斯密碼轉換,這個功能能夠將文字訊息轉換成摩斯密碼,同時也能將摩斯密碼解碼回原始文字。
摩斯密碼是一種歷史悠久的編碼方式,它以一系列的點(.)和線(-)來表示不同的字母和符號,曾被廣泛應用於電報通信和傳輸。實現這樣的功能並不複雜,現在就開始介紹程式碼。

流程圖

https://ithelp.ithome.com.tw/upload/images/20230816/20150369X8DcPdWQsI.png

UI畫面

看到右上角的按鈕是用來切換模式的,並且右邊的圖中多了四顆按紐從左到右分別是,

摩斯密碼短音、用來隔開單詞、摩斯密碼長音、用來隔開英文字母

https://ithelp.ithome.com.tw/upload/images/20230816/20150369E1YtqU4t5x.pnghttps://ithelp.ithome.com.tw/upload/images/20230816/20150369nglhvq2zoh.png

程式碼

首先我先加入一個簡單的Map用來儲存相對應的摩斯密碼或英文字母

public Map<String, String> getMorseCodeList() {

        // Basic Latin alphabet
        morseCode.put("a", ".-");
        morseCode.put("b", "-...");
        morseCode.put("c", "-.-.");
        morseCode.put("d", "-..");
        morseCode.put("e", ".");
        morseCode.put("f", "..-.");
        morseCode.put("g", "--.");
        morseCode.put("h", "....");
        .....
        return morseCode;
}
    public Map<String, String> getEnglishToMorseCode() {
        
        morseCodeReversed.put(".-", "a");
        morseCodeReversed.put("-...", "b");
        morseCodeReversed.put("-.-.", "c");
        morseCodeReversed.put("-..", "d");
        morseCodeReversed.put(".", "e");
        morseCodeReversed.put("..-.", "f");
        morseCodeReversed.put("--.", "g");
        morseCodeReversed.put("....", "h");
        morseCodeReversed.put("..", "i");
        morseCodeReversed.put(".---", "j");
        morseCodeReversed.put("-.-", "k");
        ......
        return morseCodeReversed;
}

前面這四個按鈕的程式碼都是比較簡單的,每當按下其中一個按鈕就會把相對的符號加入到StringBuilder。

/**dash點擊*/
    private void dashIconClicked(View view) {
        morseCodeBuilder.append("-");
        input_editText.setText(morseCodeBuilder);
    }

    /**slash點擊*/
    private void slashIconClicked(View view) {
        morseCodeBuilder.append("/");
        input_editText.setText(morseCodeBuilder);
    }

    /**dot點擊*/
    private void dotIconClicked(View view) {
        morseCodeBuilder.append(".");
        input_editText.setText(morseCodeBuilder);
    }

    /**blank點擊*/
    private void blankIconClicked(View view) {
        morseCodeBuilder.append(" ");
        input_editText.setText(morseCodeBuilder);
    }

接下來是刪除按鈕,這裡是每當按下刪除就會把 StringBuilder 最後一個符號刪掉,然後下面的 isChange 是用來判斷是轉摩斯還是轉英文,如果是轉摩斯就不會有按鈕是直接用輸入框,所以按刪除時就會先getText()再刪除。

/**delete點擊*/
    private void deleteIconClicked(View view) {
        if(morseCodeBuilder.length() != 0) {
            morseCodeBuilder.deleteCharAt(morseCodeBuilder.length() - 1);
            input_editText.setText(morseCodeBuilder);
        }
        if(!isChange) {
            StringBuilder text = new StringBuilder();
            text.append(input_editText.getText().toString());
            if(text.length() != 0) {
                input_editText.setText(text.deleteCharAt(text.length() - 1));
                input_editText.setSelection(text.length());
            }
        }
    }

先介紹一半,明天會講解輸出的邏輯和其他使用到的小功能。/images/emoticon/emoticon13.gif


上一篇
[Android Studio & Spring boot 30天挑戰] Day03 - Morse Code 主畫面
下一篇
[Android Studio & Spring boot 30天挑戰] Day05 - 摩斯轉換(下)
系列文
[Android Studio & Spring boot 30天挑戰]30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言