besoin d'écrire un programme java pour convertir l'anglais en conversation pirate


J'ai essentiellement besoin d'un programme java qui traduira les phrases anglaises en conversation pirate. Le véritable objectif ici est d'utiliser une carte (Hashmap). C'est ce que j'ai jusqu'à présent.

Tout d'abord, j'ai utilisé une table de traduction et l'ai mise dans la carte de hachage. Après cela, j'ai utilisé une boucle for, afin que le programme puisse parcourir l'entrée et trouver les mots qui doivent être traduits.

Laissez-moi vous montrer un exemple: "le professeur veut savoir si il y a un restaurant proche."

Devrait être traduit par:

"th' cap'n veut t' savoir s'il y a une cuisine broadside. Arrr."

, Mais ma sortie ressemble à ceci:

Th cap'n veut t' savoir s'il y a une cuisine à proximité.

S'il s'agit d'un "mot de fin de phrase", la traduction doit être imprimée, suivie d'un "Arr". ("Hey."av >" avast. Arr.")

Mon code fait pas faire cela. J'ai essayé quelques codes mais aucun d'eux n'a fonctionné correctement.

J'utilise le test Junit. Si un autre problème auquel je suis confronté est, si je traduis un mot, disons simplement "bonjour", il me donne la traduction "ahoy" avec un espace dedans.

Comment puis-je éviter cela?

Je suis nouveau sur Java, j'apprécierais toute aide que je peux obtenir.

package pirate;

import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class PirateTranslator
{
public static void main(String[] args)
{
    Map<String, String> hashmap = new HashMap<>();
    hashmap.put("hello", "ahoy");
    hashmap.put("hi", "yo-ho-ho");
    hashmap.put("hey", "avast");
    hashmap.put("my", "me");
    hashmap.put("friend", "me bucko");
    hashmap.put("sir", "matey");
    hashmap.put("madam", "proud beauty");
    hashmap.put("stranger", "scurvy dog");
    hashmap.put("officer", "foul blaggard");
    hashmap.put("where", "whar");
    hashmap.put("is", "be");
    hashmap.put("are", "be");
    hashmap.put("the", "th");
    hashmap.put("you", "ye");
    hashmap.put("your", "yer");
    hashmap.put("you're", "ye be");
    hashmap.put("we're", "we be");
    hashmap.put("old", "barnacle-covered");
    hashmap.put("attractive", "comely");
    hashmap.put("happy", "grog-filled");
    hashmap.put("nearby", "broadside");
    hashmap.put("restroom", "head");
    hashmap.put("restaurant", "galley");
    hashmap.put("hotel", "fleabag inn");
    hashmap.put("bank", "buried treasure");
    hashmap.put("yes", "aye");
    hashmap.put("yes!", "aye aye!");
    hashmap.put("addled", "mad");
    hashmap.put("after", "aft");
    hashmap.put("money", "booty");
    hashmap.put("professor", "cap'n");
    hashmap.put("food", "grub");
    hashmap.put("of", "o'");
    hashmap.put("quickly", "smartly");
    hashmap.put("to", "t'");
    hashmap.put("and", "an'");
    hashmap.put("it's", "it be");
    hashmap.put("right", "starboard");
    hashmap.put("left", "port");

Scanner scan = new Scanner(System.in);
        String token = scan.nextLine();
        String[] result = token.split("\\s");
        for (int i = 0; i < result.length; i++)
        {
            if (hashmap.containsKey(result[i]))
            {
                result[i] = hashmap.get(result[i]);
            }
            System.out.print(result[i] + " ");
        }
    }
}
Author: user5909208, 2016-03-30

3 answers

Il suffit d'ajouter ceci comme la toute dernière ligne du code,

if (token.endsWith("."))
    System.out.print(" Arrr.");

Il y a d'autres problèmes, par exemple "gauche" comme direction doit être traduit, mais pas comme le passé du verbe "partir", c'est-à-dire" Je l'ai laissé derrière "ne devrait pas être traduit par" Je le bâbord derrière", n'est-ce pas tribord?

 2
Author: Bohemian, 2016-03-31 01:18:20

Quelques suggestions sans code, puisque je parie que vous pouvez créer votre propre code et le faire bien. Votre logique dans la boucle for devrait inclure:

  • Divisez la chaîne sur les espaces blancs you vous faites cela. Moi-même, j'ajouterais des jokers pour permettre un ou plusieurs caractères d'espace blanc, token.split("\\s+")
  • Vérifiez chaque jeton pour la ponctuation du terminal. -- il y a plusieurs façons de le faire, y compris vérifier le dernier caractère dans le jeton en utilisant token.charAt(token.length() - 1) == '.', ou faire un token.contains("."). Si tu sais que tu ne traiteras que avec les périodes, c'est simple à faire. Si vous avez d'autres ponctuations, cela peut devenir plus complexe.
  • Supprimer et enregistrer la ponctuation. Si vous savez que ce ne sera qu'une période, c'est simple. Si cela peut être des virgules ou plus, ce sera un peu plus complexe.
  • Si token est une clé dans HashMap, remplacez-la par du texte de HashMap. Vous avez déjà le faire.
  • Si la ponctuation terminale est présente, ajoutez-la et ajoutez le "Arr".
  • Si aucune ponctuation terminale n'est présente, ajoutez un espace. " ".
 2
Author: Hovercraft Full Of Eels, 2016-03-31 00:43:46

Voici ce que vous avez demandé (voir mes commentaires à côté du code source):

package pirate;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class PirateTranslator {

    //declared a static constant containing the finishing word.
    private static final String ARR = " Arr.";

    public static void main(String[] args) {

        Map<String, String> hashmap = new HashMap<String, String>();
        hashmap.put("hello", "ahoy");
        ...
        hashmap.put("left", "port");

        Scanner scan = new Scanner(System.in);
        String token = scan.nextLine();
        String[] result = token.split("\\s");

        //use StringBuilder class for string concatenation
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < result.length; i++) {
            String word = result[i];

            //remove full stop from the input if exists
            if(word.endsWith("."))
            {
                word = word.substring(0, word.lastIndexOf("."));
            }

            if (hashmap.containsKey(word)) {

                //insert space in front of the next word except for the first and the last one.
                if(sb.length() > 0 && i < result.length - 1)
                {
                    sb.append(" ");
                }

                //translate and concatenate the next word
                sb.append(hashmap.get(result[i]));
            }
        }

        //don't include full stop after exclamation character
        if(sb.lastIndexOf("!") == -1 && sb.lastIndexOf(".") == -1)
        {
            sb.append(".");
        }

        //append final ' Arr.'
        sb.append(ARR);

        //print out the translated sentence.
        System.out.print(sb.toString());
    }
}
 -1
Author: RZet, 2016-03-31 17:32:29