Générateur de phrases java


J'essaie de faire en sorte que ce code prenne chaque variable, le transmette à la méthode builder et lui fasse créer une phrase complète en fonction de ce qui a été entré par l'utilisateur. La méthode builder la renvoie à la méthode principale et imprime la phrase complète composée de "sujet + verbe + adjectif + objet + adverbe".

Dois-je stocker chaque entrée utilisateur dans une ArrayList? Si oui, comment puis-je inviter l'utilisateur pour chaque nouvelle phrase? J'ai essayé d'utiliser for loops, mais il demande juste moi pour la première ligne 5 fois, en supposant que je fais le tableau[5].

package assignment.pkg4.pkg3.string.input;
import java.util.Scanner;

public class Assignment43StringInput {
    private static Scanner scanner = new Scanner( System.in );
    public static void main(String[] args) {

        System.out.print("Enter a subject: ");
        String subject = scanner.nextLine();

        System.out.print("Enter a verb: ");
        String verb = scanner.nextLine();

        System.out.print("Enter an adjective: ");
        String adjective = scanner.nextLine();

        System.out.print("Enter an object: ");
        String object = scanner.nextLine();

        System.out.print("Enter an adverb: ");
        String adverb = scanner.nextLine();


        System.out.print(builder(text));

    }

    public static String builder(String text) {
        String sentence = subject + verb + adjective + object + adverb;
        return sentence;
    }            
}
Author: Adrian Shum, 2017-07-17

2 answers

Si je comprends bien votre question, vous souhaitez utiliser une structure unique au lieu d'une variable pour chaque entrée. Si vous savez que votre taille sera toujours de 5 et ne changera pas, vous pouvez utiliser String[]. Vous pouvez également utiliser un List.

Mais si vous voulez savoir exactement ce qui est quoi, vous voudrez peut-être essayer Map. Je vais l'expliquer avec un exemple:

public class Assignment43StringInput {
  private static Scanner scanner = new Scanner( System.in );
  public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();

    System.out.print("Enter a subject: ");
    map.put("subject", scanner.nextLine());

    System.out.print("Enter a verb: ");
    map.put("verb", scanner.nextLine());

    System.out.print("Enter an adjective: ");
    map.put("adjective", scanner.nextLine());

    System.out.print("Enter an object: ");
    map.put("object", scanner.nextLine());

    System.out.print("Enter an adverb: ");
    map.put("adverb", scanner.nextLine());

    System.out.print(builder(map));
  }

  public static String builder(Map<String,String> map) {
    return map.get("subject") + " " + map.get("verb") + " " + map.get("adjective") + " " + map.get("object") + " " + map.get("adverb");
  }            
}

De Cette façon, vous pouvez facilement réorganiser votre phrase, si vous en avez besoin, et même d'ajouter plus d'éléments.

 1
Author: Tavo, 2017-07-17 01:15:28

Vous n'avez pas besoin de tableau ou de carte ou autre. Pour atteindre correctement votre exigence, il vous suffit de faire accepter les arguments correspondants à votre builder (je préfère l'appeler buildSentence, car la méthode est censée être un verbe):

public static String buildSentence(String subject, 
                                    String verb, 
                                    String adj, 
                                    String obj, 
                                    String adverb) {
    return subject + " " + verb + " " 
           + adjective + " " + object + " " + adverb;
}

Et vous l'appelez simplement avec vos variables passées en conséquence:

System.out.print(buildSentence(subject, verb, adjective, object, adverb));

En ce qui concerne l'utilisation de Array / ArrayList/ Map, étant donné que vous avez des ensembles de valeurs très bien définis à utiliser, vous ne devriez pas utiliser ces structures de données car elles sont trop polyvalentes et rendre votre code difficile à lire et sujet aux erreurs. Déclarer une classe simple pour servir à des fins de type struct est un bien meilleur choix:

class Sentence {
    public String subject;
    public String verb;
    public String adjective;
    public String object;
    public String adverb;
}

Dans votre main:

public static void main(String[] args) {
    Sentence sentence = new Sentence();

    System.out.print("Enter a subject: ");
    sentence.subject = scanner.nextLine();
    // do the same for other values

    System.out.print(buildString(sentence));
}

public static String buildString(Sentence sentence) {
    return sentence.subject + " " 
         + sentence.verb + " " 
         + sentence.adjective + " " 
         + sentence.object + " " 
         + sentence.adverb;
} 

Voyez combien le code devient plus clair et lisible?

Un changement encore meilleur consiste à déplacer buildString() ci-dessus en tant que méthode membre de Sentence.

 0
Author: Adrian Shum, 2017-07-18 07:51:32