2013-10-13 63 views
0

我的程序是將輸入從英文翻譯成莫爾斯碼,反之亦然。首先,它會提示用戶是否要輸入莫爾斯電碼或英文。之後,它將一個轉換爲另一個。我首先處理英文到摩爾斯電碼的翻譯。我使用含莫爾斯電碼字母此陣:用for循環翻譯輸入

String[] codes = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", ".---- ", "..--- ", "...-- ", "....- ", "..... ", "-.... ", "--... ", "---.. ", "----. ", "----- "}; 

翻譯,以摩爾斯電碼必須以一定的方式呈現。當然,英文字母中的每個字母都必須用莫爾斯電碼中的相應字符表示。每個角色必須用空格分開。但是,每個單詞必須用直線(|)分隔。標點和大寫是沒有必要的。這裏是一個例子來澄清:

輸入:這是一個測試。

輸出: - .... .. ... | .. ... | .- | - 。 ... -

我的代碼如下:

import javax.swing.JOptionPane; 

public class ProjectOne 
{ 
    public static void main (String[] args) 
    { 
     String decision = getString ("Will you be typing in English or Morse Code?"); 
     String english = "english"; 
     String morse = "morse"; 
     String[] codes = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", ".---- ", "..--- ", "...-- ", "....- ", "..... ", "-.... ", "--... ", "---.. ", "----. ", "----- ", "| "}; 
     char[] letters = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' '}; 

     if (decision.equalsIgnoreCase(morse)) 
     { 
      //Translate to English here 
     } 
     else if (decision.equalsIgnoreCase(english)) 
     { 
      String input = getString ("Enter a phrase to be translated to Morse Code:"); 
      input = input.toUpperCase(); 

      for (int n = 0; n < input.length(); n++) 
      { 
       char ch = input.charAt(n); 
       for (int i = 0; i < 26; i++) 
       { 
        if (ch == letters[i]) 
        { 
         String newch = Character.toString(ch); 
         System.out.print(codes[i]); 
        } 
       } 
      } 
     } 
     else 
     { 
      System.out.println("Invalid Input - Type 'English' or 'Morse'"); 
     } 
    } 

    public static String getString(String paramString) 
    { 
     String str = JOptionPane.showInputDialog(paramString); 
     return str; 
    } 
} 

我的問題是,摩爾斯電碼翻譯似乎沒有 「|」每個詞之間的分隔符。我嘗試在包含英文字母的數組末尾放置一個空格字符,並在包含摩爾斯碼字符的數組末尾添加一個「|」字符串,認爲for循環會像其他任何其他字符一樣拾取它字符,但翻譯顯示在單詞之間有空格。我能做些什麼來解決這個問題?

回答

1

有兩個問題:

1)你codetable是無效的。代碼有37個elemets而字母有27個

2)for循環不檢查FOLL codetable: for (int i = 0; i < 26; i++) 使用類似for (int i = 0; i < codes.length; i++)

4

問題是,你是在for循環使用magic number

for (int i = 0; i < 26; i++) 

,但如果你在最後加一個空格,則數組的大小而變化,以27

你可以使用更維護的解決方案,例如:

for (int i = 0; i < letters.length; ++i) 

,甚至更好,用一個Map來存儲您的編纂。例如:

Map<Character, String> code = new HashMap<Character, String>(); 
code.put('a', ".-"); 
+0

+1的建議,而不是地圖。 –

+0

使用HashMap轉換其他方向很困難,或者重複數據是必需的。但你說得對,這兩個列表並不理想。我現在有建議。 – Daniel

+0

你可以使用兩個'HashMap'或者有一個自定義的'Codify'對象類(它可以基本上是'Pair '類似的東西)並且遍歷它(而不是有兩個不能用於封裝的非耦合數組) – Jack