2015-10-12 56 views
0

這個java代碼是將英文轉換成莫爾斯電碼。將英文轉換成MorseCode

當用戶輸入一個哨兵字符$時,該程序將終止。在輸入每個字符串後,程序將顯示其等價的莫爾斯碼,在字符和字之間留有空白(ø)。

EG。你好,世界。輸出應爲...ø.ø.- ..ø.- ..ø---ø.--ø---ø.-。ø.- ..ø-..

我的代碼有一些問題。 1.我不知道在用戶輸入ø時應該在哪裏放置$來終止程序; 2,輸出是正確的,但總是與結束(O),因爲System.out.print(code[variable] + "ø");

這裏是我的代碼:

public class Morse{ 
public static void main (String [] args) 
{ 
    Scanner englishtomorse = new Scanner(System.in); 
    System.out.println ("Please enter an original sentence in English."); 
    english = englishtomorse.nextLine(); 
    String str = englishtoMorse(english); 
    System.out.println(str); 
} 

public static String englishtoMorse(String english) 
{ 
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
    String code[] = {"._", "_...", "_._.", "_..",".",".._.","__.", "....", 
     "..", ".___", "_._", "._..", "__","_ .", "___", ".__.", "__._", "._.", 
     "...", "_", ".._", "..._", ".__", "_.._", "_.__", "__.."}; 
    english = english.toUpperCase(); 
    for(int xyz = 0; xyz < english.length(); xyz++) 
    { 
     char letter = english.charAt(xyz); 
     if (letter == ' ') 
     { 
      System.out.print ("ø"); 
      continue; 
     } 
     for(int variable = 0; variable < alphabet.length(); variable++) 
     { 
      if(alphabet.charAt(variable) == letter) 
      { 
       System.out.print(code[variable] + "ø"); 
       break; 
      } 
     } 
    } 
    return " "; 
} 
+0

您可能希望使用'-'而不是'_',以便您更輕鬆地識別破折號。 –

+0

你可以用'System.out.print(代碼[letter - 'A'] +「ø」)替換你的''for'循環;'不編碼Java一段時間......你可能需要輸入字母 - '一個'int,不確定。 –

回答

1

您的代碼有問題,你應該知道的。

  1. 看一看Sun/Oracle's naming convention。它使代碼非常容易閱讀。駱駝這是必須的。

  2. Scanner被視爲Java上的資源。所以如果你打開它,你必須關閉它。否則,您可能會遇到資源泄漏問題。關閉資源只是一個簡單的方法調用,但不應該被忽略。

例如:

resourceVariableName.close(). 
  • 哪裏是從英語變量聲明上第三行?
  • 英語= englishtomorse.nextLine();


    第一個問題:

    Scanner將繼續閱讀直到它找到的文件終止條件上Java SE API

    的規定使用Scanner何時處理裏面的數據這是一個常見的做法一個循環,如果它符合文件結束條件或停止下一個操作,或找到「特殊」退出字。

    所以,你可以重構代碼以考慮以下幾種情況:

    • 掃描發現多行

    • 用戶沒有鍵入您保留退出Word($)

    Eg:

    Scanner myScanner = new Scanner(System.in); 
    
    while(myScanner.hasNext() && !myScanner.equals("$")) { 
        System.out.println(this.englishToMorse(myScanner.nextLine())); 
    } 
    
    myScanner.close(); 
    

    問題二,你應該檢查你的方法邏輯。你說你返回一個字符串,但它總是

    返回「」;

    爲什麼要在任何情況下返回空字符串?方法簽名很重要,因爲您可以預測該方法能夠做什麼以及必須返回什麼。

    想想一秒鐘,如果你的朋友提供該類他叫你的方法,他怎麼能預測你的方法簽名的返回類型說明你不回的莫爾斯電碼?

    順便說一句,你可以更好地解決這個問題,而不會圍繞兩個數組循環。看看Map data structure。這是對您整體解決方案的巨大改進。