2017-10-01 4 views
0
私は私の髪を引っ張ってる

...はい、それはすべての上に掲示されます を認識していないし、いや、私のエラーのまわりで私の頭を包むように見えることはできません。私は文字や文字列のニュアンスに対処しようとしていることがわかります。しかし、私のアウトプットは助けにならないかもしれません。以下は私が得ている出力と私にそれを与えるコードです。のJava - スプリットモールス、単一モールス文字

入力:
...
なし出力

この入力
... ---
出力
電子
電子
電子

とこの入力

... |
電子
電子
電子

( 'S' でなければなりません)のみ最初のモールス "文字" ---
出力は、後に残りの部分を無視しますパイプおよび/またはスペース

public static void morseToEnglish() { 

    String englishArray[] = {"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 morseArray[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".--- ", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."}; 

    //String translatedText = ""; 
    //String newEnglishChar; 

    System.out.println("Enter Morse, separate each letter or digit with a single space, separate words with '|' "); 
    Scanner input = new Scanner(System.in); 

    String morseSentence = input.nextLine(); 

    String[] words = morseSentence.split("|"); 

    for (String word: words) { 

    String[] morseChars = word.split(" "); 

     for (String morseChar : morseChars) { 

      if (morseChar.isEmpty()) { continue; } 

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

       if (morseChar.equals(morseArray[i])) { 

        System.out.println(englishArray[i]); 

        //newEnglishChar = englishArray[i]; 
        //translatedText = translatedText + newEnglishChar; 
       } 
      } 
     } 
    } 
    //System.out.println(translatedText); 
} 

コンパイルエラーは発生しません。コードはうまくいきます。私はちょうど間違った指示をしたので、私の出力は私が好むとは思いません。 Scannerがモールスを入力しているようです。 '...'、そしてそれを3つのeとして解釈するのは単一ではない。私は(多かれ少なかれ)(!(あれば。含まれている))の場合を除いてみましたが、それは働いていなかったと過度の条件に見えました。 私はちょうど正しい方法で正しいオブジェクトを処理するわけではない感じ。後者の場合(スペースで区切られた2つのモールス信号文字は、)機能する場合は、本当に、私は大丈夫だろう。単一のモールスのキャラクターがこの時点で尋ねるにはあまりにも多すぎるかもしれません。 壮大な質問:私は、Javaを語っています、それは3つの別々の文字として3個のドットを治療するためのOKですか?そして、なぜ?......私はそれが助けになることを願っています。

+0

ようこそスタックオーバーフロー!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、より具体的な質問に戻ってください。 –

答えて

1

あなたのコードは二つの問題があります:あなたは、内側のループで間違ったlengthを使用|ので

  • regex metacharacterされるので、たとえば、使用してそれをエスケープする必要があり、morseSentence.split("[|]")、および
  • :する必要がありますmorseArray.lengthではなくwords.length

morseArrayのすべての文字列が一意であるので、あなたはbreak私を設定することができますnマッチしたループをネストしたループ。

Demo.

注:あなたがループ(Map<K,V>)せずにマッピングを行うことを連想コンテナの恩恵を受けることができます。

+0

はい、データ構造はsucky(@jeanr)です。私は時間がある場合、私はそれを(いくつか)きれいにする傾向があります。私は流行以上の機能を好む。私は良い習慣を注入することを知っていますが。 2つのエスケープと.lengthの固定については(私はある時点でそれを今日笑っていました)うまくいきます。私は思ったほどにうまくいく。皆さん、ありがとうございました! – bubblyBibliophile

+0

@bubblyBibliophileよろしくお願いします。この質問に別の助けが必要ない場合は、左側にあるグレーのチェックマークをクリックして回答の1つを受け入れてください。これは、あなたの問題が解決されたことを他の人に知らせ、Stack Overflowで新しいバッジを得ることができます。 – dasblinkenlight

1

あなたが書いたコード内のいくつかの問題があります。

  1. データ構造はよくあなたが2つの値を関連付けているので、このユースケースのために、あなたがより良いMapを使用する必要があり、選択されていません。

  2. あなたが正規表現で使用している文字列ではなく、良いものは、あなたがローカル変数ここ

を使用するように回避することにより、コードをより読みやすくすることができ、それを

  • をエスケープする必要がありますあなたが望むものの作業バージョンです

    public static Map<String, String> init() { 
        HashMap<String, String> map = new HashMap<>(); 
        map.put(".", "e"); 
        map.put("...", "h"); 
        //... All the other letters 
        return map; 
    } 
    
    public static void main(String ... args) { 
        Map<String, String> map = init(); 
        System.out.println("Enter Morse, separate each letter or digit with a single space, separate words with '|' "); 
        Scanner input = new Scanner(System.in); 
        String morseSentence = input.nextLine(); 
        for (String word: morseSentence.split("\\|")) { 
         for (String morseChar : word.split(" ")) { 
          if (!morseChar.isEmpty()) { 
           System.out.print(map.get(morseChar)); 
          } 
         } 
         System.out.print(" "); 
        } 
    } 
    
  • +0

    恐ろしい答え...私はHashMapを見ていませんでした。なぜなら、「クラスで許されているかどうかわからないからです」(Sheesh)しかし、私は自分自身を教えて、とにかくやっています。配列はHashMapと同じ目的を果たしますか?私が検討していたもの – bubblyBibliophile

    +0

    2D配列を使用することもできますが、2D配列VS O(1)のHashMap(O(n) HashMapの場合) この回答が役に立った場合は、あなたの投稿を解決済みの@bubblyBibliophileとしてマークすることをためらわずに:) – jeanr

    関連する問題