2016-02-28 129 views
0

我知道這種問題在整個StackOverFlow中很常見,但是我的問題更具體。在我的程序中,我使用main()方法,英文到莫爾斯方法工作正常,以及我遇到麻煩的莫爾斯到英語方法。莫爾斯電碼到英文:字符類型不能與字符串類型比較

public static void MorsetoString(String Morse, char [] Alphabet, String [] MorseCode){ 

    StringBuffer English = new StringBuffer(); 
    for(int i=0;i < Morse.length(); i++){ 
     if (Morse.charAt(i) != ' '){ 
       for (int j = 0; j < MorseCode.length; j ++){ 
        if (Morse.charAt(i) == MorseCode[j]){ 
         English.append(MorseCode[j]); 
         English.append(" "); 
        } 
       } 
     } 

    } 



} 

這些是作爲參數在這個方法的數組:

char Alphabet [] = {'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', ' '}; 
String MorseCode [] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "..-", ".--", "-..-", "-.--", "--..", "|"}; 

的代碼沒有完全做到,因爲我必須添加語句時Morse.charAt(i) == ' ',但我主要有這部分麻煩。

此代碼的問題是,當我說if (Morse.charAt(i) == MorseCode[j]),我比較字符型變量字符串類型,所以程序不編譯。我認爲我的代碼在邏輯上總體上工作,但是有什麼方法可以修改代碼,以便將兩者進行比較?確切的錯誤信息是「

+0

莫爾斯參數的值是什麼樣的我懷疑你只是比較每個莫爾斯碼的第一個字符源代碼,在你的'MorseCode'數組中使用整個莫爾斯碼。 –

+2

請注意''Morse.charAt(i)'返回一個字符。如果字符串'Morse'包含'。-.-',那麼'charAt(0)'只返回單個點。您的代碼將以「e」和「o」字符串的形式解碼任何一串點和破折號。例如,輸入'-.-。 --- ..「你可以將它解碼爲」oeoe ooo ee「。你需要重新思考你的方法。 –

+0

作爲吉姆說,如果沒有停止呼叫您的莫爾斯參數..它可以分析許多不同的結果 – Saltuk

回答

1

你不需要輸入字符串的每一個字符比較比較只是當你的空間' ',因爲空間共分摩爾斯電碼字符:

static char alphabet[] = {'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', ' '}; 
static String morseCode[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "..-", ".--", "-..-", "-.--", "--..", "|"}; 

public static void decodeMorse(String morse){ 
    StringBuilder english = new StringBuilder(); 

    int codeLength = 0; 
    for(int i=0; i<morse.length();i++){ 

     String code = null; 
     // if we met ' ', we can get previous code 
     if(morse.charAt(i)==' ' && codeLength>0){ 
      code = morse.substring(i-codeLength, i); 
      codeLength=0; 
     }else 
     // when we reached end of string we have to get previous code 
     if(i==morse.length()-1 && codeLength>0){ 
      code = morse.substring(i-codeLength, morse.length()); 
     } 
     else{ 
      codeLength++; 
     } 

     // if you got the code, find alphabet char for it 
     if(code!=null){ 
      for(int j=0; j<alphabet.length; j++){ 
       if(code.equals(morseCode[j])){ 
        english.append(alphabet[j]); 
       } 
      } 
     } 

    } 

    System.out.println(english); 
} 

而且,你不因爲在英文中不需要字母間的空格

+0

我不明白codeLength變量的意義。你能解釋一下你的每條if語句在for循環中做什麼嗎?我不太清楚我是否理解每個人的功能。 – LightFlicker

+0

噢好的沒關係。我看到了他們的觀點。謝謝! – LightFlicker

+0

codeLenth是空格之間的字符數。不用謝。 –