2012-10-21 291 views
2

我一直在嘗試創建一個莫爾斯電碼翻譯器,並且遇到了一些問題。它編譯,但是當我嘗試運行它時,它只會詢問你想要翻譯的方式的第一個問題,而不是你想要翻譯的內容。我知道我的第一個功能非常低效。我也使用Input.getString,我不認爲它是標準的,但它基本上允許你輸入一個字符串。莫爾斯電碼翻譯器

這是我的代碼:使用==

public class MorseCodeJavaProgram { 
    public static void morse(String s3){ 
     int letters [ ] = new int [ 26 ]; 
     for (int num = 0; num < s3.length(); num++){ 
       switch (s3.charAt(num)){ 
        case 'a': 
         System.out.print(".- "); 
         break; 
        case 'b': 
         System.out.print("-… "); 
         break; 
        case 'c': 
         System.out.print("-.-. "); 
         break; 
        case 'd': 
         System.out.print("-.. "); 
         break; 
        case 'e': 
         System.out.print(". "); 
         break; 
        case 'f': 
         System.out.print("..-. "); 
         break; 
        case 'g': 
         System.out.print("--. "); 
         break; 
        case 'h': 
         System.out.print("…. "); 
         break; 
        case 'i': 
         System.out.print(".. "); 
         break; 
        case 'j': 
         System.out.print(".--- "); 
         break; 
        case 'k': 
         System.out.print("-.- "); 
         break; 
        case 'l': 
         System.out.print(".-.. "); 
         break; 
        case 'm': 
         System.out.print("-- "); 
         break; 
        case 'n': 
         System.out.print("-. "); 
         break; 
        case 'o': 
         System.out.print("--- "); 
         break; 
        case 'p': 
         System.out.print(".--. "); 
         break; 
        case 'q': 
         System.out.print("--.- "); 
         break; 
        case 'r': 
         System.out.print(".-. "); 
         break; 
        case 's': 
         System.out.print("... "); 
         break; 
        case 't': 
         System.out.print("- "); 
         break; 
        case 'u': 
         System.out.print("..- "); 
         break; 
        case 'v': 
         System.out.print("...- "); 
         break; 
        case 'w': 
         System.out.print(".-- "); 
         break; 
        case 'x': 
         System.out.print("-..- "); 
         break; 
        case 'y': 
         System.out.print("-.-- "); 
         break; 
        case 'z': 
         System.out.print("--.. "); 
         break; 
        case ' ': 
         System.out.print(" | "); 
         break; 
       } 

      } 
    } 
    public static void toEnglish(String s1){ 
    String english [ ] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "y", "z", " " }; 
    String morse [ ] = { ".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", "…. ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", "| " }; 

     for (int num = 0; num < s1.length(); num++){ 
      if (s1.charAt (num) == ' '){ 
       for (int num2 = num; num2 < s1.length(); num2++){ 
        if (s1.charAt (num2++) == ' '){ 
         for (int num3 = 0; num < 26; num3++){ 
          if (s1.substring(num++, num2 + 2) == (morse [ num3 ])){ 
           System.out.print(english [ num3 ]); 
          } 
         } 
        } 

       } 


      } 
     } 
    } 

    public static void main(String [] args){ 
     String s2 = Input.getString("To Morse or From Morse"); 
     if (s2 == "From Morse"){ 
      String s1 = Input.getString("Please type a phrase in English"); 
      toEnglish(" " + s1 + " "); 
     } 
     if (s2 == "To Morse"){ 
      String s3 = Input.getString("Please type a phrase in Morse Code"); 
      morse(s3); 
     } 
    } 
    } 
+0

我不知道爲什麼我的代碼想出了兩次遺憾 – user1690013

+1

在比較文本字符串,我使用'string.equalsIgnoreCase(anotherString)的粉絲;' –

回答

4

你比較字符串。在Java中,== compares references, not content

改變他們使用.equals(),像這樣:

if (s2 == "From Morse"){ 

應該是:

if (s2.equals("From Morse")){ 

,當然還有,這應該適用於您的其他字符串比較(S)爲好。 (您的char比較原樣。)

+0

謝謝,但現在我得到一個關於訪問數組-1索引的錯誤 – user1690013

+0

您可能想要關閉此線程(對答案一側的選中標記)並打開一個新線程。我只會發布'toEnglish'方法,併發布完整的錯誤輸出。你的循環肯定需要清理一下,但通過評論我可能做得更多。 – Eric

1

您正在比較字符串值與==運算符。但==運算符只檢查對象引用是否相等。

if (s2 == "From Morse"){ 
      String s1 = Input.getString("Please type a phrase in English"); 
      toEnglish(" " + s1 + " "); 
     } 

,而不是試圖

if ("From Morse".equals(s2)){ 
       String s1 = Input.getString("Please type a phrase in English"); 
       toEnglish(" " + s1 + " "); 
+0

使用'「來自Morse」.equals'是s2.equals(「From Morse」)的最優選擇。 – cwallenpoole

+0

@cwallenpoole這是爲什麼? [這個問題及其答案](http://stackoverflow.com/questions/9888508/string-equals-argument-ordering)似乎另有說明。 – Eric

+1

如果s2爲null,那麼將發生空指針異常。 –