2015-07-28 261 views
-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 ] + " "); 
     } 
     } 
} 
} 
} 

英語莫爾斯翻譯完美,但沒有別的詞會導致錯誤。

另外,我試圖使它所以如果我鍵入「這」,那麼它會去到任何一個莫爾斯或英文翻譯,但它似乎沒有工作

出於某種原因,這個詞別的原因錯誤

+0

不,英語並不完美,對不起SOS是不是--- ... ... ;-) –

+0

請注意,這是莫爾斯 - 文本翻譯,語言根本不包括它。 – Jasper

回答

2

變化

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

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

這僅僅是一個修復˚F或使你的兩個塊如果工作......但你寫你的邏輯的方式既不英語 - >莫爾斯是正確的,也不是莫斯雷 - >英語是正確的。

工作代碼:

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. 不要使用太多的掃描儀,你是......它都可以做用只有一臺掃描儀。
  2. 使用後務必關閉您的資源......這些都是在Java中的良好做法...
+0

謝謝,但即時通訊仍然在Java開始,所以即時通訊不太確定,如果我允許使用分詞這個詞...英國的摩斯密碼似乎工作得很好 – Java

+0

莫爾斯英語怎麼樣不適合你? ?如果你不被允許使用拆分,你可以編寫自己定製的方法... – CoderNeji

+0

哦,沒關係,謝謝!我視力不好,所以我誤解了代碼哈哈。 – Java

1

一)IFS後的分號是錯誤的。

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

這意味着,什麼都不會被執行。

b)您正在瀏覽英文字符,然後查看它們是否包含在輸入中。錯誤的方式。你必須仔細閱讀輸入內容並查找相應的字符。你的做法是,「sos」將被編碼爲「oss」,因爲它首先查看「o」,找到它,然後查看「s」,找到它,再次找到它 - 因爲「o」首先出現在英文字母表中。

c)莫爾斯 - >英語不能這樣工作,因爲你不能看單莫爾斯角色。我建議通過「」(String.split)分割輸入,然後將結果與Code數組進行比較以找到正確的索引。目前,sos會被檢查爲「。」,「。」,「。」,「 - 」,...,「。」。但是你想檢查的是「...」,「---」,「...」,這將是"... --- ...".split(" ");

1

問題的結果是,你只測試一個在這個片段中的摩爾斯電碼字符:

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

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

要確定整個學期嘗試使用:

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

最終代碼:

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; 
      } 
     } 

    } 
+0

檢查你的代碼之後,其他......它不應該在那裏終止......否則它會要求在所有情況下在莫爾斯輸入... – CoderNeji

+0

你的權利。改善答案 – MrT

+0

爲什麼你有兩個如果塊......現在這只是代碼重新編制 – CoderNeji