2012-10-21 5 views
2

Je suis en train de créer un traducteur de code Morse et j'ai couru quelques problèmes. Il compile, mais quand j'essaie de l'exécuter, il ne me demande que la première question de savoir de quelle manière vous voulez traduire, et non ce que vous voulez traduire. Je sais que ma première fonction est très inefficace. J'utilise aussi Input.getString ce que je ne pense pas être standard mais cela vous permet essentiellement d'entrer une chaîne.Morse Traducteur code

Ceci est mon code:

public class MorseCodeJavaProgram { 
    public static void morse(String s3){ 
     int letters [ ] = new int [ 26 ]; 
     for (int num = 0; num < s3.length(); num++){ 
       switch (s3.charAt(num)){ 
        case 'a': 
         System.out.print(".- "); 
         break; 
        case 'b': 
         System.out.print("-… "); 
         break; 
        case 'c': 
         System.out.print("-.-. "); 
         break; 
        case 'd': 
         System.out.print("-.. "); 
         break; 
        case 'e': 
         System.out.print(". "); 
         break; 
        case 'f': 
         System.out.print("..-. "); 
         break; 
        case 'g': 
         System.out.print("--. "); 
         break; 
        case 'h': 
         System.out.print("…. "); 
         break; 
        case 'i': 
         System.out.print(".. "); 
         break; 
        case 'j': 
         System.out.print(".--- "); 
         break; 
        case 'k': 
         System.out.print("-.- "); 
         break; 
        case 'l': 
         System.out.print(".-.. "); 
         break; 
        case 'm': 
         System.out.print("-- "); 
         break; 
        case 'n': 
         System.out.print("-. "); 
         break; 
        case 'o': 
         System.out.print("--- "); 
         break; 
        case 'p': 
         System.out.print(".--. "); 
         break; 
        case 'q': 
         System.out.print("--.- "); 
         break; 
        case 'r': 
         System.out.print(".-. "); 
         break; 
        case 's': 
         System.out.print("... "); 
         break; 
        case 't': 
         System.out.print("- "); 
         break; 
        case 'u': 
         System.out.print("..- "); 
         break; 
        case 'v': 
         System.out.print("...- "); 
         break; 
        case 'w': 
         System.out.print(".-- "); 
         break; 
        case 'x': 
         System.out.print("-..- "); 
         break; 
        case 'y': 
         System.out.print("-.-- "); 
         break; 
        case 'z': 
         System.out.print("--.. "); 
         break; 
        case ' ': 
         System.out.print(" | "); 
         break; 
       } 

      } 
    } 
    public static void toEnglish(String s1){ 
    String english [ ] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "y", "z", " " }; 
    String morse [ ] = { ".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", "…. ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", "| " }; 

     for (int num = 0; num < s1.length(); num++){ 
      if (s1.charAt (num) == ' '){ 
       for (int num2 = num; num2 < s1.length(); num2++){ 
        if (s1.charAt (num2++) == ' '){ 
         for (int num3 = 0; num < 26; num3++){ 
          if (s1.substring(num++, num2 + 2) == (morse [ num3 ])){ 
           System.out.print(english [ num3 ]); 
          } 
         } 
        } 

       } 


      } 
     } 
    } 

    public static void main(String [] args){ 
     String s2 = Input.getString("To Morse or From Morse"); 
     if (s2 == "From Morse"){ 
      String s1 = Input.getString("Please type a phrase in English"); 
      toEnglish(" " + s1 + " "); 
     } 
     if (s2 == "To Morse"){ 
      String s3 = Input.getString("Please type a phrase in Morse Code"); 
      morse(s3); 
     } 
    } 
    } 
+0

Je ne sais pas pourquoi mon code est venu deux fois désolé – user1690013

+1

Lorsque l'on compare les chaînes de texte, je suis un fan d'utiliser 'string.equalsIgnoreCase (anotherString);' –

Répondre

4

Vous comparez des chaînes à l'aide ==. En Java, == compares references, not content.

les changer à utiliser .equals(), comme ceci:

if (s2 == "From Morse"){ 

devrait être:

if (s2.equals("From Morse")){ 

Et bien sûr, cela devrait s'appliquer à votre autre comparaison de chaînes (s) ainsi. (Vos char comparaisons sont bien en l'état.)

+0

merci mais maintenant je reçois une erreur sur l'accès à l'index -1 d'un tableau – user1690013

+0

vous pouvez fermer ce fil (la case du côté de la réponse) et d'ouvrir une nouvelle. Je publierais uniquement la méthode 'toEnglish' et publierais la sortie d'erreur complète. Vos boucles doivent définitivement être nettoyées un peu, mais plus que je ne peux le faire par le biais de commentaires. – Eric

1

Vous comparez la valeur de chaîne avec l'opérateur ==. Mais == opérateur seul vérifier la référence de l'objet sont égaux ou non.

if (s2 == "From Morse"){ 
      String s1 = Input.getString("Please type a phrase in English"); 
      toEnglish(" " + s1 + " "); 
     } 

au lieu que vous essayez

if ("From Morse".equals(s2)){ 
       String s1 = Input.getString("Please type a phrase in English"); 
       toEnglish(" " + s1 + " "); 
+0

Utiliser ' "De Morse" .equals' est le choix de loin supérieur à' s2.equals ("de Morse") '. – cwallenpoole

+0

@cwallenpoole Pourquoi est-ce? [Cette question et ses réponses] (http://stackoverflow.com/questions/9888508/string-equals-argument-ordering) semblent indiquer le contraire. – Eric

+1

si s2 est null alors il se produira une exception de pointeur nul. –