2017-11-17 139 views
0

這是我在這個平臺上的第一篇文章的麻煩,即時通訊還挺新本的Java編程,也並不擅長英語:P創建莫爾斯電碼翻譯爲我的編程類,具有輸出

我的老師問對於莫爾斯電碼翻譯莫爾斯不會字母,反之亦然

這是我想出了這個代碼:

import java.util.Scanner; 
public class Morse2 { 
    public static void main(String[] args){ 
String[] letras = { "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[] MORSE = { 
".-" ,"-...","-.-.","-.." ,"." , 
"..-.","--." ,"....",".." ,".---", 
"-.-" ,".-..","--" ,"-." ,"---" , 
".--.","--.-",".-." ,"..." ,"-" , 
"..-" ,"...-",".--", "-..-","-.--", 
"--.."}; 
System.out.println("Insira uma frase em codigo morse para uma traducao para texto ou vice-versa"); 
Scanner in=new Scanner(System.in); 
String frase =in.nextLine(); 
String resp=""; 

frase=frase.toLowerCase(); 
String[] paraletras=frase.split(""); 
String[]paraMorse=frase.split(" "); 
for(int i=0;i< paraletras.length;i++){ 
    for(int j=0;j< letras.length ;j++){ 
    if (paraletras[i].equals(letras[j])){ 
    resp=resp+ MORSE[j]+" ";} 
    } 
} 
for(int k=0;k<paraMorse.length;k++){ 
    for (int l=0;l<MORSE.length;l++){ 
      if(paraMorse[k].equals(MORSE[l])){ 
    resp=resp+letras[l]+ " ";}} 
    } 

System.out.print(resp);} 

    } 

類編譯罰款,但有我的輸出,更具體數量級的一些問題IM輸出:

例如我的輸入「a b -.- c」 我想要什麼「.- -... k -.-。」 我得到了「.- -... -.-。k」 我相信那是因爲我用了2個週期而不是1個,但我真的不知道該怎麼做。想要一些幫助 當用戶寫入一個不可能的字符,如「*」即時消息,可以放一個「?」在這個位置和IM也strugling上,我不知道我是否應該使用的if else週期或什麼

請幫助我,謝謝大家^^

+0

你好,Joao,你發佈你的問題在葡萄牙的StackOverflow?此外,我建議添加標籤「爪哇」,所以人們可以幫助你更多... –

+0

奧基,謝謝你^^ –

回答

0

是的,你是正確的。這是因爲你依次運行你的循環。

你需要一個循環遍歷你的輸入,然後檢查一個輸入是否是一個字母 - 從字母數組中取出翻譯,如果它是來自Morse數組的MORSE。

問題陣列不是最好的方法。使用一個字母將是一個關鍵字的地圖要容易得多,MORSE將是一個值。

那麼代碼可能看起來像:

public static void main(String... args) { 

    String[] letras = { "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[] MORSE = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", 
      "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." }; 
    System.out.println("Insira uma frase em codigo morse para uma traducao para texto ou vice-versa"); 


    Map<String, String> decodeMap = new HashMap<String, String>(); 

    for (int i=0; i< letras.length; i++) 
    { 
     decodeMap.put(letras[i], MORSE[i]); 
    } 

    Scanner in=new Scanner(System.in); 
    String frase =in.nextLine(); 
    String resp = ""; 

    frase = frase.toLowerCase(); 
    String[] paraletras = frase.split(" ");  
    for (int i = 0; i < paraletras.length; i++) { 
     boolean gotValue = false; 
     for (Entry<String, String> decodeEntry: decodeMap.entrySet()) {    
      if (decodeEntry.getKey().equals(paraletras[i])) 
      { 
      // it is a letter print its MORSE 
      resp += decodeEntry.getValue(); 
      gotValue = true; 
      break; 
      } else if (decodeEntry.getValue().equals(paraletras[i])) 
      {    
      // it is a MORSE - print its letter 
      resp += decodeEntry.getKey(); 
      gotValue = true; 
      break; 
      } 
     } 
     if (gotValue) 
     { 
      resp += " "; 
     } 
    } 
    System.out.print(resp); 
} 
0

你必須評估每一個組或字符猜測,如果它是莫爾斯與否。

Example: 
First group: 'a' 
    is morse -> no 
    is a letter -> yes -> then convert to morse 
Second group: 'b' 
    is morse -> no 
    is a letter -> yes -> then convert to morse 
Third group: '-.-' 
    is morse -> yes -> then convert to letter 

此代碼可能更有效,但我認爲它很容易理解。我希望這可以幫助你提高你的編程技能。

import java.util.Scanner; 

public class Morse2 { 

    public static void main(String[] args) { 

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

     System.out.println("Insira uma frase em codigo morse para uma traducao para texto ou vice-versa"); 
     Scanner in=new Scanner(System.in); 
     String frase =in.nextLine(); 
     String resp = ""; 

     frase = frase.trim().toLowerCase(); 
     String[] chars = frase.split(" "); 

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

      String group = chars[i]; 

      String newChar = null; 

      for (int j = 0; j < LETRAS.length; j++) { 
       if (LETRAS[j].equals(group)) { 
        newChar = MORSE[j]; 
        break; 
       } 
      } 

      if (newChar == null) { 
       for (int j = 0; j < MORSE.length; j++) { 
        if (MORSE[j].equals(group)) { 
         newChar = LETRAS[j]; 
         break; 
        } 
       } 
      } 

      if (newChar == null) { 
       System.out.println("Group not found: "+group); 
       continue; 
      } 
      resp += newChar + " "; 

     } 
     System.out.print(resp); 
     in.close(); 
    } 

} 
+0

對不起,這樣的小白,但可能是因爲我一直在這裏8小時前,但爲什麼是這段代碼只給了我幾次摩爾斯碼給字母'a'? –

+0

此代碼是確定的。你修改的代碼有2個錯誤。看看循環內部的if語句。你已經關閉了if語句。由於這個原因,循環不能正常工作。 –

0

對不起,是這樣的小白,但可能也正是因爲我一直都在這裏,因爲13小時前,但爲什麼這個代碼給我只有莫爾斯電碼的字母「A」幾次?

import java.util.Scanner; 
public class Morse2 { 
    public static void main(String[] args){ 
String[] abecedario = { "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[] MORSE = { 
".-" ,"-...","-.-.","-.." ,"." , 
"..-.","--." ,"....",".." ,".---", 
"-.-" ,".-..","--" ,"-." ,"---" , 
".--.","--.-",".-." ,"..." ,"-" , 
"..-" ,"...-",".--", "-..-","-.--", 
"--.."}; 
System.out.println("Insira uma frase em codigo morse para uma traducao para texto ou vice-versa"); 
Scanner in=new Scanner(System.in); 
String frase =in.nextLine(); 
String resp=""; 
frase=frase.toLowerCase(); 
String[] palavra=frase.split(" "); 
for(int i=0;i< palavra.length;i++){ 
    String letra=palavra[i]; 
    String novochar=""; 

    for (int j=0;j<abecedario.length;j++){ 
     if (abecedario[j].equals(letra)); 
     novochar=MORSE[j]; 
     break; 

    } 
    if(novochar==""){ 
     for (int j=0;j<MORSE.length;j++){ 
     if (MORSE[j].equals(letra)); 
     novochar=abecedario[j]; 
     break; 
    } 
    } 

    if(novochar==""){ 
     novochar="?"; 
     continue; 

    } 
    resp=resp+novochar+" "; 
    } 
    System.out.println(resp); 
    } 
} 
+0

這是因爲你沒有在'j'的循環中做適當的'if'。看:'如果(abecedario [j] .equals(letra));' - 什麼都不關閉。然後'novochar = abecedario [j];''總是'abecedario [0]'並且'for'立即崩潰。所以......你忘了這樣做:'if(abecedario [j] .equals(letra))novochar = MORSE [j]; 休息; }' - 在第二個'for'循環中'if'相同 – Vadim