2017-07-25 3 views
-2

// Je ne suis qu'un débutant, c'est mon premier programme, ça fonctionne bien mais est-ce que je peux le rendre meilleur?Anglais vers le convertisseur de code Morse, comment puis-je le rendre plus efficace?

import java.util.*; 
public class NewClass1 { 

public static void main(String[] args) { 

Character alphabet [] = {'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 morseCode [] = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", "| "}; 

//putting alphabets and morsecode in HashMap 
Map<Character, String> morseCodes = new HashMap<>(); 
for(int i = 0; i < alphabet.length; i++) 
{ 
    morseCodes.put(alphabet[i], morseCode[i]); 
} 

//Took user input and converted it into LowerCase Character Array 
Scanner sc = new Scanner(System.in); 
String input = sc.nextLine(); 
char[] translate = input.toLowerCase().toCharArray(); 

//Translating user input(translate[]) using for loop 
for(int j=0; j<input.length(); j++){ 
    System.out.print(morseCodes.get(translate[j])); 
} 
} 
} 
+7

Vous pouvez le mettre en retrait correctement. – khelwood

+0

Ce n'est pas vraiment un problème de programmation spécifique. –

+5

Je crois que ce type de questions sont les bienvenues à [Revue de code] (https://codereview.stackexchange.com/) échange de pile – hrust

Répondre

1

code Vous était bon mais je pense que cette solution est plus efficace

import java.util.*; 
public class HelloWorld { 

public static void main(String[] args) { 

     String morseCode [] = {".- ", "-... ", "-.-. ", "-.. ", ". ", "..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ", ".-- ", "-..- ", "-.-- ", "--.. ", "| "}; 

     //Took user input and converted it into LowerCase Character Array 
     Scanner sc = new Scanner(System.in); 
     String input = sc.nextLine(); 
     char[] translate = (input.toLowerCase()).toCharArray(); 

     //Translating user input(translate[]) using for loop 
     for (int j = 0; j < translate.length; j++) { 
      System.out.print(morseCode[translate[j] - (int)'a']); 
     } 
} 
} 

J'ai enlevé le hashmap, cela est efficace dans certains cas, mais ici, pas besoin de cette structure de données.

Explaination par @Shirkam.

« En le faisant, vous êtes à convertir la valeur ASCII de la lettre « a » à un int (97, je pense) Faire que vous permet de transformer la valeur ASCII de la traduction [j] à une valeur d'échelle 0, commençant plutôt en 97. Cela vous permet d'utiliser directement le tableau car ils commencent tous en 0. En résumé, vous déplacez les valeurs ASCII vers la gauche pour pouvoir utiliser directement un tableau. "

+0

Salut, vous êtes incroyable, je ne comprends tout simplement pas la chose principale. pouvez-vous me faire comprendre comment cette ligne va-t-elle s'exécuter? MorseCode [translate [j] - (int) 'a'] –

+0

@TosifKhan En le faisant, vous convertissez la valeur ASCII de la lettre 'a' en un int (97, je pense). Cela vous permet de transformer la valeur ASCII de 'translate [j]' en une valeur d'échelle 0, au lieu de 97. Cela vous permet d'utiliser directement le tableau car ils commencent tous par 0. En résumé, vous déplacez les valeurs ASCII la gauche pour pouvoir utiliser un tableau directement. – Shirkam

+0

Aussi, @Cylexx gardez à l'esprit que votre réponse est totalement fonctionnelle, car '','' et ''|' 'ne sont pas utilisés après les caractères minuscules. En effet, '',' 'est 44 dans la table ASCII et'' | ''est 124, donc ils nécessiteront un traitement spécial. – Shirkam