-1

私はモールス信号をやろうとしています-英語の双方向の翻訳者

import java.util.Scanner;
public class JavaProject {

public static void main(String[] args) {
    // TODO Auto-generated method stub
 char [] Eng = { '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 [] Code = { ".-" , "-..." , "-.-." , "-.." , "." , "..-." , "--." , "...." , ".." , ".---" , "-.-" , ".-.." , "--" , "-." , "---" , ".--." , "--.-" ,  ".-." , "..." , "-" , "..-" , "...-" , ".--" , "-..-" , "-.--" , "--.." , "|" };
System.out.println(" Enter Morse Code or something in English. A for english, or B for morse code.");
Scanner a = new Scanner(System.in);
String z = a.nextLine();
if (z.equals("A"));
{
    System.out.println("enter in english");
    Scanner f  = new Scanner(System.in);
    String b = f.nextLine();
    for ( int x = 0; x < Eng.length; x++ )
    {
        for ( int y = 0; y < b.length (); y++ )
        {
            if ( Eng [ x ] == b.charAt ( y ) )

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


}
else if (z.equals("B"));
{
    System.out.println("enter in Morse");
    Scanner v  = new Scanner(System.in);
    String n = v.nextLine();
    for ( int i = 0; i < Code.length; i++ )
    {
        for ( int p = 0; p < n.length (); p++ )
        {
            if ( Eng [ i ] == n.charAt ( p ) )

            System.out.print ( Eng [ i ] + " " );
        }
      } 
}
}
}

英語からモールスへの翻訳は完璧ですが、else という単語はエラーを引き起こします。

また、「this」と入力すると、モールスまたは英語の翻訳者に送信されるようにしようとしましたが、機能しないようです

何らかの理由で、else という単語によってエラーが発生する

4

3 に答える 3

2

変化する

if (z.equals("B"));
if (z.equals("A"));

if (z.equals("B"))
if (z.equals("A"))

これは、両方の if ブロックを機能させるための修正にすぎません...しかし、ロジックを記述した方法では、英語->モールスも正しく、モスレ->英語も正しくありません。

作業コード:

public static void main(String[] args) {

char[] Eng = { '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[] Code = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
                "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
                "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
                "-.--", "--..", "|" };
System.out.println("Enter your choice: \n1. A for English -> Morse Code \n2. B for Morse Code -> English");
Scanner a = new Scanner(System.in);
String z = a.nextLine();
if (z.equalsIgnoreCase("A")) {
System.out.println("enter in english");         
String b = a.nextLine();
for (int x = 0; x < b.length(); x++) {
    for (int y = 0; y < Eng.length; y++) {
        if (Eng[y] == b.charAt(x))
            System.out.print(Code[y] + " ");
        }
    }    
} 
else if (z.equalsIgnoreCase("B")) {
    System.out.println("enter in Morse");           
    String n =a.nextLine();
    String[] arr = n.split(" ");
    for (int p = 0; p < arr.length; p++) {
        for (int y = 0; y < Code.length; y++) {
            if (Code[y].equals(arr[p]))
                System.out.print(Eng[y]);
            }    
        }    
    }
a.close();      
}

チップ...

  1. あなたがしたように、あまりにも多くのスキャナーを使用しないでください... 1 つのスキャナーだけですべてを実行できます。
  2. 使用後は常にリソースを閉じてください...これらは Java の良い習慣です...
于 2015-07-28T08:40:36.477 に答える
1

The problem is that you only test one char at the morsecode in this snippet:

for ( int p = 0; p < n.length (); p++ )
        {
            if ( Eng [ i ] == n.charAt ( p ) )

            System.out.print ( Eng [ i ] + " " );
        }

To identify the whole term try to use:

n.compareTo(Code[i]) == 0)

final code:

    public static void main(String[] args) {

        char[] Eng = { '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[] Code = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
                "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
                "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
                "-.--", "--..", "|" };
        System.out
                .println(" Enter Morse Code or something in English. A for english, or B for morse code.");
        Scanner a = new Scanner(System.in);
        String z = a.nextLine();
        if (z.equals("A")) {
            System.out.println("enter in english");
            Scanner f = new Scanner(System.in);
            String b = f.nextLine();
            for (int x = 0; x < Eng.length; x++) {
                for (int y = 0; y < b.length(); y++) {
                    if (Eng[x] == b.charAt(y))

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

        } else if (z.equals("B"))

    {
        System.out.println("enter in Morse");
        Scanner v = new Scanner(System.in);
        String n = v.nextLine();

        for (int p = 0; p < Code.length; p++) {
            if (n.compareTo(Code[p])==0){

                System.out.print(Eng[p] + " ");
                break;
            }
        }

    }
于 2015-07-28T08:46:04.203 に答える
1

a) if の後のセミコロンが間違っています。

if (z.equals("A"));

つまり、何も実行されません。

b) 英字を調べて、そのうちの 1 つが入力に含まれているかどうかを調べます。間違った方法。入力を調べて、その文字を検索する必要があります。あなたがやっている方法では、「sos」は「oss」としてコード化されます。これは、最初に「o」を見て、それを見つけ、次に「s」を見て、見つけて、もう一度見つけるためです-「o」が最初に来るからです英語のアルファベットで。

c) モールス語 -> 英語は、単一のモールス文字を見ることができないため、この方法では機能しません。入力を " " (String.split) で分割し、結果を Code 配列と比較して正しいインデックスを見つけることをお勧めします。現時点では、sos は "."、"."、"."、"-"、...、"." としてチェックされます。しかし、チェックしたいのは「...」、「---」、「...」であり、これは次の結果になります。"... --- ...".split(" ");

于 2015-07-28T08:42:34.183 に答える