0

英語からモールス信号への部分は正常に機能しますが、モールス信号から英語への変換はうまくいきません...私はEとTを取得し続けますモールス符号の文字の間にスペースがある場合、それがそれらであることがわかるようにする方法はありますか?すべての「。」の代わりに異なる文字。= E およびすべての "-" =T

コードがモールス信号から英語に変わるときにスペースをチェックするようにコードを取得しようとしていますが、正しく機能していません。

私の完全なコードは次のとおりです。

import java.util.Scanner;

public class MorseCode {
    public static void main(String [] args){


    String 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","1", "2","3","4","5","6","7","8","9","0"," "};
    String Morse [] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--..",".----","..---","...--","....-",".....","-....","--...","---..","----.","-----"," "};

    //Decide Either English to Morse or Morse to English



    System.out.println("For English-->Morse (Press 'E' )\n"
                    +  "For Mosrse-->English (Press 'M')");

    Scanner Input = new Scanner(System.in);
    String Response = Input.next();

    //For invalid Input
    while(!(Response.equalsIgnoreCase("E") || Response.equalsIgnoreCase("M"))){ 
        System.out.println("Invalid input, Please type in E or M");
        Response = Input.next();
    }
    //English to Morse-Code
    if(Response.equalsIgnoreCase("E")){

        System.out.println("Type in English");
        Input.nextLine();
        String Ephrase = Input.nextLine();
        Ephrase = Ephrase.toUpperCase();

        for(int count = 0; count < Ephrase.length(); count++ )
        { 
            for(int index = 0; index < Alphabet.length; index++) 
            { 
                //Matches English to Morse and Prints
                if(Ephrase.substring(count, (count+1)).equals(Alphabet[index]))
                    System.out.print(Morse[index] + " "); 
            } 
        } 


    }
    //Morse-Code to English
    else if(Response.equalsIgnoreCase("M")){

        System.out.println("Type in MorseCode");
        Input.nextLine();
        String Mphrase = Input.next();

        for( int count = 0; count < Mphrase.length(); count++  )
        { 
            for (Scanner s = new Scanner(Mphrase); s.hasNext();) {

                String letter = s.next();

                for(int index = 0; index < Morse.length; index++) {

                    if(letter.equals(Morse[index])) { 

                        System.out.println(Alphabet[index]);
                        break;
                   }
                }


            }

        } 



}
    }}
4

3 に答える 3

0

最も簡単なことは、マップを作成することだと思います。

int totalLetters = 26;
HashMap<String, String> englishToMorse = new HashMap<String, String>(totalLetters);
HashMap<String, String> morseToEnglish = new HashMap<String, String>(totalLetters);

for (int i = 0; i < Alphabet.length; i++) {
    englishToMorse.put(Alphabet[i], Morse[i]);
    morseToEnglish.put(Morse[i], Alphabet[i]);
}

次に、一方から他方に翻訳する必要がある場合は、文内の単語を分割し、各単語について適切な辞書/ハッシュマップを確認します。

于 2014-12-06T02:50:36.593 に答える
0

モールス フレーズを一度に 1 文字ずつスキャンする代わりに、StringTokenizer または Scanner を使用して空白で分割します。

for (Scanner s = new Scanner(Mphrase); s.hasNext();) {
    String letter = s.next();
    for(int index = 0; index < Morse.length; index++) {
       if(letter.equals(Morse[index])) { 
          System.out.println(Aplphabet[index]);
          break;
       }
    }
}
于 2014-12-06T02:51:12.330 に答える
0

あなたは java.util.StringTokenizer の後にいると思います

于 2014-12-06T02:51:30.000 に答える