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;
}
}
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.
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
.