-6

Java クラスの紹介では、英語からモールス信号への変換とモールス信号から英語への変換の両方が可能なモールス信号変換プログラムを作成することになっています。私のコードは英語をモールス信号に変換するのに役立ちますが、モールス信号から英語に変換することはできないようです。プロンプトは次のとおりです。

このプロジェクトでは、モールス信号を英語に、英語をモールス信号に変換するプログラムを作成します。プログラムは、希望する翻訳の種類を指定するようにユーザーに促し、モールス符号文字または英語文字の文字列を入力してから、翻訳結果を表示する必要があります。モールス符号を入力するときは、各文字/数字を 1 つのスペースで区切り、複数の単語を「|」で区切ります。たとえば、 --- | -… . 文「to be」のモールス符号入力になります。プログラムは 1 つの文を処理するだけでよく、句読点記号は無視できます。英語を入力するときは、各単語を空白で区切ります。

現在の「モールス信号」コードの何が問題なのか疑問に思っています。何が問題なのかご理解いただけましたら、ご協力をお願いいたします。私はこの問題を解決するために何時間も費やし、2015 年 8 月 26 日の太平洋時間の真夜中までにこの問題にたどり着きました。ありがとう!これが私のコードです:

//Justin Buckley
//8.26.2015
import java.util.Scanner;
public class MorseCodeProject1 {

    public static void main (String[] args)
    {

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

        Scanner input = new Scanner (System.in);
        System.out.println( "Please enter \"MC\" if you want to translate Morse Code into English, or \"Eng\" if you want to translate from English into Morse Code" );
        String a = input.nextLine();
            if ( a.equalsIgnoreCase("MC"))
            {
                System.out.println( "Please enter a sentence in Morse Code. Separate each letter/digit with a single space and delimit multiple words with a | ." );
                String b = input.nextLine();

                String[] words = b.split("|");
                for (String word: words )
                {
                    String[] characters = word.split(" ");
                    for (String character: characters) 
                    {
                        if (character.isEmpty()) { continue; }
                        for (int m = 0; m < Morse.length; m++)
                        {
                            if (character.equals(Morse[m]))   
                                System.out.print(English[ m ]);    
                        }    
                    }
                    System.out.print(" ");    
                }    
            }

            else if ( a.contains("Eng" ))
            {
                System.out.println("Please enter a sentence in English, and separate each word with a blank space.");
                String c = input.nextLine(); 

                c = c.toLowerCase ();

                for ( int x = 0; x < English.length; x++ )
                {
                    for ( int y = 0; y < c.length(); y++ )
                    {
                        if ( English [ x ] == c.charAt ( y ) )

                        System.out.print ( Morse [ x ] + " " );


                    }

                }


            }

            else 
            {
                System.out.println ( "Invalid Input" );

            }

        }



}
4

2 に答える 2

2

ここで、このコードはあなたのために働きます、あなたは英語からモールス信号への間違いもありました。私もそれを修正しました

public static void main(String[] args) {

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

            Scanner input = new Scanner (System.in);
            System.out.println( "Please enter \"MC\" if you want to translate Morse Code into English, or \"Eng\" if you want to translate from English into Morse Code" );
            String a = input.nextLine();
                if ( a.equalsIgnoreCase("MC"))
                {
                    System.out.println( "Please enter a sentence in Morse Code. Separate each letter/digit with a single space and delimit multiple words with a | ." );
                    String b = input.nextLine();
                    String[] words = null;
                    if(b.contains("|")){
                     words = b.split("[|]");
                    }else{
                        words = new String[1];
                        words[0] = b;
                    }

                    for (String word: words )
                    {
                        String[] characters = word.split(" ");
                        for(int h = 0;h < characters.length;h++){
                        for(int i = 0;i < Morse.length;i++){
                            if(characters[h].equals(Morse[i])){
                                System.out.print(English[i]);
                            }
                        }
                        }
                        System.out.print(" ");    
                    }    
                }

                else if ( a.contains("Eng" ))
                {
                    System.out.println("Please enter a sentence in English, and separate each word with a blank space.");
                    String c = input.nextLine(); 

                    c = c.toLowerCase ();

                    for ( int x = 0; x < c.length(); x++ )
                    {
                        for ( int y = 0; y < English.length; y++ )
                        {
                            if ( English [ y ] == c.charAt ( x ) )

                            System.out.print ( Morse [ y ] + " " );


                        }

                    }


                }

                else 
                {
                    System.out.println ( "Invalid Input" );

                }

            }
于 2015-08-27T04:02:22.133 に答える
0

私のコメントに続いて、この種の質問をする前に、宿題をする必要があります。

すべての答えは Java チュートリアルにあります: https://docs.oracle.com/javase/tutorial/java/data/strings.html

より具体的には、文字列を操作する方法を知りたい: https://docs.oracle.com/javase/tutorial/java/data/manipstrings.html

チュートリアルに合わせて、目的を達成する方法を示す基本的な例を次に示します。

if ( a.equalsIgnoreCase("MC"))
{
    System.out.println( "Please enter a sentence in Morse Code. Separate each letter/digit with a single space and delimit multiple words with a | ." );
    //Example input string
    String b = ".... . .-.. .-.. --- | .-- --- .-. .-.. -.. | .. -. | -- --- .-. ... ." ;

    //We cant use the split method here because it removes blank spaces, so lets keep it basic:
    //String[] words = b.split("|");
    int letterStart = 0;
    int letterEnd = 0;
    String letter = "";
    while (letterStart < b.length())
    {
        letterEnd = b.indexOf(" ", letterStart);
        //check if end of string has been reached 
        if (letterEnd == -1)
        {
          //grab last morse letter/sequence
          letter = b.substring(letterStart);
        }
        else
        {
          //grab next morse letter/sequence
          letter = b.substring(letterStart, letterEnd);
        }

        //convert each morse sequence to english 
        for (int m = 0; m < Morse.length; m++)
        {
        if (letter.equals("|"))
          {
            //show spaces between words
            System.out.print(" ");
            break;
          }
          else if (letter.equals(Morse[m]))
          {
            //show english letter
            System.out.print(English[m]);
            break;
          }
        }
        if (letterEnd == -1)
        {
        break;
        }
        letterStart = letterEnd+1;
    }
}
于 2015-08-27T04:19:53.787 に答える